ingress-nginx controller负载组件安装及调试,试点云安全中心产品k8s服务灰度发布

本文介绍了如何使用ingress-nginx controller在Kubernetes环境中实现负载均衡和灰度发布。通过配置HTTP请求头参数,实现基于Header的流量切分策略,确保云安全中心在版本更新时能进行平滑过渡,不影响用户稳定使用。文章详细讲述了从版本选择、配置调整到服务验证的整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:中国移动云能力中心  ——  沈宁敏

概要: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 规则:

  1. nginx.ingress.kubernetes.io/canary-by-header:基于 Request Header 的流量切分,适用于灰度发布以及 A/B 测试。当 Request Header 设置为 always时,请求将会被一直发送到 Canary 版本;当 Request Header 设置为 never时,请求不会被发送到 Canary 入口;对于任何其他 Header 值,将忽略 Header,并通过优先级将请求与其他金丝雀规则进行优先级的比较。
  2. nginx.ingress.kubernetes.io/canary-by-header-value:要匹配的 Request Header 的值,用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务。当 Request Header 设置为此值时,它将被路由到 Canary 入口。该规则允许用户自定义 Request Header 的值,必须与上一个 annotation (即:canary-by-header)一起使用。
  3. nginx.ingress.kubernetes.io/canary-by-header-pattern:要匹配的 Request Header 的值,用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务。当 Request Header 设置正则表达式,它将被路由到 Canary 入口。该规则允许用户自定义 Request Header 自定义表达式,必须与上一个 annotation (即:canary-by-header)一起使用。
  4. ng
### Kubernetes 中基于服务 IP 实现灰度发布的方案 在 Kubernetes 中,可以利用 `Service` 资源的特性来实现基于服务 IP 的灰度发布。具体来说,通过配置多个副本集(ReplicaSet),并为不同的版本指定独立的服务资源,从而达到流量按需分发的效果。 #### 使用 Service 和 Endpoint 进行精确控制 为了实现这一目标,通常会创建两个或更多个具有相同标签选择器但不同名称的服务实例。这些服务分别指向各自的应用程序版本,并暴露特定端口供外部访问。当需要执行灰度更新时,只需调整客户端请求的目标地址即可逐步迁移用户至新版本上[^1]。 对于更细粒度的管理需求,则可通过自定义 Endpoints 对象手动维护后端 Pod 列表;这种方式允许管理员绕过默认调度机制而直接指定哪些 Pods 应该接收来自某个 Service 的连接请求[^3]。 下面给出一段 YAML 配置文件片段用于说明如何设置此类架构: ```yaml apiVersion: v1 kind: Service metadata: name: app-service-old-version spec: selector: app: myapp version: "old" ports: - protocol: TCP port: 80 targetPort: 9376 --- apiVersion: v1 kind: Service metadata: name: app-service-new-version spec: selector: app: myapp version: "new" ports: - protocol: TCP port: 80 targetPort: 9376 ``` 上述例子展示了如何针对应用程序的不同版本建立单独的服务入口点。接下来就可以依据业务逻辑编写相应的负载均衡策略或是借助第三方组件NGINX Ingress Controller 来完成实际的流量切分操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值