自定义 CLB 负载均衡器
概述
默认安装会自动创建出一个公网 CLB 来接入流量,但你也可以利用 TKE 的 Service 注解对 ingress-nginx 的 CLB 进行自定义。
本文介绍社区版 ingress-nginx 与腾讯云 CLB 负载均衡器的高级在生产环境中的高级使用方法。
注意:
本文及后续对 ingress-nginx 的优化,都将是对前文持久化独立出来的 values.yaml
文件内容进行配置。
自定义 ingressClass
可以对以下字段进行修改成自定义,以便在后续 devops Pipeline 中调用,目的是为了区分多个 Nginx Ingress Controller 实例:
controller:
ingressClass: ingress-nginx
ingressClassResource:
name: ingress-nginx
controllerValue: k8s.io/ingress-nginx
如果要部署多个 Nginx Ingress Controller 实例,只需要修改 ingress-nginx 字段,重复部署即可。
为什么要手动绑定 CLB 负载均衡器实例?
风险
由于默认安装自动创建出一个公网 CLB 来接入流量:
- 若执行
helm uninstall
命令那么这个 CLB 负载均衡实例会一并被删除释放!! - 导致 CLB 实例的 CNAME 地址/固定IP 丢失或变化,随之而来的是所有线上业务解析的异常丢失。
- 恢复不得不去创建新的负载均衡器实例,变更业务解析。解析的生效时间不可控 now ~ 48hours 将对业务造成灾难级别的影响。
规避风险
因此,生产环境必须提前创建出固定的负载均衡器:
- ingress-nginx 去绑定 CLB实例,防止误删除引起的解析变化
- CLB 负载均衡器实例 “开启删除保护”
VPC内、外网共用一个 CLB 负载均衡器实例
目的仍然是简化服务器架构,VPC内网(Privite DNS控制VPC解析)、外网(DnsPort控制公网解析)共用一个 CLB 负载均衡器实例。
以下动作可以让一个内网 CLB 负载均衡器实例 获得内外网流量的能力:
- 首先要创建出内网 CLB 负载均衡器实例,获取其实例ID
- 再绑定一条公网弹性 EIP
controller:
service:
annotations:
service.kubernetes.io/tke-existed-lbid: 'lb-xxxxxxx' # 指定 CLB 的实例 ID
service.cloud.tencent.com/direct-access: "true" # 开启 CLB 直连