k8s 集群中使用多个 Ingress 控制器

背景

TKE 服务在集群内默认启用了基于腾讯云负载均衡器实现的 Ingress,支持 HTTP、HTTPS,同时也支持在集群内自建其他 Ingress 控制器,可以根据业务需要选择不同的 Ingress 类型,比如常用的 Nginx Ingress 控制器。

安装方式

方式一:通过 TKE 产品化的 Nginx ingress 组件安装,详情参考:TKE Nginx Ingress

方式二:通过 TKE 控制台 【应用市场】 安装 Nginx Ingress ,应用市场安装说明参考:TKE 应用市场

方式三:通过官网文档使用 helm 安装 Nginx Ingress,详情参考:Helm 安装 Nginx Ingress

使用配置

下面将分别介绍在 TKE 中常用的两种 Ingress 类型的使用和多个 Ingress 控制器如何共同使用。

基于腾讯云 CLB 的 Ingress

TKE 默认提供基于腾讯云 CLB 的 Ingress 功能,用户可以直接在控制台【服务与路由】的 【Ingress】中根据需要暴露七层服务,也可以通过应用 Ingress YAML 资源来创建配置,基于 CLB 的 Ingress 控制器管理逻辑如下:

  • 当 Ingress 资源没有描述注解kubernetes.io/ingress.class时,TKE Ingress Controller会管理当前 Ingress 资源。
  • 当 Ingress 资源有注解 kubernetes.io/ingress.class且值为qcloud时,TKE Ingress Controller 会管理当前 Ingress 资源。

详细配置参考:TKE Ingress Controller 使用方法

Nginx Ingress

Nginx Ingress 控制器启动时通过指定--ingress-class=<INGRESS_CONTROLLER_NAME>

参数来声明自己监听的 Ingress 配置类范围,其缺省为nginx ,Nginx Ingress 控制器指定类名示例如下:

 1...
 2spec:
 3  template:
 4     spec:
 5       containers:
 6         - name: nginx-ingress-internal-controller
 7           args:
 8             - /nginx-ingress-controller
 9             - '--ingress-class=<INGRESS_CONTROLLER_NAME>'
10...

当有 Ingress 资源配置中具有注解 kubernetes.io/ingress.class: "<INGRESS_CONTROLLER_NAME>"时将被该控制器监听使用,其 Ingress 资源配置示例如下:

1...
2metadata:
3  name: foo
4  annotations:
5    kubernetes.io/ingress.class: "<INGRESS_CONTROLLER_NAME>"
6...

多个 Ingress 控制器共同使用

根据上述使用配置说明,建议所有 Ingress 资源都配置注解来区分不同的 Ingress 控制器作用范围,当要使用基于 CLB 的 Ingress 时,配置注解 kubernetes.io/ingress.class:"qcloud",当要使用 Nginx ingress 控制器时配置注解 kubernetes.io/ingress.class:"<INGRESS_CONTROLLER_NAME>"(不要和基于CLB Ingress 冲突) 即可。

相关系列文章