全部產品
Search
文件中心

Container Service for Kubernetes:在ACK託管叢集(智能託管模式)中部署工作負載並實現負載平衡

更新時間:Dec 28, 2025

本文介紹如何在ACK託管叢集(智能託管模式)中部署一個工作負載,並通過ALB Ingress實現公網訪問。完成後,您可以通過設定的網域名稱訪問該應用,實現外部流量的高效管理和負載平衡。

本文將指引完成以下操作。

  1. 為樣本應用建立一個命名空間。

  2. 部署一個Nginx樣本應用,並建立Service以將應用暴露到叢集網路。

  3. 建立ALB Ingress,以通過ALB實現應用的公網訪問。需要手動建立AlbConfig用於管理ALB執行個體,建立IngressClass以關聯AlbConfig。

  4. 驗證部署是否成功,並通過瀏覽器訪問應用。後續資源如無需使用,可釋放。

操作完成後,可實現如下內容。

  • 運行一個2副本的Nginx樣本應用。

  • 通過 ALB Ingress 和 Service 為應用提供穩定的公網入口。

  • 基於智能託管模式,ACK 將自動根據應用負載動態擴縮容,並接管節點的生命週期管理,以減少營運負擔。

前提條件

步驟一:建立命名空間

您可以為本實踐建立一個命名空間,以便實現資源隔離。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇命名空間與配額

  3. 單擊建立,在彈出的對話方塊自訂命名空間名稱(本文以my-nginx-namespace為例),按照頁面指引配置其他資訊,然後單擊確定

步驟二:部署Nginx應用並建立Service

本小節將部署一個名為my-nginx的Nginx樣本Deployment,以及一個名為my-nginx-svc的Service來公開該應用。

  • Deployment:副本數為2,鏡像使用Nginx樣本應用,暴露80連接埠以接收 HTTP 網路流量。

  • Service:Service類型為ClusterIP,將Service 的連接埠 80 映射到 Pod 容器的連接埠 80,並通過Label Selector來匹配Pod。

本小節僅提供樣本流程。如需詳細瞭解工作負載和Service的建立流程,請參見建立工作負載Service管理
  1. 參見以下代碼建立一個名為my-nginx.yaml的檔案,用於在命名空間中部署Deployment和Service。

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: my-nginx    # 樣本應用的名稱。
      namespace: my-nginx-namespace  # 替換為此前建立的命名空間名稱。
      labels:
        app: nginx
    spec:
      replicas: 2       # 設定副本數量。
      selector:
        matchLabels:
          app: nginx     # 對應服務中Selector的值需要與其一致,才可以通過服務公開此應用。
      template:
        metadata:
          labels:
            app: nginx
        spec:
        #  nodeSelector:
        #    env: test-team
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80         # 需要在服務中暴露該連接埠。
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: my-nginx-svc
      namespace: my-nginx-namespace  # 替換為此前建立的命名空間名稱。
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: ClusterIP   # 若為Flannel,則需使用Nodeport。
  2. 部署Deployment和Service。

    kubectl apply -f my-nginx.yaml
  3. 查看Deployment和Service的狀態。

    • 查看Deployment的狀態。

      kubectl get deployment my-nginx -n my-nginx-namespace

      預期輸出:

      NAME       READY   UP-TO-DATE   AVAILABLE   AGE
      my-nginx   2/2     2            2           4m36s
    • 查看Service的狀態:

      kubectl get svc my-nginx-svc -n my-nginx-namespace

      預期輸出:

      NAME           TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
      my-nginx-svc   ClusterIP   192.XX.XX.164   <none>        80/TCP    42s

步驟三:建立ALB Ingress及其關聯資源

通過ALB Ingress管理訪問叢集應用的外部流量時,您需要準備以下資源。

建立ALB Ingress之前,建議您通過ALB Ingress管理瞭解其原理和要求。
  • ALB Ingress Controller:負責管理Ingress資源的組件。叢集開啟智能託管模式後,ALB Ingress Controller 已為預設安裝。

  • AlbConfig:由ALB Ingress Controller建立的一種CRD,聲明ALB執行個體的配置。一個AlbConfig對應一個ALB執行個體。ALB執行個體是使用者請求流量的入口,負責將使用者請求轉寄到後端Service中。

  • IngressClass:建立ALB Ingress時可以通過指定該IngressClass來引用相應的AlbConfig配置,從而實現特定的應用路由配置和負載平衡策略。

建立AlbConfig

  1. 建立並拷貝以下內容到alb.yaml檔案中,用於建立AlbConfig。

    • 該AlbConfig指定addressTypeInternet,即ALB執行個體會擁有公網IP地址,DNS網域名稱可被解析到公網IP,可在公網環境下訪問。

    • 請填寫vSwitchId為兩個不同可用性區域的虛擬交換器ID。交換器需與叢集處於同一VPC,且為ALB支援的可用性區域

      您可以在專用網路管理主控台虛擬交換器頁面擷取交換器ID。如需建立交換器,請參見建立和管理交換器
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        name: alb
        addressType: Internet  # 負載平衡的地址類型,Internet類型可在公網環境下訪問。
        zoneMappings:               
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****  # 替換為您的虛擬交換器的ID。
        - vSwitchId: vsw-uf6nun9tql5t8nh15****  # 替換為您的虛擬交換器的ID。
      listeners:
        - port: 80
          protocol: HTTP
  2. 建立AlbConfig。

    kubectl apply -f alb.yaml
  3. 查看AlbConfig資源。

    kubectl get AlbConfig alb

    預期輸出:

    NAME   ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID   AGE
    alb    alb-******   alb-******.<regionID>.alb.aliyuncs.com                            60s
    說明

    建立HTTPS監聽並為其配置認證後,PORT&PROTOCOLCERTID中才會顯示內容,內容為空白是正常現象。

建立IngressClass

  1. 使用以下代碼建立一個名為ingress_class.yaml檔案,用於建立IngressClass。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb # IngressClass關聯的AlbConfig的名稱
  2. 建立IngressClass。

    kubectl apply -f ingress_class.yaml

建立ALB Ingress

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

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

  3. 路由頁面,切換命名空間為此前建立的命名空間,然後單擊建立Ingress,在建立Ingress對話方塊配置路由,按照頁面提示完成Ingress的建立。

    下表僅介紹核心配置項。詳細配置項說明和相關操作(例如佈建網域名解析),請參見建立ALB Ingress

    配置項

    說明

    網關類型

    選擇類型為ALB Ingress

    名稱

    自訂路由名稱,例如my-albingress。

    Ingress Class

    選擇此前建立的Ingress Class,以引用相應的AlbConfig配置。

    規則

    • 服務名稱:選擇目標服務,即此前建立的Service。

    • 連接埠:選擇服務需要暴露的連接埠,即本樣本使用的80。

    其餘配置保持預設即可。

    建立完成後,您可以在左側導覽列,選擇路由,查看Ingress是否成功部署。等待1分鐘左右,在端點列查看並複製ALB DNS的端點名稱。

步驟四:訪問應用

將ALB DNS的端點名稱直接粘貼到瀏覽器中,以訪問Nginx應用。

image

(可選)步驟五:清理資源

本文建立的資源套件括Deployment、Service、AlbConfig、IngressClass以及ALB Ingress。請參見以下命令清理資源。

以下命令中的資源名稱均為樣本值。執行時請替換為實際的資源名稱。
kubectl delete deployment my-nginx -n my-nginx-namespace
kubectl delete Service my-nginx-svc -n my-nginx-namespace
kubectl delete ALBIngress my-albingress -n my-nginx-namespace
kubectl delete AlbConfig alb
kubectl delete IngressClass alb

相關文檔