You need to enable JavaScript to run this app.
导航
通过 kubectl 创建负载均衡服务
最近更新时间:2024.10.14 14:35:03首次发布时间:2023.12.18 16:28:36

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

注意

配置负载均衡服务前,请务必仔细阅读 负载均衡服务使用注意事项

前提条件

操作步骤

  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 在 IPv4 集群中创建负载均衡服务时,系统会基于默认参数自动创建对应的 CLB 实例。如果您需要自定义 CLB 的配置,建议使用 Annotation 创建 CLB。详情请参见 使用 Annotation 配置负载均衡服务
    • 双栈集群不支持 PUBLIC 类型的 CLB 实例。因此,在双栈集群中使用 YAML 创建负载均衡服务时,需要在配置中增加 Annotation service.beta.kubernetes.io/volcengine-loadbalancer-address-type: "PRIVATE",指定 CLB 的类型为 PRIVATE。
  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