Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何在 Amazon EKS 中的 Amazon EC2 節點群組上使用 AWS 負載平衡器控制器設定 Application Load Balancer?
我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 的 Amazon Elastic Compute Cloud (Amazon EC2) 節點群組中,透過 AWS 負載平衡器控制器設定 Application Load Balancer。
簡短描述
將 AWS 負載平衡器控制器連接至下列其中一個 AWS 服務端點:
- AWS Identity and Access Management (IAM)
- Amazon EC2
- AWS Certificate Manager (ACM)
- Elastic Load Balancing (ELB)
- Amazon Cognito
- AWS WAF
- AWS Shield
為使 AWS 負載平衡器控制器運作,您必須具有網際網路出埠連線。如需詳細資訊,請參閱如何設定 Amazon EKS 叢集的子網路?
若要在 AWS Fargate 中部署 AWS 負載平衡器控制器,請參閱如何在適用於 Fargate 的 Amazon EKS 叢集中設定 AWS 負載平衡器控制器與部署 2048 遊戲?
解決方法
標記子網路以允許自動探索
在 Amazon EKS 叢集中標記 Amazon Virtual Private Cloud (Amazon VPC) 子網路。這可讓 AWS 負載平衡器控制器在您建立 Application Load Balancer 資源時自動探索子網路。
如為公有 Application Load Balancer,您的叢集 VPC 中必須具有至少兩個使用下列標籤的公有子網路:
kubernetes.io/role/elb
如為內部 Application Load Balancer,您的叢集 VPC 中必須具有至少兩個使用下列標籤的私有子網路:
kubernetes.io/role/internal-elb
為叢集建立 OIDC 身分提供者
使用 eksctl 或 AWS 管理主控台建立 OpenID Connect (OIDC) 身分提供者,以與服務帳戶的 IAM 角色一起使用。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
或者,使用 AWSL CLI 為叢集建立 OIDC 身分提供者。例如:
ISSUER_URL=$(aws eks describe-cluster --name cluster-name \ --query "cluster.identity.oidc.issuer" --region region-name --output text) aws iam create-open-id-connect-provider \ --url ${ISSUER_URL} \ --thumbprint-list ca-thumbprint \ --client-id-list sts.amazonaws.com \ --region region-name
**注意:**請使用叢集名稱取代 cluster-name、使用 AWS 區域取代 region-name,以及使用根 CA 憑證指紋取代 ca-thumbprint。您可以取得叢集使用的 oidc.eks.region-name.amazonaws.com 與根 CA 憑證指紋搭配使用。
為 AWS 負載平衡器控制器建立 IAM 政策
您建立的 Amazon EKS 政策允許 AWS 負載平衡器控制器呼叫 AWS API。當您授予 AWS API 存取權時,最佳做法是使用服務帳戶的 AWS IAM 角色。
-
從 GitHub 下載 AWS 負載平衡器控制器的 IAM 政策。根據您的區域,執行下列其中一個命令。
除中國區域外的所有區域:ISSUER_URL=$(aws eks describe-cluster --name cluster-name \ --query "cluster.identity.oidc.issuer" --region region-name --output text) aws iam create-open-id-connect-provider \ --url ${ISSUER_URL} \ --thumbprint-list ca-thumbprint \ --client-id-list sts.amazonaws.com \ --region region-name
中國北京與寧夏區域:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
-
若要為工作節點執行個體設定檔建立名為 AWSLoadBalancerControllerIAMPolicy 的 IAM 政策,請執行下列命令:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json
-
記下輸出中傳回的政策的 ARN。
-
對 AWS 負載平衡器控制器使用現有的 IAM 角色或建立新的 IAM 角色。
**注意:**若要使用 eksctl 建立 IAM 角色,請搭配使用使用 --attach-policy-arn 參數與 AWSLoadBalancerControllerIAMPolicy IAM 政策的 ARN。 -
若要將 AWSLoadBalancerControllerIAMPolicy 附加至 IAM 角色,請執行下列命令:
aws iam attach-role-policy \--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --role-name role-name
**注意:**使用 AWS 帳戶 ID 取代 111122223333,並使用 IAM 角色名稱取代 role-name。
部署 AWS 負載平衡器控制器
-
針對與子網路相關聯的負載平衡器,確認您擁有必要的標籤。
-
安裝 cert-manager,使您可將憑證組態插入 Webhook。使用 Kubernetes 1.16 或更新版本來執行下列命令:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
-
在您從 GitHub 下載的資訊清單檔案中,執行下列命令:
curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_6_2_full.yaml
**注意:**使用您要部署的 AWS 負載平衡器控制器版本取代 $VERSION,並修改檔案名稱,例如 v2.6.2 的 v2_6_2_full.yaml。如需詳細資訊,請參閱 GitHub 上的 Kubernetes 儲存庫。
-
編輯叢集的 cluster-name。例如:
spec: containers: - args: - --cluster-name=your-cluster-name # edit the cluster name - --ingress-class=alb
-
僅更新檔案的 ServiceAccount 區段。例如:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller annotations: # Add the annotations line eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name # Add the IAM role name: aws-load-balancer-controller namespace: kube-system
**注意:**使用您的帳戶 ID 取代 111122223333,並使用您的 IAM 角色名稱取代 role-name。
-
若要部署 AWS 負載平衡器控制器,請執行下列命令:
kubectl apply -f ingress-controller.yaml
部署範例應用程式以測試 AWS 負載平衡器控制器
部署範例應用程式,以確認 AWS 負載平衡器控制器是否因為輸入物件而建立公有 Application Load Balancer。
- 若要部署名為 2048 的遊戲作為範例應用程式,請執行下列命令:
**注意:**使用您想要部署之 AWS 負載平衡器控制器的版本 (從 Kubernetes SIGs GitHub 網站取得) 取代 $VERSION。kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
- 若要驗證輸入資源是否已建立,請稍候數分鐘,然後執行下列命令:
您會收到類似於下列範例的輸出:kubectl get ingress/ingress-2048 -n game-2048
NAME CLASS HOSTS ADDRESS PORTS AGEingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com 80 2m32s
- 如果輸出在數分鐘後未建立,請執行下列命令以檢視 AWS 負載平衡器控制器日誌:
**注意:**AWS 負載平衡器控制器日誌通常顯示錯誤訊息,以協助您針對部署相關的問題進行疑難排解。kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
- 若要查看範例應用程式,請開啟網頁瀏覽器,然後前往步驟 2 中輸出的網址。
- 若要清理範例應用程式,請執行下列命令:
**注意:**使用您想要部署之 AWS 負載平衡器控制器的版本 (從 Kubernetes SIGs GitHub 網站取得) 取代 $VERSION。kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
相關資訊

相關內容
- 已提問 5 個月前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前