前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ingress-nginx金丝雀发布

ingress-nginx金丝雀发布

作者头像
SY小站
发布2020-06-15 15:10:19
4200
发布2020-06-15 15:10:19
举报

1. 说明

下面使用的 ingress-nginx 的版本是 0.26.1。

nginx-ingress作为K8S集群对外的流量入口,充当K8S集群内各个service的反向代理。日常工作中我们经常需要对服务进行版本更新升级,为此我们经常使用到的发布方式有滚动升级、分批暂停发布、蓝绿发布以及灰度发布等不同的发布操作。所以下面介绍下,通过配置nginx annotations来实现灰度发布。

2. ingress-nginx金丝雀

2.1 原有ingress不需要改变

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-test
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx-backend"
    nginx.ingress.kubernetes.io/enable-access-log: "true"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      access_log /var/log/nginx/test.sy.com.log;
spec:
  rules:
  - host: test.sy.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-test-opdev
          servicePort: 6080

2.2 创建canary

nginx.ingress.kubernetes.io/canary

"true" or "false"

nginx.ingress.kubernetes.io/canary-by-header

string

nginx.ingress.kubernetes.io/canary-by-header-value

string

nginx.ingress.kubernetes.io/canary-by-header-pattern

string

nginx.ingress.kubernetes.io/canary-by-cookie

string

nginx.ingress.kubernetes.io/canary-weight

number

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-test-canary
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx-backend"
    nginx.ingress.kubernetes.io/canary: "true"
    #nginx.ingress.kubernetes.io/canary-weight: "100"
    nginx.ingress.kubernetes.io/canary-by-header: "name"
    nginx.ingress.kubernetes.io/canary-by-header-value: "sy"
    nginx.ingress.kubernetes.io/enable-access-log: "true"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      access_log /var/log/nginx/test.sy.com.log;
spec:
  rules:
  - host: test.sy.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-test-scm
          servicePort: 6080

2.3 效果

[root@ingress]# curl http://test.sy.com/abc/check_health.jsp
opdev
[root@ingress]# curl -H "name: sy" http://test.sy.com/abc/check_health.jsp
scm

上面的规则按优先顺序进行评估。优先顺序如下:canary-by-header -> canary-by-cookie -> canary-weight

注意:

当将入口标记为canary时,除了nginx.ingress.kubernetes.io/load-balance和之外,所有其他非canary注释都将被忽略(从相应的主入口继承)nginx.ingress.kubernetes.io/upstream-hash-by

已知的限制 目前,每个Ingress规则最多可以应用一个canary入口。

参考链接

  • https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SY技术小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 说明
  • 2. ingress-nginx金丝雀
  • 2.1 原有ingress不需要改变
  • 2.2 创建canary
  • 2.3 效果
  • 参考链接
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档