You need to enable JavaScript to run this app.
导航
复用已有负载均衡实现跨集群业务部署
最近更新时间:2025.04.17 15:48:26首次发布时间:2025.01.07 16:46:53
我的收藏
有用
有用
无用
无用

跨集群部署服务能够提升业务的容灾与可靠性,实现高级别安全隔离。但如果每个集群中的 Service 都选择 LoadBalancer 类型,会因为创建多个负载均衡器实例导致资源浪费。您可以在已有负载均衡实例上同时挂载多个集群的内部端点,使用单一负载均衡实例达成跨集群部署服务的目的。

注意

背景信息

场景一:将流量转发至集群和外部端点

您可以在 CLB 实例上同时挂载集群内的 Service 和集群外的端点(例如 ECS),为部署在容器集群和 ECS 实例上的业务,提供统一的入口。
alt

场景二:将流量转发至多个集群内的 Service

您可以在已有的 CLB 实例上同时挂载多个不同集群内的 Service,为它们提供统一的入口。当多个 Service 复用同一个 CLB 实例时,需要共用相同的监听以及后端服务器组。因此,您需要手动为 CLB 实例配置监听器和后端服务器组,然后在所有 Service 中复用此后端服务器组。同时,监听使用的端口需要与 Service 相同。

alt

使用限制

  • 仅支持复用用户手工创建的 CLB 实例,不支持复用通过容器服务 LoadBalancer 类型的 Service 自动创建的 CLB。
  • 不支持在已有 Service 中,添加或者删除service.beta.kubernetes.io/volcengine-loadbalancer-server-group-id字段。

前提条件

操作步骤

在容器服务集群中,使用如下 YAML 配置,创建服务并复用已手动创建的 CLB 实例。

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******"
    # 必填,已有负载均衡实例的 ID
    service.beta.kubernetes.io/volcengine-loadbalancer-server-group-id: "rsp-22j***:80,rsp-22j***:443"
    # 必填,已有后端服务器组 ID 和端口号
    service.beta.kubernetes.io/volcengine-loadbalancer-weight: "10"
    # 必填,后端服务器组转发权重
  name: clb-service # 服务的名称
  namespace: default # 服务所属的命名空间
spec:
  externalTrafficPolicy: Cluster
  selector:
    app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定
  ports:
  - name: test # 端口映射策略命名
    port: 80 # 服务端口
    protocol: TCP  # 端口通信协议 TCP/UDP
    targetPort: 80 # 容器端口
  type: LoadBalancer # 服务的类型

Annotation 说明如下表所示。

Key类型是否必须描述默认值是否支持修改
service.beta.kubernetes.io/volcengine-loadbalancer-idString已存在的负载均衡实例 ID。

service.beta.kubernetes.io/volcengine-loadbalancer-server-group-id

String

已存在的后端服务器组 ID 和端口号。

说明

  • 后端服务器组 ID 后的端口号,为 Service spec配置中的port端口,而非target portnode port端口。
  • 不同组合使用英文逗号隔开,无数量限制。

service.beta.kubernetes.io/volcengine-loadbalancer-weight

String

后端服务器组转发权重,整数形式,取值范围为 0~100,权重越大转发的请求越多。

说明

更多后端服务器权重含义,请参见 添加后端服务器

结果验证

  1. 执行以下命令,查看已创建的服务。
kubectl get svc -n default

预期结果如下。其中,EXTERNAL-IP是与该服务对接的 CLB 公网 IP 地址。

NAME          TYPE           CLUSTER-IP        EXTERNAL-IP      PORT(S)         AGE
clb-service   LoadBalancer   172.xxx.xxx.xxx   14.xxx.xxx.xxx   80:30891/TCP    44s
  1. 执行以下命令,查看已创建服务的详细信息。
kubectl describe svc clb-service -n default

预期结果如下。其中,Annotation 中展示了 CLB 的相关信息,包括:CLB 实例 ID、后端服务器组 ID 等,与您手工创建 CLB 实例相同。

Name:                     clb-service
Namespace:                default
Labels:                   service.beta.kubernetes.io/volcengine-loadbalancer-id=clb-22j***
Annotations:              service.beta.kubernetes.io/system-volcengine-loadbalancer-last-applied-annotations:
                            {"service.beta.kubernetes.io/volcengine-loadbalancer-id":"clb-22j***","service.beta.kubernetes.io/volcengine-loadbalanc...
                          service.beta.kubernetes.io/volcengine-loadbalancer-id: clb-22j***
                          service.beta.kubernetes.io/volcengine-loadbalancer-server-group-id: rsp-22j***:80
                          service.beta.kubernetes.io/volcengine-loadbalancer-weights: 10
Selector:                 app=nginx
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       172.21.xxx.xxx
IPs:                      172.21.xxx.xxx
LoadBalancer Ingress:     14.xxx.xxx.xxx
Port:                     test  80/TCP
TargetPort:               80/TCP
NodePort:                 test  30036/TCP
Endpoints:                192.168.0.44:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age                    From                Message
  ----    ------                ----                   ----                -------
  Normal  EnsuringLoadBalancer  2m19s (x2 over 2m22s)  service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   2m18s (x2 over 2m19s)  service-controller  Ensured load balancer

登录 负载均衡控制台,查看对应的 CLB 实例和后端服务器组列表,可以查看后端服务器组中新增的后端服务器和权重。
alt

相关文档

更多负载均衡服务的 Annotation 配置方法,请参见 使用 Annotation 配置负载均衡服务