Skip to main content

自定义 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 来接入流量:

  1. 若执行 helm uninstall 命令那么这个 CLB 负载均衡实例会一并被删除释放!!
  2. 导致 CLB 实例的 CNAME 地址/固定IP 丢失或变化,随之而来的是所有线上业务解析的异常丢失。
  3. 恢复不得不去创建新的负载均衡器实例,变更业务解析。解析的生效时间不可控 now ~ 48hours 将对业务造成灾难级别的影响。
规避风险

因此,生产环境必须提前创建出固定的负载均衡器:

  1. ingress-nginx 去绑定 CLB实例,防止误删除引起的解析变化
  2. CLB 负载均衡器实例 “开启删除保护”

VPC内、外网共用一个 CLB 负载均衡器实例

目的仍然是简化服务器架构,VPC内网(Privite DNS控制VPC解析)、外网(DnsPort控制公网解析)共用一个 CLB 负载均衡器实例。

以下动作可以让一个内网 CLB 负载均衡器实例 获得内外网流量的能力:

  1. 首先要创建出内网 CLB 负载均衡器实例,获取其实例ID
  2. 再绑定一条公网弹性 EIP

controller:
service:
annotations:
service.kubernetes.io/tke-existed-lbid: 'lb-xxxxxxx' # 指定 CLB 的实例 ID
service.cloud.tencent.com/direct-access: "true" # 开启 CLB 直连

参考文档