You need to enable JavaScript to run this app.
导航

通过 kubectl 创建负载均衡服务

最近更新时间2023.12.18 16:28:36

首次发布时间2023.12.18 16:28:36

容器服务支持创建负载均衡模式(LoadBalancer)的服务。本文为您介绍如何通过 YAML 创建负载均衡服务。

使用限制

  • 若需要将 LoadBalancer 类型 Service 修改为其他类型,建议通过 编辑 Yaml 方式进行操作,通过控制台更新配置会导致 CLB 资源残留。
  • 请勿擅自在服务端更改通过创建 LoadBalancer 类型 Service 维护的 CLB 实例,或其监听器和后端服务器组,否则将造成 CLB 服务异常,须自行承担责任。
  • 请勿修改监听器和后端服务器组的名称中带有k8s_前缀的内容。
  • 若直接在服务端修改 LoadBalancer 类型的 Service 指定或维护的资源配置,可能存在配置被覆盖的风险。
  • VPC-CNI 网络模型场景下,支持直通 Pod 模式,把 Pod 对应的辅助网卡 ENI 直接关联到 CLB 的后端。

    说明

    直通 Pod 模式场景,负载均衡器允许的后端服务器数有限,需自行规划和保证。详细限制,请参见 CLB 约束限制

前提条件

操作步骤

  1. 创建工作负载的 YAML 文件。示例文件service-demo.yaml代码如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: service-demo # 服务的名称
    spec:
      selector:
        app: nginx # 通过标签选择器将服务与后段容器组(Pod)绑定
      ipFamilyPolicy: PreferDualStack  # 通信协议类型。SingleStack 表示单栈,PreferDualStack 表示双栈
      ipFamilies: # 具体使用的通信协议。单栈场景支持 IPv4;双栈场景支持 IPv4&IPv6、IPv6&IPv4
      - IPv6
      - IPv4
      ports:
      - name: rule # 端口映射规则名称
        protocol: TCP  # 服务协议,支持 TCP 或 UDP
        port: 80 # 服务端口
        targetPort: 80 # 容器端口,即工作负载对外提供服务的端口号或端口名称,例如:Nginx 开放的默认端口号为 80
      type: LoadBalancer # 服务的类型,包括:Nodeport、ClusterIP 和 LoadBalancer
    

    说明

    使用上述 YAML 创建负载均衡服务时,系统会基于默认参数自动创建对应的 CLB 实例。如果您需要自定义 CLB 的配置,建议使用 Annotation 创建 CLB,详情请参见 使用 Annotation 配置负载均衡服务

  2. 执行以下命令,创建服务。
    kubectl apply -f service-demo.yaml
    

结果验证

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

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

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

预期结果如下。其中,Annotation 中展示了 CLB 的相关信息,包括:CLB 实例 ID、子网 ID、EIP 计费类型等。您可以在 均衡负载 控制台中,使用 CLB 实例 ID 查找对应的 CLB 实例。

说明

负载均衡服务 Annotation 的详细解释,请参考 使用 Annotation 配置负载均衡服务

Name:                     service-demo
Namespace:                default
Labels:                   service.beta.kubernetes.io/volcengine-loadbalancer-id=clb-3qe5tw***
Annotations:              service.beta.kubernetes.io/system-volcengine-loadbalancer-create-response-id: clb-3qe5twv8***
                          service.beta.kubernetes.io/volcengine-loadbalancer-address-type: PUBLIC
                          service.beta.kubernetes.io/volcengine-loadbalancer-bandwidth: 1
                          service.beta.kubernetes.io/volcengine-loadbalancer-eip-billing-type: 3
                          service.beta.kubernetes.io/volcengine-loadbalancer-health-check-flag: off
                          service.beta.kubernetes.io/volcengine-loadbalancer-isp-type: BGP
                          service.beta.kubernetes.io/volcengine-loadbalancer-name: k8s-7f328f46***
                          service.beta.kubernetes.io/volcengine-loadbalancer-pass-through: false
                          service.beta.kubernetes.io/volcengine-loadbalancer-scheduler: wrr
                          service.beta.kubernetes.io/volcengine-loadbalancer-spec: small_1
                          service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id: subnet-3qe2d3p***
Selector:                 app=nginx
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.xxx.xxx.xxx
IPs:                      10.xxx.xxx.xxx
LoadBalancer Ingress:     180.xxx.xxx.xxx
Port:                     rule  80/TCP
TargetPort:               80/TCP
NodePort:                 rule  30429/TCP
Endpoints:                192.168.112.4:80,192.168.128.9:80,192.168.48.3:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type     Reason                    Age                From                Message
  ----     ------                    ----               ----                -------
  Normal   EnsuringLoadBalancer      71s (x4 over 83s)  service-controller  Ensuring load balancer
  Normal   EnsuredLoadBalancer       70s (x2 over 71s)  service-controller  Ensured load balancer