跨集群部署服务能够提升业务的容灾与可靠性,实现高级别安全隔离。但如果每个集群中的 Service 都选择 LoadBalancer 类型,会因为创建多个负载均衡器实例导致资源浪费。您可以在已有负载均衡实例上同时挂载多个集群的内部端点,使用单一负载均衡实例达成跨集群部署服务的目的。
注意
您可以在 CLB 实例上同时挂载集群内的 Service 和集群外的端点(例如 ECS),为部署在容器集群和 ECS 实例上的业务,提供统一的入口。
您可以在已有的 CLB 实例上同时挂载多个不同集群内的 Service,为它们提供统一的入口。当多个 Service 复用同一个 CLB 实例时,需要共用相同的监听以及后端服务器组。因此,您需要手动为 CLB 实例配置监听器和后端服务器组,然后在所有 Service 中复用此后端服务器组。同时,监听使用的端口需要与 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-id | String | 是 | 已存在的负载均衡实例 ID。 | 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-server-group-id | String | 是 | 已存在的后端服务器组 ID 和端口号。 说明
| 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-weight | String | 是 | 后端服务器组转发权重,整数形式,取值范围为 0~100,权重越大转发的请求越多。 说明 更多后端服务器权重含义,请参见 添加后端服务器。 | 无 | 否 |
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
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 实例和后端服务器组列表,可以查看后端服务器组中新增的后端服务器和权重。
更多负载均衡服务的 Annotation 配置方法,请参见 使用 Annotation 配置负载均衡服务。