本文介绍如何利用阿里云容器服务的Ingress功能,发布新版本服务。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
- 先选择命名空间,然后选择无状态页签。
- 单击无状态页签右上角的使用模板创建。
- 选择示例模板或使用已有模板,然后单击创建。部署新版本nginx应用,包含一个 Deployment、 Service以及Ingress。Deployment及Service编排模板如下所示。
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: new-nginx spec: replicas: 1 selector: matchLabels: run: new-nginx template: metadata: labels: run: new-nginx spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/xianlu/new-nginx imagePullPolicy: Always name: new-nginx ports: - containerPort: 80 protocol: TCP restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: new-nginx spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: run: new-nginx sessionAffinity: None type: NodePort
Ingress模板如下:说明 若Ingress的Annotation既没有设置service-match,也没有设置service-weight,Ingress Controller在转发客户端请求时默认会将请求均衡地随机转发到新老版本服务中。-
满足正则匹配foo=bar的客户端请求才能访问新版本服务。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: gray-release annotations: nginx.ingress.kubernetes.io/service-match: | # 请求头中满足正则匹配foo=bar的请求才会被路由到新版本服务new-nginx中 new-nginx: header("foo", /^bar$/) spec: rules: - host: www.example.com http: paths: # 老版本服务 - path: / backend: serviceName: old-nginx servicePort: 80 # 新版本服务 - path: / backend: serviceName: new-nginx servicePort: 80
-
满足一定比例的请求被路由到新版本服务。说明 此处新旧版本服务权重分别为50%。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: gray-release annotations: nginx.ingress.kubernetes.io/service-weight: | # 允许50%的流量被路由到新版本服务new-nginx中 new-nginx: 50, old-nginx: 50 spec: rules: - host: www.example.com http: paths: # 老版本服务 - path: / backend: serviceName: old-nginx servicePort: 80 # 新版本服务 - path: / backend: serviceName: new-nginx servicePort: 80
-
满足foo=bar的客户端请求仅允许50%的流量被路由到新版本服务。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: gray-release annotations: nginx.ingress.kubernetes.io/service-match: | # 请求头中满足正则匹配foo=bar的请求才会被路由到新版本服务new-nginx中 new-nginx: header("foo", /^bar$/) nginx.ingress.kubernetes.io/service-weight: | # 在满足上述匹配规则的基础上仅允许50%的流量会被路由到新版本服务new-nginx中 new-nginx: 50, old-nginx: 50 spec: rules: - host: www.example.com http: paths: # 老版本服务 - path: / backend: serviceName: old-nginx servicePort: 80 # 新版本服务 - path: / backend: serviceName: new-nginx servicePort: 80
-
- 创建成功后,单击左侧导航栏中的路由。
您可看到虚拟主机名称指向old-nginx。
- 登录Master节点,执行curl命令,查看路由的访问情况。
-
满足正则匹配foo=bar的客户端请求才能访问新版本服务。
# curl -H "Host: www.example.com" -H "foo: bar" http://<EXTERNAL_IP>
-
满足一定比例的请求被路由到新版本服务。
# curl -H "Host: www.example.com" http://<EXTERNAL_IP>
-
满足foo=bar的客户端请求仅允许50%的流量被路由到新版本服务。
# curl -H "Host: www.example.com" -H "foo: bar" http://<EXTERNAL_IP>
-
在文档使用中是否遇到以下问题
更多建议
匿名提交