阿里云容器服务提供高可靠的 ingress controller 组件,集成了阿里云 SLB 服务,为您的 Kubernetes 集群提供灵活可靠的路由服务(Ingress)。

下面是一个 Ingress 编排示例。通过 Web 界面进行配置时,您需要对注释的参数进行配置,部分配置需要创建依赖项,具体请参见通过 Web 界面创建路由。 也可以参考Ingress 支持Kubernetes Ingress。此外,Ingress也支持configmap的配置方式,请参见https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/service-match: 'new-nginx: header("foo", /^bar$/)'           #灰度发布规则,本例为Header请求头
    nginx.ingress.kubernetes.io/service-weight: 'new-nginx: 50,old-nginx: 50'                #流量权重注解
  creationTimestamp: null
  generation: 1
  name: nginx-ingress
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/nginx-ingress
spec:
  rules:                                                        ##路由规则
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: new-nginx
          servicePort: 80
        path: /
      - backend:
          serviceName: old-nginx
          servicePort: 80
        path: /
tls:                                                         ## 开启 TLS,配置安全路由
  - hosts:
    - *.xxxxxx.cn-hangzhou.alicontainer.com
    - foo.bar.com
    secretName: nginx-ingress-secret                          ##使用的 secret 名称
status:
  loadBalancer: {}

注解

您可以指定 ingress 的 annotation ,指定使用的 ingress controller,以及路由的规则,如路由权重规则、灰度发布规则和重写规则等。Ingress的注解请参见https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

例如,一个典型的重定向注解:nginx.ingress.kubernetes.io/rewrite-target: / 会将/path路径重定向到后端服务能够识别的/ 路径上面。

规则

规则指的是授权入站连接到达集群服务的路由规则,通常指 http/https 规则,包括域名(虚拟主机名称)、URL 访问路径、服务及端口等。

每条规则需要配置以下信息:

  • host 配置项:比如阿里云 Kubernetes 集群服务测试域名;或虚拟主机名称,如 foo.bar.com
  • URL 路径:指定访问的 URL 路径,即 path。每个 path 都关联一个 backend(服务),在阿里云 SLB 将流量转发到 backend 之前,所有的入站请求都要先匹配 host 和 path。
  • backend 配置:即服务配置,是一个 service:port和流量权重的组合。Ingress 的流量根据设置的权重被转发到它所匹配的 backend。
    • 服务名称:Ingress转发的backend服务名称。
    • 服务端口:服务暴露的端口。
    • 服务权重:一个服务组中各服务的权重比例。
      说明
      1. 服务权重采用相对值计算方式。例如两个服务权重都设置为50,则两个服务的权重比例都是50%。
      2. 一个服务组(同一个ingress yaml中具有相同Host和Path的服务)中未明确设置权重的服务默认权重值为100。

灰度发布

容器服务支持多种流量切分方式,适用于灰度发布以及AB测试场景。
说明 目前阿里云容器服务K8S Ingress Controller需要 0.12.0-5及其以上版本才支持流量切分特性。
  1. 基于Request Header的流量切分
  2. 基于Cookie的流量切分
  3. 基于Query Param的流量切分

设置灰度规则后,请求头中满足灰度发布匹配规则的请求才能被路由到设置的服务中。如果该服务设置了100%以下的权重比例,满足灰度规则的请求会继续依据权重比例路由到服务组下的各个服务。

TLS

您可以通过指定包含 TLS 私钥和证书的 secret 来加密 Ingress,实现安全的路由访问。TLS secret 中必须包含名为 tls.crt 和 tls.key 的证书和私钥。更多 TLS 的原理,请参见 TLS;关于如何生成 secret,请参见配置安全的路由服务

标签

您可为 ingress 添加标签,标示该 Ingress 的特点。