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

ingress-nginx高级金丝雀发布

作者头像
SY小站
发布2020-06-15 15:08:30
7460
发布2020-06-15 15:08:30
举报
文章被收录于专栏:SY小站的专栏

1. 说明

在上篇文章,只简单介绍了一些ingress开源默认支持的Annotation。

  • https://shenshengkun.github.io/posts/p444cbmv.html

下面我来说下怎么实现一个header不同值。

2. 开源ingress实现

通过修改nginx.ingress.kubernetes.io/configuration-snippet配置,并且配置正则实现:

使用$http_ 获取http请求的header,根据配置中是否为完整或者正则匹配,匹配foo的值

使用$cookie_获取http请求的cookie,根据配置中是否为完整或者正则匹配,匹配foo的值

使用$arg_获取http的请求参数,根据配置中是否为完整或者正则匹配,匹配foo的值

2.1 例子

代码语言:javascript
复制
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;
      if ($http_name ~ "^.*sy$|^.*aa$") {
         proxy_pass http://tomcat-test-scm.test:6080;
         break;
       }
spec:
  rules:
  - host: test.sy.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-test-opdev
          servicePort: 6080
      - path: /
        backend:
          serviceName: tomcat-test-scm
          servicePort: 6080

2.2 效果

代码语言:javascript
复制
[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
[root@ingress]# curl -H "name: aa" http://test.sy.com/abc/check_health.jsp
scm
[root@ingress]# curl -H "name: bb" http://test.sy.com/abc/check_health.jsp  
opdev

3. 阿里开源ingress实现

路由规则nginx.ingress.kubernetes.io/service-match

该Annotation用来配置新版本服务的路由匹配规则,格式如下:

代码语言:javascript
复制
nginx.ingress.kubernetes.io/service-match: | 
    <service-name>: <match-rule>

参数解释

service-name:服务名称,满足match-rule的请求会被路由到该服务中。

match-rule:路由匹配规则。

配置示例

代码语言:javascript
复制
# 请求头中满足foo正则匹配^bar$的请求被转发到新版本服务new-nginx中
new-nginx: header("foo", /^bar$/)

# 请求头中满足foo完整匹配bar的请求被转发到新版本服务new-nginx中
new-nginx: header("foo", "bar")

# cookie中满足foo正则匹配^sticky-.+$的请求被转发到新版本服务new-nginx中
new-nginx: cookie("foo", /^sticky-.+$/)

# query param中满足foo完整匹配bar的请求被转发到新版本服务new-nginx中
new-nginx: query("foo", "bar")

服务权重nginx.ingress.kubernetes.io/service-weight

该Annotation用来配置新老版本服务的流量权重,格式如下:

参数解释

new-svc-name:新版本服务名称。

new-svc-weight:新版本服务权重。

old-svc-name:老版本服务名称。

old-svc-weight:老版本服务权重。

配置示例

代码语言:javascript
复制
nginx.ingress.kubernetes.io/service-weight: | 
    new-nginx: 20, old-nginx: 60

说明

  • 服务权重采用相对值计算方式。如配置示例中的新版服务权重设置为20,旧版服务权重设置为60,则:新版服务的权重百分比为25%,旧版服务的权重百分比为75%。
  • 一个服务组(同一个Ingress yaml中具有相同Host和Path的服务)中未明确设置权重的服务默认权重值为100。

3.1 例子

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-test
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx-backend"
    nginx.ingress.kubernetes.io/service-match: |
          tomcat-test-scm: header("name", /^sy$|^aa$/)
    #nginx.ingress.kubernetes.io/service-weight: | 
    #  tomcat-test-opdev: 80, tomcat-test-scm: 20
    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
      - path: /
        backend:
          serviceName: tomcat-test-scm
          servicePort: 6080

3.1 效果

代码语言:javascript
复制
[rsync@ingress]$ curl test.sy.com/abc/check_health.jsp                
opdev
[rsync@ingress]$ curl -H "name: sy" test.sy.com/abc/check_health.jsp
scm
[rsync@ingress]$ curl -H "name: aa" test.sy.com/abc/check_health.jsp  
scm
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 说明
  • 2. 开源ingress实现
  • 2.1 例子
  • 2.2 效果
  • 3. 阿里开源ingress实现
  • 3.1 例子
  • 3.1 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档