我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 中自動探索 Application Load Balancer (ALB) 使用的子網路。
簡短描述
您可以標記 AWS 子網路,允許 AWS Load Balancer 控制器自動探索 Application Load Balancer 使用的子網路。
解決方法
1. 為 Amazon EKS 叢集部署 ](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)AWS Load Balancer 控制器[。
2. 確認是否已安裝 AWS Load Balancer 控制器:
kubectl get deployment -n kube-system aws-load-balancer-controller
**注意:**如果該部署已部署在不同的命名空間中,請使用適當的命名空間取代 -n kube-system。
3. 使用下列註釋在叢集上建立 Kubernetes 傳入資源:
annotations:
kubernetes.io/ingress.class: alb
**注意:**AWS Load Balancer 控制器會建立負載平衡器。傳入資源將 Application Load Balancer 設定為將 HTTP(S) 流量路由至叢集內的不同 Pod。
4. 新增內部或面向網際網路的註釋,以指定傳入建立負載平衡器的位置:
alb.ingress.kubernetes.io/scheme: internal
-或-
alb.ingress.kubernetes.io/scheme: internet-facing
注意:選擇內部以建立內部負載平衡器,或選擇面向網際網路以建立公有負載平衡器。
5. 使用標籤允許 Application Load Balancer 傳入控制器使用自動探索來建立負載平衡器。例如:
kubernetes.io/role/internal-elb Set to 1 or empty tag value for internal load balancers
kubernetes.io/role/elb Set to 1 or empty tag value for internet-facing load balancers
**注意:**您可以使用標籤進行自動探索,而不是手動建立 alb.ingress.kubernetes.io/subnets 註釋。
具有內部負載平衡器之叢集的使用正確標籤的子網路範例:
kubernetes.io/role/internal-elb 1
具有公有負載平衡器之叢集的使用正確標籤的子網路範例:
kubernetes.io/role/elb 1
**注意:**對於叢集 1.18 版及更舊版本,Amazon EKS 會將以下標籤新增至叢集建立期間傳入的所有子網路。標籤並未新增至叢集 1.19 版。如果您正在使用標籤,而且將叢集從舊版更新為 1.19 版,則無需再次新增該標籤。該標籤會保留在您的子網路上。您可以使用下列標籤來控制 Application Load Balancer 的佈建位置。除了自動佈建 Application Load Balancer 所需的子網路標籤之外,還可以使用此標籤。
kubernetes.io/cluster/$CLUSTER_NAME shared
**重要事項:**AWS Load Balancer 控制器工作流程會檢查子網路標籤的值是否為 " " (空字串) 和 1。如果是私有子網路,請將 kubernetes.io/role/internal-elb 標籤的值設定為空字串或 1。如果是公有子網路,請將 kubernetes.io/role/elb 標籤的值設定為空字串或 1。這些標籤允許您從 Application Load Balancer 的 Amazon EKS VPC 子網路自動探索子網路。
6. 確認您的 Amazon EKS VPC 子網路是否具有正確標籤:
aws ec2 describe-subnets --subnet-ids your-subnet-xxxxxxxxxxxxxxxxx
7. 部署範例應用程式,以確認 AWS Load Balancer 控制器是否因傳入物件而建立 Application Load Balancer:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml
8. 確認傳入資源已建立,並與 Application Load Balancer 建立關聯:
kubectl get ingress/2048-ingress -n 2048-game
根據您在傳入物件和子網路中定義的註釋 (alb.ingress.kubernetes.io/scheme:),建立內部或面向網際網路的負載平衡器。