说明
在上篇文章,只简单介绍了一些ingress开源默认支持的Annotation。
下面我来说下怎么实现一个header不同值。
开源ingress实现
通过修改nginx.ingress.kubernetes.io/configuration-snippet配置,并且配置正则实现:
使用$http_ 获取http请求的header,根据配置中是否为完整或者正则匹配,匹配foo的值
使用$cookie_获取http请求的cookie,根据配置中是否为完整或者正则匹配,匹配foo的值
使用$arg_获取http的请求参数,根据配置中是否为完整或者正则匹配,匹配foo的值
例子
1 | apiVersion: extensions/v1beta1 |
效果
1 | [root@ingress]# curl http://test.sy.com/abc/check_health.jsp |
可以看到header为name值为sy或者aa的可以转发到灰度版本。
阿里开源ingress实现
路由规则nginx.ingress.kubernetes.io/service-match
该Annotation用来配置新版本服务的路由匹配规则,格式如下:
1 | nginx.ingress.kubernetes.io/service-match: | |
参数解释
service-name:服务名称,满足match-rule的请求会被路由到该服务中。
match-rule:路由匹配规则。
配置示例
1 | # 请求头中满足foo正则匹配^bar$的请求被转发到新版本服务new-nginx中 |
服务权重nginx.ingress.kubernetes.io/service-weight
该Annotation用来配置新老版本服务的流量权重,格式如下:
1 | nginx.ingress.kubernetes.io/service-weight: | |
参数解释
new-svc-name:新版本服务名称。
new-svc-weight:新版本服务权重。
old-svc-name:老版本服务名称。
old-svc-weight:老版本服务权重。
配置示例
1 | nginx.ingress.kubernetes.io/service-weight: | |
说明
- 服务权重采用相对值计算方式。如配置示例中的新版服务权重设置为20,旧版服务权重设置为60,则:新版服务的权重百分比为25%,旧版服务的权重百分比为75%。
- 一个服务组(同一个Ingress yaml中具有相同Host和Path的服务)中未明确设置权重的服务默认权重值为100。
例子
1 | apiVersion: extensions/v1beta1 |
效果
1 | [rsync@ingress]$ curl test.sy.com/abc/check_health.jsp |