本文指導您如何在阿里云云上自建的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網關SNAT功能訪問互聯網。
云上自建的集群使用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通過彈性公網IP(Elastic IP Address,簡稱EIP)提供公網能力,選擇公網將會收取彈性公網IP的實例費、帶寬或流量費用。
彈性公網IP對外提供服務,支持通過互聯網訪問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概述及功能介紹: