作者:中国移动云能力中心 —— 沈宁敏
概要:ingress-nginx controller是Kubernetes实现负载均衡的一种策略,为应用层HTTP(S)提供访问能力,它是一组 基于DNS 名称或者 URL 路径把用户请求转发到指定的Service资源的规则,用于将集群外部的请求流量转发至集群内部完成服务发布。云安全中心在2021年V2.0版本开发模式为敏捷开发,版本模块化、开发周期短、应用服务更新频繁,在此条件上为了不影响现网用户稳定的使用云安全中心功能,使用ingress-nginx controller组件和k8s容器化部署,实现应用服务的灰度发布,同时作为灰度平台接入实现试点试运行。
1、 ingress-nginx支持的负载均衡策略
Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发布和测试。 Nginx Annotations 支持以下 4 种 Canary 规则:
- nginx.ingress.kubernetes.io/canary-by-header:基于 Request Header 的流量切分,适用于灰度发布以及 A/B 测试。当 Request Header 设置为 always时,请求将会被一直发送到 Canary 版本;当 Request Header 设置为 never时,请求不会被发送到 Canary 入口;对于任何其他 Header 值,将忽略 Header,并通过优先级将请求与其他金丝雀规则进行优先级的比较。
- nginx.ingress.kubernetes.io/canary-by-header-value:要匹配的 Request Header 的值,用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务。当 Request Header 设置为此值时,它将被路由到 Canary 入口。该规则允许用户自定义 Request Header 的值,必须与上一个 annotation (即:canary-by-header)一起使用。
- nginx.ingress.kubernetes.io/canary-by-header-pattern:要匹配的 Request Header 的值,用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务。当 Request Header 设置正则表达式,它将被路由到 Canary 入口。该规则允许用户自定义 Request Header 自定义表达式,必须与上一个 annotation (即:canary-by-header)一起使用。
- nginx.