多 Ingress 复用 CLB

最近更新时间:2026-01-16 11:10:21

我的收藏
腾讯云容器服务 TKE 现已支持多个 Ingress 复用同一负载均衡器。如需将多个 Ingress 的流量聚合到单一负载均衡器入口,您可以在创建 Ingress 资源时为其添加 ingress.cloud.tencent.com/enable-group: 'true' 注解,并使用 kubernetes.io/ingress.existLbId: lb-xxxxxxxx 注解指向相同的 CLB 实例。

注意事项

多个 Ingress 复用同一个 CLB 时,​不支持与 Service 共用该 CLB。
此功能必须在创建 Ingress 时启用。对于已创建的 Ingress,暂时不支持追加开启。
不支持复用由 TKE CLB Ingress 自动创建的 CLB。
请注意,多个 Ingress 复用同一个 CLB 可能会创建更多的监听器或转发规则,而 CLB 存在账号和实例维度的配额限制,为避免触达上限影响 Ingress 同步,请联系负载均衡团队 提交工单 以规划合理的配额。
警告:
多个 Ingress 复用 CLB 时,若发生配置冲突,Ingress Controller 将中断调谐并报错,为了避免影响 Ingress 同步规则和配置,请关注 Ingress 并及时处理错误!

使用前提

确保集群内 Service/Ingress Controller 版本 ≥ v2.10.0 且运行在融合版本(Ingress Controller 已融合至 Service Controller 组件)模式。如未满足,请 提交工单 联系 TKE 团队升级。
说明:
Service/Ingress Controller 版本:您可以在 TKE 集群的 kube-system 命名空间下,查看 configmap tke-service-controller-config 和 tke-ingress-controller-config 中的 VERSION 参数,以获取对应组件的版本信息。
融合版本说明:当 tke-service-controller-config 中的 EnableIngressController 参数值为 'true' 时,表示已启用融合版本模式。

使用方式

多个 Ingress 可以复用相同的监听器(端口)或域名,但必须确保每个“域名 + URL 路径”的规则组合是唯一的。
支持跨命名空间(Namespace)的多个 Ingress 复用同一个 CLB。
部分功能特性在复用场景下不受支持,相关错误将在 Ingress 事件/注解 中提示。
注意:
注解 ingress.cloud.tencent.com/enable-group: 'true' 需要在创建 Ingress 时与 kubernetes.io/ingress.existLbId: lb-xxxxxxxx 同时指定,对已有 Ingress 添加注解无法启用该功能。

前置条件

登录腾讯云 负载均衡购买页,按需选购负载均衡实例。


使用示例

示例一:跨命名空间的 Ingress,使用不同监听器
示例二:Ingress 开启手动重定向
示例三:不同 Ingress 复用相同的监听器
apiVersion: v1
kind: Namespace
metadata:
name: ns1
---
apiVersion: v1
kind: Namespace
metadata:
name: ns2
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.cloud.tencent.com/listen-ports: '[{"HTTP": 80}]'
kubernetes.io/ingress.existLbId: lb-xxxxxxxx # 请修改成自己的clb id
ingress.cloud.tencent.com/enable-group: 'true' # 必须在 ingress 创建时指定
name: nginx-ingress-1
namespace: ns1
spec:
rules:
- http:
paths:
- backend:
service:
name: nginx-service
port:
number: 80
path: /
pathType: ImplementationSpecific
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.cloud.tencent.com/listen-ports: '[{"HTTP": 81}]'
kubernetes.io/ingress.existLbId: lb-xxxxxxxx # 请修改成自己的clb id
ingress.cloud.tencent.com/enable-group: 'true'
name: nginx-ingress-2
namespace: ns2
spec:
rules:
- http:
paths:
- backend:
service:
name: nginx-service
port:
number: 80
path: /
pathType: ImplementationSpecific
apiVersion: v1
kind: Namespace
metadata:
name: ns1
---
apiVersion: v1
kind: Namespace
metadata:
name: ns2
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.cloud.tencent.com/listen-ports: '[{"HTTP": 80}]'
kubernetes.io/ingress.existLbId: lb-xxxxxxxx # 请修改成自己的clb id
ingress.cloud.tencent.com/enable-group: 'true' # 必须在新建ingress时和 kubernetes.io/ingress.existLbId 同时指定
kubernetes.io/ingress.http-rules: '[{"host":"example.com","path":"/api","backend":{"serviceName":"anyserver","servicePort":"80"}},{"host":"example.com","path":"/tmp","rewrite":{"port":80,"host":"example.com","path":"/api"}}]'
kubernetes.io/ingress.https-rules: "null"
kubernetes.io/ingress.rule-mix: "true"
name: nginx-ingress-1
namespace: ns1
spec:
rules:
- http:
paths:
- backend:
service:
name: nginx-service
port:
number: 80
path: /
pathType: ImplementationSpecific
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.cloud.tencent.com/listen-ports: '[{"HTTP": 80}]'
kubernetes.io/ingress.existLbId: lb-xxxxxxxx # 请修改成自己的clb id
ingress.cloud.tencent.com/enable-group: 'true'
name: nginx-ingress-2
namespace: ns2
spec:
rules:
- http:
paths:
- backend:
service:
name: nginx-service
port:
number: 80
path: /home
pathType: ImplementationSpecific

# 示例:不同 Ingress 复用相同 CLB 监听器,各自使用不同域名
# 说明:
# - 两个 Ingress 位于不同命名空间(ns1 和 ns2)
# - 复用相同的 CLB(通过 kubernetes.io/ingress.existLbId 指定)
# - 复用相同的监听器端口(80 和 8080)
# - 各自使用不同的域名进行路由
# - ns1 的 Ingress 使用域名: app1.example.com
# - ns2 的 Ingress 使用域名: app2.example.com

apiVersion: v1
kind: Namespace
metadata:
name: ns1
---
apiVersion: v1
kind: Namespace
metadata:
name: ns2
---
# Ingress 1: 使用域名 app1.example.com
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.cloud.tencent.com/listen-ports: '[{"HTTP": 80}]'
ingress.cloud.tencent.com/enable-group: 'true'
kubernetes.io/ingress.existLbId: lb-xxxxxxxx # 这里需要填写你自己的lbid
name: app1-ingress
namespace: ns1
spec:
rules:
- host: app1.example.com
http:
paths:
- backend:
service:
name: app1-server
port:
number: 80
path: /
pathType: Prefix
---
# Ingress 2: 使用域名 app2.example.com(复用相同的 CLB 和监听器)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.cloud.tencent.com/listen-ports: '[{"HTTP": 80}]'
ingress.cloud.tencent.com/enable-group: 'true'
kubernetes.io/ingress.existLbId: lb-xxxxxxxx # 这里需要填写你自己的lbid(与上面相同)
name: app2-ingress
namespace: ns2
spec:
rules:
- host: app2.example.com
http:
paths:
- backend:
service:
name: app2-server
port:
number: 80
path: /
pathType: Prefix
---
# ns1 的 Service
apiVersion: v1
kind: Service
metadata:
name: app1-server
namespace: ns1
labels:
app: app1-server
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: app1-server
type: NodePort
---
# ns1 的 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1-server
namespace: ns1
spec:
replicas: 1
selector:
matchLabels:
app: app1-server
template:
metadata:
labels:
app: app1-server
spec:
containers:
- image: ccr.ccs.tencentyun.com/paas/anyserver
name: anyserver
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
---
# ns2 的 Service
apiVersion: v1
kind: Service
metadata:
name: app2-server
namespace: ns2
labels:
app: app2-server
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: app2-server
type: NodePort
---
# ns2 的 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app2-server
namespace: ns2
spec:
replicas: 1
selector:
matchLabels:
app: app2-server
template:
metadata:
labels:
app: app2-server
spec:
containers:
- image: ccr.ccs.tencentyun.com/paas/anyserver
name: anyserver
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name

支持进度

注解
解释
是否支持(复用场景下)
ingress.cloud.tencent.com/listen-ports
自定义监听端口
支持
ingress.cloud.tencent.com/direct-access
开启 CLB 直通 Pod
支持
ingress.cloud.tencent.com/auto-rewrite
使用自动重定向
支持
kubernetes.io/ingress.rule-mix
开启混合(http/https)协议
支持
kubernetes.io/ingress.http-rules
http 协议
支持
kubernetes.io/ingress.https-rules
https 协议
支持
ingress.cloud.tencent.com/enable-grace-deletion
Pod 优雅删除
支持
ingress.cloud.tencent.com/lb-rs-weight
自定义后端 RS 权重
支持
ingress.cloud.tencent.com/tke-service-config
使用手动拓展配置
支持
ingress.cloud.tencent.com/pass-to-target
默认放通
支持
ingress.cloud.tencent.com/tke-service-config-auto
使用自动生成拓展配置
不支持
ingress.cloud.tencent.com/rewrite-support
使用手动重定向
废弃

功能变更说明

部分注解在多个 Ingress 复用 CLB 场景下的使用方式和语义有所调整。

手动重定向

注解:ingress.cloud.tencent.com/rewrite-support
状态:在多个 Ingress 复用 CLB 场景下废弃。
说明:该注解已废弃,为 Ingress 变更手动重定向规则只需在 kubernetes.io/ingress.http-ruleskubernetes.io/ingress.https-rules 中配置,无需添加此注解。

自动重定向

注解ingress.cloud.tencent.com/auto-rewrite
改动:在多个 Ingress 复用 CLB 场景下调整注解删除的语义。
说明:在多个 Ingress 复用 CLB 的场景下,删除该注解与将其值设为 false 均表示关闭自动重定向。

常见问题

存量使用已有 CLB 的 Ingress 迁移问题

不支持通过为存量的 Ingress 添加注解 ingress.cloud.tencent.com/enable-group: 'true' 以迁移到复用场景。

规则/配置冲突问题

控制器正常调谐时,Ingress 注解示例如下:
ingress.cloud.tencent.com/status.conditions: '[{"type":"Ready","status":"True","lastTransitionTime":"2025-10-07T11:30:53Z","reason":"Success","message":""}]'
若复用同一 CLB 的 Ingress 出现调谐异常,错误信息将暴露于注解中,例如:
ingress.cloud.tencent.com/status.conditions: '[{"type":"Ready","status":"False","lastTransitionTime":"2025-10-07T11:35:10Z","reason":"ListenerError","message":"Sync
ClientError\\nErrorCode: E4403\\nDetails: Group: lb-fgim8ppi. The loadbalancer
has port conflict in the listeners 80_HTTP.\\nOriginError: ingress ns1/server2
listener 80_HTTP domain example.com's path / conflict: already owned by ns1/server1\\n"}]'

场景支持问题

复用 CLB 的 Ingress 不支持与使用已有 CLB 的 Ingress(未指定ingress.cloud.tencent.com/enable-group: 'true'注解) 共用同一 CLB,报错示例如下:
ingress.cloud.tencent.com/status.conditions: '[{"type":"Ready","status":"False","lastTransitionTime":"2025-10-09T12:29:05Z","reason":"LoadbalancerError","message":"Sync
ClientError\\nErrorCode: E4406\\nDetails: Group: lb-fgim8ppi. Can not use lb:
ns1/server1 used by another ingress/multiClusterIngress .\\nOriginError:
group can't reuse clb with ingress which has existLbId, please process\\n"}]'
复用 CLB 的 Ingress 暂不支持与 Service 共用同一 CLB,报错示例如下:
ingress.cloud.tencent.com/status.conditions: '[{"type":"Ready","status":"False","lastTransitionTime":"2025-10-09T12:40:01Z","reason":"LoadbalancerError","message":"Sync
ClientError\\nErrorCode: E4407\\nDetails: Group: lb-fgim8ppi. Can not use lb:
lb-fgim8ppi used by another service ns1/svc1.\\nOriginError: ingress managered by group not support reuse clb with service\\n"}]'