如何使用 AWS Load Balancer Controller,在 Amazon EKS 中的 Amazon EC2 節點群組上設定應用程式負載平衡器?
我想使用 AWS Load Balancer Controller,在 Amazon Elastic Kubernetes Service (Amazon EKS) 中的 Amazon Elastic Compute Cloud (Amazon EC2) 節點群組上設定 Application Load Balancer。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
先決條件:設定您的子網路,以允許從您的工作節點進行傳出網路存取。AWS Load Balancer Controller 需要傳出網路連線。
若要在 AWS Fargate 上部署 AWS Load Balancer Controller ,請參閱如何在 Amazon EKS 叢集上為 Fargate 設定 AWS Load Balancer Controller?
標記您的子網路
在您的 Amazon EKS 叢集中標記 Amazon Virtual Private Cloud (Amazon VPC) 子網路。標記子網路後,AWS Load Balancer Controller 會在您建立 Application Load Balancer 資源時自動探索子網路。
對於公有 Application Load Balancer,您的叢集 VPC 中必須至少有兩個帶有 kubernetes.io/role/elb 標籤的公有子網路。
對於私有 Application Load Balancer,您的叢集 VPC 中必須至少有兩個帶有 kubernetes.io/role/internal-elb 標籤的私有子網路。
建立 OIDC 身分提供者
使用 Amazon EKS 主控台、AWSL CLI 或 eksctl 建立 OIDC 身分提供者,以與服務帳戶 (IRSA) 的 AWS Identity and Access Management (IAM) 角色結合使用。
Amazon EKS 主控台
若要使用主控台,請參閱建立 OIDC 身分提供者 (AWS Console)。
AWSL CLI
找到您的叢集所使用的根憑證認證機構 (CA) 的指紋。然後,執行以下 create-open-id-connect-provider 命令:
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 替換為您的叢集名稱,將 region-name 替換為您的 AWS 區域,並將 ca-thumbprint 替換為您的根 CA 憑證的指紋。
eksctl
若要使用 eksctl 命令列工具,請參閱建立 OIDC 身分提供者 (eksctl)。
建立 IAM 政策
建立允許 AWS Load Balancer Controller 呼叫 AWS API 的 IAM 政策。
**重要:**授予 AWS API 存取權時,最佳實務是使用 IRSA。
請完成下列步驟:
-
根據您的區域執行以下其中一個命令,從 GitHub 下載 AWS Load Balancer Controller 的 IAM 政策。
對於除北京和寧夏中國區域之外的所有區域,執行以下 describe-cluster 命令:ISSUER_URL= aws eks describe-cluster --name example-cluster-name \ --query "cluster.identity.oidc.issuer" --region example-region-name --output text aws iam create-open-id-connect-provider \ --url example-issuer-url \ --thumbprint-list ca-thumbprint \ --client-id-list sts.amazonaws.com \ --region example-region-name**注意:**將 example-cluster-name 替換為您的叢集名稱,將 example-region-name 替換為您的區域,並將 example-issuer-url 替換為您的發行者的網址。
對於中國北京和寧夏地區,執行以下 curl 命令:curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json -
執行以下 create-policy 命令,為您的工作節點執行個體設定檔建立名為 AWSLoadBalancerControllerIAMPolicy 的 IAM 政策:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json -
記下命令傳回的政策 Amazon Resource Name (ARN)。
-
使用現有的 IAM 角色,或為 AWS Load Balancer Controller 建立新的 IAM 角色。
**注意:**若要使用 eksctl 建立 IAM 角色,請將 --attach-policy-arn 參數與 AWSLoadBalancerControllerIAMPolicy IAM 政策的 ARN 結合使用。 -
執行以下 attach-role-policy 命令,將 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 Load Balancer Controller
請完成下列步驟:
-
使用 Kubernetes 1.16 或更新版本,執行以下指令來安裝 cert-manager:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/example-version/cert-manager.yaml -
在從 GitHub 下載的資訊清單檔案中,執行以下命令:
curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/example-version/v2_13_3_full.yaml**注意:**將 example-version 替換為您要部署的 AWS Load Balancer Controller 的版本。若要確認 AWS Load Balancer Controller 版本,請參閱 GitHub 網站上的 Kubernetes SIG。請務必修改檔案名稱,以符合您使用的版本。在上述程式碼範例中,v2_13_3_full.yaml 對應的是 AWS Load Balancer Controller v2.13.3 版本。如需詳細資訊,請參閱 GitHub 網站上的 aws-load-balancer-controller。
-
在 .yaml 檔案的 ServiceAccount 區段進行以下更新:
spec: containers: - args: - --cluster-name=example-cluster-name - --ingress-class=alb**注意:**將 example-cluster-name 替換為您叢集的名稱。
在下列範例中,111122223333 是帳戶 ID,example-role-name 是 IAM 角色名稱:apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/example-role-name name: aws-load-balancer-controller namespace: kube-system -
執行下列命令來部署 AWS Load Balancer Controller :
kubectl apply -f ingress-controller.yaml
部署範例應用程式
部署範例應用程式,以確認 AWS Load Balancer Controller 是否因傳入物件而建立公有 Application Load Balancer。
請完成下列步驟:
-
執行以下命令以部署名為 2048 的遊戲:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/example-version/docs/examples/2048/2048_full.yaml**注意:**將 example-version 替換為您要部署的 AWS Load Balancer Controller 的版本。若要確認您的 AWS Load Balancer Controller 版本,請參閱 GitHub 網站上的 Kubernetes SIG。
-
幾分鐘後,執行以下命令來確認 Kubernetes 是否建立了傳入資源:
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 -
如果 Kubernetes 未建立您的傳入資源,請執行下列命令,查看 AWS Load Balancer Controller 日誌中的部署錯誤訊息:
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller -
若要查看遊戲,請開啟 Web 瀏覽器,然後輸入步驟 2 中輸出的網址位址。
-
執行以下命令以刪除遊戲:
kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/example-version/docs/examples/2048/2048_full.yaml**注意:**將 example-version 替換為您要部署的 AWS Load Balancer Controller 的版本。
- 語言
- 中文 (繁體)
