本文指導您如何在阿里雲雲上自建的Kubernetes叢集中通過ALB Ingress,來使用阿里雲應用型負載平衡ALB(Application Load Balancer)產品。
情境樣本
本文以下圖情境為例。您已依託阿里雲雲上資源自建Kubernetes叢集,並希望該叢集可以通過ALB Ingress轉寄請求。
您可以通過在自建Kubernetes叢集中部署alb-ingress-controller,並建立Ingress和Service資源;alb-ingress-controller會根據Kubernetes叢集內的服務配置,將Ingress以轉寄規則的形式同步到ALB上,同時會通過監聽叢集的APIServer來觀察Ingress的後續變更,並將相應的變化同步到ALB上。ALB感知到變化會動態地將相應流量轉寄到叢集內對應的Pod上。更多資訊,請參見ALB Ingress概述。
注意事項
如果您使用的是Overlay類型的網路外掛程式,如Flannel,則ALB Ingress後端Service服務僅支援NodePort和LoadBalancer類型。
AlbConfig、Namespace、Ingress和Service這些資源的名稱不能以aliyun開頭。
前提條件
您已擁有阿里雲雲上自建Kubernetes v1.20版本以上叢集,並可通過kubectl工具串連該叢集。關於如何下載和安裝kubectl工具,請參見安裝和設定kubectl。
您已為雲上自建叢集開啟SNAT公網訪問能力。具體操作,請參見使用公網NAT GatewaySNAT功能訪問互連網。
雲上自建的叢集使用controller鏡像時,請注意:
如果使用私人鏡像,可以根據開來源文件如何從源碼進行controller的部署自行編譯上傳。
通用x86架構的叢集可以使用阿里雲開放鏡像進行測試使用。
配置步驟
以下步驟涉及檔案修改,請您瞭解對應的檔案名稱和用途。
步驟 | 檔案名稱 | 檔案用途 |
load-balancer-controller.yaml 基於模板修改 | 用於部署alb-ingress-controller | |
alb.yaml 自建並修改 | 用於建立albconfig及ingressClass資源,並同步完成ALB執行個體的建立 | |
test-service.yaml 自建並修改 | 用於部署測試服務 | |
test-ingress.yaml 自建並修改 | 用於建立Ingress |
步驟一:部署alb-ingress-controller
受電訊廠商網路的影響,拉取Deployment鏡像可能出現拉取失敗的情況。為此,您可以使用私人鏡像,根據開來源文件如何從源碼進行controller的部署自行編譯上傳。
本文中alb-ingress-controller使用InCluster模式啟動,通過配置監聽Service、Endpoint、Node等資源的許可權,使用load-balancer-controller.yaml檔案部署alb-ingress-controller,相關的ServiceAccount、Deployment、ConfigMap已經預置,您只需要針對實際情況執行以下修改。
修改load-balancer-controller.yaml檔案,將Deployment對應的鏡像修改為可用的鏡像地址。
load-balancer-controller.yaml檔案用於部署alb-ingress-controller。
修改前:
image: ${path/to/your/image/registry}
修改後:
image: alibabacloudslb/alibaba-load-balancer-controller:v1.2.0 #已完成x86編譯的鏡像
修改load-balancer-controller.yaml檔案,在ConfigMap中配置AccessKey ID與AccessKey Secret。
apiVersion: v1 kind: ConfigMap metadata: name: load-balancer-config namespace: kube-system data: cloud-config.conf: |- { "Global": { "AccessKeyID": "VndV***", # 需要base64編碼 "AccessKeySecret": "UWU0NnUyTFdhcG***" # 需要base64編碼 } }
通過kubectl串連叢集,執行以下命令,提交修改後的load-balancer-controller.yaml檔案進行部署。
kubectl apply -f load-balancer-controller.yaml
預期輸出:
clusterrole.rbac.authorization.k8s.io/system:load-balancer-controller created serviceaccount/load-balancer-controller created clusterrolebinding.rbac.authorization.k8s.io/system:load-controller-manager created configmap/load-balancer-config created deployment.apps/load-balancer-controller created
執行以下命令驗證alb-ingress-controller部署結果。
kubectl -n kube-system get all | grep load-balancer
如下圖所示,pod運行狀態為Running,表示部署成功。
步驟二:建立AlbConfig及IngressClass資源
建立albconfig及ingressClass資源成功後,即可同步完成ALB執行個體的建立。
建立alb.yaml檔案並複製以下內容到該檔案中。
alb.yaml用於建立AlbConfig及IngressClass資源。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test #alb-test為ALB執行個體名稱 addressType: Internet #Intranet表示私網,Internet表示公網 。 zoneMappings: - vSwitchId: vsw-wz9e2usil7e5an1xi**** #ALB需要至少兩個可用性區域的交換器ID - vSwitchId: vsw-wz92lvykqj1siwvif**** listeners: - port: 80 protocol: HTTP --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demo #指定的AlbConfig資源
說明請關注以下兩個參數的配置:
albconfig.spec.config.addressType:表示執行個體網路類型。取值:
Internet(預設值):表示公網。每個可用性區域提供一個公網IP和一個私網IP。公網ALB通過Elastic IP Address(Elastic IP Address,簡稱EIP)提供公網能力,選擇公網將會收取Elastic IP Address的執行個體費、頻寬或流量費用。
Elastic IP Address對外提供服務,支援通過互連網訪問ALB。
私網IP,支援雲上VPC內的ECS訪問ALB。
Intranet:表示私網。每個可用性區域提供一個私網IP,只能通過阿里雲內部網路訪問ALB,無法從互連網訪問。
spec.config.zoneMappings:用於設定ALB Ingress交換器ID,您需要至少指定兩個不同可用性區域交換器ID,指定的交換器必須在ALB當前所支援的可用性區域內。關於ALB支援的地區與可用性區域,請參見支援的地區與可用性區域。
通過kubectl串連叢集,執行以下命令,提交alb.yaml檔案進行部署。
kubectl apply -f alb.yaml
預期輸出:
AlbConfig.alibabacloud.com/alb-demo create ingressclass.networking.k8s.io/alb created
查看ALB執行個體建立結果。
方式一:執行以下命令查看ALB執行個體ID。
kubectl get albconfig alb-demo
方式二:登入應用型負載平衡ALB控制台,在控制台查看已建立的ALB執行個體。
說明需使用步驟一:部署alb-ingress-controllerConfigMap檔案中配置的阿里雲帳號登入控制台。
步驟三:部署測試應用
本文使用測試鏡像來建立Deployment資源,並使用該Deployment資源部署測試應用。
建立test-service.yaml檔案並複製以下內容到該檔案中。
test-service.yaml用於部署兩個名稱分別為test01和test02的Deployment,以及兩個名稱分別為test01和test02的Service。
apiVersion: apps/v1 kind: Deployment metadata: name: test01 spec: replicas: 2 selector: matchLabels: app: test01 template: metadata: labels: app: test01 spec: containers: - name: test01 image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: test01-service spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: test01 type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: test02 spec: replicas: 1 selector: matchLabels: app: test02 template: metadata: labels: app: test02 spec: containers: - name: test02 image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: test02-service spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: test02 type: NodePort
通過kubectl串連叢集,執行以下命令,提交test-service.yaml檔案進行部署。
kubectl apply -f test-service.yaml
預期輸出:
deployment "test01" created service "test01-service" created deployment "test02" created service "test02-service" created
執行以下命令,驗證測試服務是否部署成功。
kubectl get svc,deploy
如果收到以下回複,代表測試服務部署成功。
步驟四:建立Ingress
Ingress對應ALB執行個體中的轉寄規則。本文使用基於路徑的轉寄功能進行配置,更多進階功能請參見ALB Ingress的詳細使用手冊。
建立test-ingress.yaml檔案並複製以下內容到該檔案中。
test-ingress.yaml檔案用於建立Ingress。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress spec: ingressClassName: alb rules: - host: demo.domain.ingress.top http: paths: - path: /test01 pathType: Prefix backend: service: name: test01-service port: number: 80 - path: /test02 pathType: Prefix backend: service: name: test02-service port: number: 80
通過kubectl串連叢集,執行以下命令,提交test-ingress.yaml檔案進行部署。
kubectl apply -f test-ingress.yaml
預期輸出:
ingress "test-ingress" created
執行以下命令,驗證test-ingress資源建立結果。
kubectl get ingress
如果收到以下回複,代表test-ingress資源建立成功。
步驟五:結果驗證
通過網域名稱解析訪問
將您的常用網域名稱通過CNAME方式解析到已建立ALB執行個體的DNS名稱上。具體操作,請參見為ALB添加CNAME記錄。
本樣本中假設您將自訂網域名
demo.domain.ingress.top
解析到ALB執行個體的公網服務網域名稱。執行以下命令,使用ALB執行個體訪問test01服務。
curl http://demo.domain.ingress.top/test01
執行以下命令,使用ALB執行個體訪問test02服務。
curl http://demo.domain.ingress.top/test02
如果您在使用過程中有任何疑問,請加入釘群ALB客戶交流群(釘群號:31945843)諮詢。
相關文檔
ALB Ingress概述及功能介紹: