本文介紹如何在ACK託管叢集(智能託管模式)中部署一個工作負載,並通過ALB Ingress實現公網訪問。完成後,您可以通過設定的網域名稱訪問該應用,實現外部流量的高效管理和負載平衡。
本文將指引完成以下操作。
為樣本應用建立一個命名空間。
部署一個Nginx樣本應用,並建立Service以將應用暴露到叢集網路。
建立ALB Ingress,以通過ALB實現應用的公網訪問。需要手動建立AlbConfig用於管理ALB執行個體,建立IngressClass以關聯AlbConfig。
驗證部署是否成功,並通過瀏覽器訪問應用。後續資源如無需使用,可釋放。
操作完成後,可實現如下內容。
運行一個2副本的Nginx樣本應用。
通過 ALB Ingress 和 Service 為應用提供穩定的公網入口。
基於智能託管模式,ACK 將自動根據應用負載動態擴縮容,並接管節點的生命週期管理,以減少營運負擔。
前提條件
步驟一:建立命名空間
您可以為本實踐建立一個命名空間,以便實現資源隔離。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇命名空間與配額。
單擊建立,在彈出的對話方塊自訂命名空間名稱(本文以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管理。
參見以下代碼建立一個名為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。部署Deployment和Service。
kubectl apply -f my-nginx.yaml查看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
建立並拷貝以下內容到alb.yaml檔案中,用於建立AlbConfig。
該AlbConfig指定
addressType為Internet,即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建立AlbConfig。
kubectl apply -f alb.yaml查看AlbConfig資源。
kubectl get AlbConfig alb預期輸出:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 60s說明建立HTTPS監聽並為其配置認證後,
PORT&PROTOCOL和CERTID中才會顯示內容,內容為空白是正常現象。
建立IngressClass
使用以下代碼建立一個名為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的名稱建立IngressClass。
kubectl apply -f ingress_class.yaml
建立ALB Ingress
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在路由頁面,切換命名空間為此前建立的命名空間,然後單擊建立Ingress,在建立Ingress對話方塊配置路由,按照頁面提示完成Ingress的建立。
下表僅介紹核心配置項。詳細配置項說明和相關操作(例如佈建網域名解析),請參見建立ALB Ingress。
配置項
說明
網關類型
選擇類型為ALB Ingress。
名稱
自訂路由名稱,例如my-albingress。
Ingress Class
選擇此前建立的Ingress Class,以引用相應的AlbConfig配置。
規則
服務名稱:選擇目標服務,即此前建立的Service。
連接埠:選擇服務需要暴露的連接埠,即本樣本使用的80。
其餘配置保持預設即可。
建立完成後,您可以在左側導覽列,選擇路由,查看Ingress是否成功部署。等待1分鐘左右,在端點列查看並複製ALB DNS的端點名稱。
步驟四:訪問應用
將ALB DNS的端點名稱直接粘貼到瀏覽器中,以訪問Nginx應用。

(可選)步驟五:清理資源
本文建立的資源套件括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相關文檔
使用HTTPS協議進行監聽時需配置SSL/TLS認證。關於ALB Ingress支援的認證配置方式,請參見配置HTTPS認證以實現加密通訊。
您可通過配置AlbConfig資源以自訂ALB執行個體的配置,請參見ALB Ingress配置詞典。