容器服务 多 Ingress 复用 CLB

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

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、注意事项

·多个 Ingress 复用同一个 CLB 时,推荐复用同一个 CLB 的 Ingress 数目不大于 100。

·此功能必须在创建 Ingress 时启用。对于已创建的 Ingress,暂时不支持追加开启。

·不支持复用由 TKE CLB Ingress 自动创建的 CLB。

·请注意,多个 Ingress 复用同一个 CLB 可能会创建更多的监听器或转发规则,而 CLB 存在账号和实例维度的配额限制,为避免触达上限影响 Ingress 同步,请联系负载均衡团队 提交工单 以规划合理的配额。

注意:警告:

注意:多个 Ingress 复用 CLB 时,若发生配置冲突,Ingress Controller 将中断调谐并报错,为了避免影响 Ingress 同步规则和配置,请关注 Ingress 并及时处理错误!

二、使用前提

确保集群内 Service/Ingress Controller 版本 ≥ v2.10.0 。如未满足,请 提交工单 联系 TKE 团队升级。

注意:说明:

注意:Service/Ingress Controller 版本:你可以在 TKE 集群的 kube-system 命名空间下,查看 configmap tke-service-controller-config 和 tke-ingress-controller-config 中的 VERSION 参数,以获取对应组件的版本信息。

三、使用方式

·多个 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: v1kind: Namespacemetadata: name: ns1—apiVersion: v1kind: Namespacemetadata: name: ns2—apiVersion: networking.k8s.io/v1kind: Ingressmetadata: 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: ns1spec: rules: – http: paths: – backend: service: name: nginx-service port: number: 80 path: / pathType: ImplementationSpecific—apiVersion: networking.k8s.io/v1kind: Ingressmetadata: 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: ns2spec: rules: – http: paths: – backend: service: name: nginx-service port: number: 80 path: / pathType: ImplementationSpecificapiVersion: v1kind: Namespacemetadata: name: ns1—apiVersion: v1kind: Namespacemetadata: name: ns2—apiVersion: networking.k8s.io/v1kind: Ingressmetadata: 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: ns1spec: rules: – http: paths: – backend: service: name: nginx-service port: number: 80 path: / pathType: ImplementationSpecific—apiVersion: networking.k8s.io/v1kind: Ingressmetadata: 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: ns2spec: 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.comapiVersion: v1kind: Namespacemetadata: name: ns1—apiVersion: v1kind: Namespacemetadata: name: ns2—# Ingress 1: 使用域名 app1.example.comapiVersion: networking.k8s.io/v1kind: Ingressmetadata: 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: ns1spec: 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/v1kind: Ingressmetadata: 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: ns2spec: rules: – host: app2.example.com http: paths: – backend: service: name: app2-server port: number: 80 path: / pathType: Prefix—# ns1 的 ServiceapiVersion: v1kind: Servicemetadata: name: app1-server namespace: ns1 labels: app: app1-serverspec: ports: – name: http port: 80 targetPort: 80 selector: app: app1-server type: NodePort—# ns1 的 DeploymentapiVersion: apps/v1kind: Deploymentmetadata: name: app1-server namespace: ns1spec: 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 的 ServiceapiVersion: v1kind: Servicemetadata: name: app2-server namespace: ns2 labels: app: app2-serverspec: ports: – name: http port: 80 targetPort: 80 selector: app: app2-server type: NodePort—# ns2 的 DeploymentapiVersion: apps/v1kind: Deploymentmetadata: name: app2-server namespace: ns2spec: 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-rules 和 kubernetes.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"}]'

·在 ingress-controller 版本低于 v2.12.0 时,复用 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 managed by group not support reuse clb with service\\n"}]'

赞 (0)
上一篇 4天前
下一篇 4天前