全部產品
Search
文件中心

Container Compute Service:通過使用自動建立負載平衡的服務公開應用

更新時間:Sep 17, 2025

當沒有可用的負載平衡時,cloud-controller-manager(CCM)組件自動為LoadBalancer類型的服務建立並管理負載平衡,該執行個體類型包含:傳統型負載平衡CLB(Classic Load Balancer)和網路型負載平衡NLB(Network Load Balancer)。本文以Nginx應用為例,介紹如何通過使用自動建立負載平衡的服務來公開應用。

注意事項

  • CCM只為Type=LoadBalancer類型的Service配置負載平衡,對於非LoadBalancer類型的Service則不會為其配置負載平衡。

  • 重要

    Type=LoadBalancer的Service變更為Type!=LoadBalancer時,CCM會刪除為該負載平衡添加的配置,從而造成無法通過該負載平衡訪問Service。

  • CCM使用聲明式API,會在一定條件下自動根據服務的配置重新整理負載平衡配置。自行在負載平衡控制台上修改的配置均存在被覆蓋的風險。

    重要

    請勿在負載平衡控制台上手動修改Kubernetes建立並維護的負載平衡的任何配置,否則有配置丟失的風險,造成服務不可訪問。

  • 已建立的LoadBalancer類型Service不支援重新指定負載平衡。如需更換負載平衡,請重新建立Service。

配額限制

  • CCM會為Type=LoadBalancer類型的Service建立負載平衡。預設情況下一個使用者可以保留60個執行個體。如果需要建立的數量大於60,請到配額平台提交申請

  • CCM會根據Service中定義的連接埠建立監聽。預設情況下一個執行個體可以添加50個監聽,如需添加更多監聽,請到配額平台提交申請

  • 更多負載平衡使用限制請參見使用限制

    負載平衡配額查詢請參見負載平衡配額管理

步驟一:部署樣本應用

以下應用部署通過kubectl命令列方式進行。

  1. 使用以下樣本應用的YAML內容,建立名為my-nginx.yaml檔案。

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx    # 樣本應用的名稱。
      labels:
        app: nginx
    spec:
      replicas: 3       # 設定副本數量。
      selector:
        matchLabels:
          app: nginx     # 對應服務中Selector的值需要與其一致,才可以通過服務公開此應用。
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest     # 替換為實際的鏡像地址,格式為:<image_name:tags>。
            ports:
            - containerPort: 80                                # 需要在服務中暴露該連接埠。
  2. 部署樣本應用my-nginx。

    kubectl apply -f my-nginx.yaml
  3. 確認樣本應用狀態正常。

    kubectl get deployment my-nginx

    返回結果樣本:

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    my-nginx   3/3     3            3           50s

步驟二:通過使用自動建立負載平衡的服務公開應用

可通過控制台和kubectl兩種方式來建立LoadBalancer類型的服務,並通過其公開應用。

控制台操作指導

  1. 登入容器計算服務控制台,在左側導覽列選擇叢集列表

  2. 集群列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 服務

  3. 服務頁面,單擊左上方的建立

  4. 建立服務對話方塊中,設定服務的相關參數。

  5. 配置項

    描述

    樣本

    服務名稱

    輸入Service(服務)的名稱。

    my-nginx-svc

    服務類型

    選擇Service類型,Service網路支援以下模式,分別對接不同來源和類型的用戶端的訪問,包括:

    虛擬叢集IP(ClusterIP)

    主要服務於叢集內部通訊,僅當服務類型設定為虛擬ClusterIP時,才支援服務執行個體之間的發現。通過使用無頭服務Headless Service,您可以與其他服務發現機制互動,而不必依賴Kubernetes預設提供的基於ClusterIP的服務發現和負載平衡。

    負載平衡(LoadBalancer)

    通過整合阿里雲傳統型負載平衡CLB(Classic Load Balancer)及網路型負載平衡NLB(Network Load Balancer),可以將叢集內部應用對外暴露。相比於NodePort方式,能夠顯著提升應用的可用性和效能。

    1. 選擇負載平衡的服務類型。

    2. 負載平衡類型選擇傳統型負載平衡 CLB,選擇資源為建立資源

    3. 按需調整建立 CLB 資源下拉框中的配置項,選擇計費方式按規格計費(PayBySpec)

    外部流量策略

    服務類型為節點連接埠負載平衡時,才能設定外部流量策略

    • Local:流量只發給本節點的Pod。

    • Cluster:流量可以轉寄到叢集中其他節點上的Pod。

    Local

    服務關聯

    選擇服務要綁定的後端應用。若不進行關聯部署,則不會建立相關的Endpoints對象。關於服務關聯的詳細介紹,請參見services-without-selectors

    名稱:app

    值:nginx

    連接埠映射

    添加服務連接埠(對應Service YAML檔案中的port)和容器連接埠(對應Service YAML檔案中的targetPort),容器連接埠需要與後端的Pod中暴露的容器連接埠一致。

    80

    註解

    為該服務添加一個註解(Annotation),配置負載平衡的參數。更多參數,請參見通過Annotation配置傳統型負載平衡CLB

    重要

    請勿複用叢集的API Server的Server Load Balancer執行個體,否則將導致叢集訪問異常

    本樣本中,將該服務的收費方式設定為按頻寬收費,頻寬峰值設定為2 Mbit/s,從而控制服務的流量。如下所示:

    • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidth

    • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2

    標籤

    為該服務添加一個標籤,標識該服務。

kubectl操作指導

  1. 使用以下樣本服務的YAML內容,建立名為my-nginx-svc.yaml的檔案。

    確保Service的selector欄位值(本樣本為app: nginx)與後端應用Deployment中matchLabels的欄位值一致,從而將該服務關聯至後端應用。

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: my-nginx-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
  2. 執行以下命令,建立名為my-nginx-svc的服務,並通過其公開應用。

    kubectl apply -f my-nginx-svc.yaml
  3. 執行以下命令,確認LoadBalancer類型的服務已成功建立。

    kubectl get svc my-nginx-svc

    預期輸出:

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
    my-nginx-svc   LoadBalancer   172.21.5.82   39.106.XX.XX     80/TCP   5m
  4. 執行以下命令,訪問樣本應用。

    curl <YOUR-External-IP> # 請將<YOUR-External-IP>替換為上面擷取到的EXTERNAL-IP地址。

    預期輸出:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>