如何在 Amazon EKS 的 Amazon EC2 節點群組中使用 AWS 負載平衡器控制器設定 Application Load Balancer?
我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 的 Amazon Elastic Compute Cloud (Amazon EC2) 節點群組中,使用 AWS 負載平衡器控制器設定 Application Load Balancer。
簡短說明
下列步驟將說明如何在 Amazon EKS 的 Amazon EC2 節點群組中使用 AWS 負載平衡器控制器部署 Application Load Balancer。若要建立 Network Load Balancer,請參閱 AWS 負載平衡器控制器。
AWS 負載平衡器控制器必須連線至 AWS 服務端點,例如,AWS Identity and Access Management (IAM)、EC2、AWS Certificate Manager (ACM)、Elastic Load Balancing、Amazon Cognito、AWS WAF 或 AWS Shield。這表示您必須具有網際網路出站連線,才可使 AWS 負載平衡器控制器運作。如需詳細資訊,請參閱如何設定 Amazon EKS 叢集的子網路?
若要在 AWS Fargate 中部署 AWS 負載平衡器控制器,請參閱如何在適用於 Fargate 的 Amazon EKS 叢集中設定 AWS 負載平衡器控制器與部署 2048 遊戲?
解決方法
標記子網路以允許自動探索
在 Amazon EKS 叢集中標記 Amazon VPC 子網路,以允許 AWS 負載平衡器控制器在 Application Load Balancer 資源建立後自動探索子網路。
如為公有 Application Load Balancer,您的叢集 VPC 中必須具有至少兩個使用下列標籤的公有子網路:
kubernetes.io/role/elb
如為內部 Application Load Balancer,您的叢集 VPC 中必須具有至少兩個使用下列標籤的私有子網路:
kubernetes.io/role/internal-elb
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確定您使用的是最新 AWS CLI 版本。
為叢集建立 OIDC 身分提供者
若要為叢集建立 OpenID Connect (OIDC) 身分提供者,以搭配使用服務帳戶的 AWS Identity and Access Management (IAM) 角色,請使用 eksctl 或 AWS 管理主控台。
您也可以使用 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 角色為最佳實務。
1. 若要從 AWS GitHub 下載適用於 AWS 負載平衡器控制器的 IAM 政策文件,請根據您的區域執行下列其中一個命令。
中國區域以外的所有區域:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
- 或 -
中國北京與寧夏區域:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
2. 若要為工作節點執行個體設定檔建立命名為 AWSLoadBalancerControllerIAMPolicy 的 IAM 政策,請執行下列命令:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json
3. 注意步驟 2 的輸出傳回政策中的 Amazon Resource Name (ARN)。
4. 針對 AWS 負載平衡器控制器使用現有的 IAM 角色或建立新的 IAM 角色。
**提示:**若要使用 eksctl 建立 IAM 角色,請使用 --attach-policy-arn 參數與 IAM 政策 AWSLoadBalancerControllerIAMPolicy 的 ARN 搭配使用。
5. 若要將 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 負載平衡器控制器
1. 針對子網路相關聯的負載平衡器,確認您擁有必要的標籤。
2. 安裝 cert-manager,使您可將憑證組態插入 Webhook。
適用於 Kubernetes 1.16 或更新版本:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
適用於 Kubernetes 1.15 或更舊版本:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager-legacy.yaml
注意: 使用您想要部署之 cert-manager 的版本 (從 Jetstack GitHub 網站取得,例如 ‘v1.6.0’) 取代 $VERSION。
3. 在自 AWS GitHub 下載之 AWS 負載平衡器控制器的清單檔案中,執行下列命令:
curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_4_1_full.yaml
**注意:**使用您想要部署之 AWS 負載平衡器控制器的版本 (從 Kubernetes SIGs GitHub 網站取得,例如 'v2.4.1') 取代 $VERSION。
4. 編輯叢集的 cluster-name。例如:
spec: containers: - args: - --cluster-name=your-cluster-name # edit the cluster name - --ingress-class=alb
5. 僅更新檔案的 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
**注意:**使用 AWS 帳戶 ID 取代 111122223333,並使用 IAM 角色名稱取代 role-name。
6. 若要部署 AWS 負載平衡器控制器,請執行下列命令:
kubectl apply -f ingress-controller.yaml
部署範例應用程式以測試 AWS 負載平衡器控制器
部署範例應用程式,以確認 AWS 負載平衡器控制器是否因為輸入物件而建立公有 Application Load Balancer。
1. 若要部署名為 2048 的遊戲作為範例應用程式,請執行下列命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
**注意:**使用您想要部署之 AWS 負載平衡器控制器的版本 (從 Kubernetes SIGs GitHub 網站取得,例如 'v2.3.0') 取代 $VERSION。
2. 若要確認輸入資源是否已建立,請稍候數分鐘,然後執行下列命令:
kubectl get ingress/ingress-2048 -n game-2048
您會收到類似下列內容的輸出:
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com 80 2m32s
如果輸出在數分鐘後未建立,請執行下列命令以檢視 AWS 負載平衡器控制器日誌:
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
**注意:**AWS 負載平衡器控制器日誌可顯示錯誤訊息,以協助您針對部署相關的問題進行疑難排解。
3. 若要查看範例應用程式,請開啟網頁瀏覽器,然後前往步驟 2 中輸出的網址。
4. 若要清理範例應用程式,請執行下列命令:
kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
**注意:**使用您想要部署之 AWS 負載平衡器控制器的版本 (從 Kubernetes SIGs GitHub 網站取得,例如 'v2.3.0') 取代 $VERSION。
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前