本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
安裝 AWS Load Balancer Controller 含清單清單
本主題說明如何透過下載並套用 Kubernetes 資訊清單。您可以在 上檢視控制器的完整文件
在下列步驟中,取代 example values
使用您自己的值。
必要條件
開始本教學課程之前,您必須安裝並設定建立和管理 Amazon EKS 叢集所需的下列工具和資源。
-
現有的 Amazon EKS 叢集。若要部署叢集,請參閱 Amazon EKS 入門。
-
現有的 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) 叢集的供應商。若要判定您是否已經擁有一個,或是要建立一個,請參閱 建立 IAM OIDC 叢集的 提供者。
-
請確定您的 Amazon VPC CNI plugin for Kubernetes、
kube-proxy
和 CoreDNS 附加元件是 Service 帳戶權杖中列出的最低版本。 -
熟悉 AWS Elastic Load Balancing。如需詳細資訊,請參閱《Elastic Load Balancing 使用者指南》。
步驟 1:設定 IAM
注意
您只需要為 建立角色 AWS Load Balancer Controller 每個 AWS 帳戶一個。檢查 IAM 主控台AmazonEKSLoadBalancerControllerRole
是否存在 。如果存在此角色,請跳至步驟 2:安裝 cert-manager。
-
下載 的 IAM 政策 AWS Load Balancer Controller 允許其代表您呼叫 to AWS APIs。
- AWS
-
**
$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy.json
- AWS GovCloud (美國)
-
**
$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy_us-gov.json
$ mv iam_policy_us-gov.json iam_policy.json
-
使用上一個步驟中下載的政策建立 IAM 政策。
$ aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
注意
如果您在 中檢視政策 AWS Management Console,主控台會顯示 ELB 服務的警告,但不會顯示 ELB v2 服務。這是因為 ELB v2 存在政策中的某些動作,但 ELB 不存在。您可以忽略 ELB 的警告。
- eksctl
-
-
Replace (取代)
my-cluster
使用叢集的名稱111122223333
使用您的帳戶 ID,然後執行 命令。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:
以 取代arn:aws-us-gov:
。$ eksctl create iamserviceaccount \ --cluster=my-cluster \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --role-name AmazonEKSLoadBalancerControllerRole \ --attach-policy-arn=arn:aws: iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --approve
-
- AWS CLI 和 kubectl
-
-
擷取叢集的 OIDC 提供者 ID,並將其儲存在變數中。
oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
-
判斷 IAM 是否 OIDC 具有叢集 ID 的 提供者已存在於您的帳戶中。您需要 OIDC 已針對叢集和 IAM 設定 。
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
如果傳回輸出,則表示您已經有 IAM OIDC 叢集的 提供者。如果未傳回輸出,則必須建立 IAM OIDC 叢集的 提供者。如需詳細資訊,請參閱建立 IAM OIDC 叢集的 提供者。
-
將以下內容複製到您的裝置。Replace (取代)
111122223333
使用您的帳戶 ID。Replace (取代)region-code
叢集所在的 AWS 區域。Replace (取代)EXAMPLED539D4633E53DE1B71EXAMPLE
在上一個步驟中傳回的輸出。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:
以 取代arn:aws-us-gov:
。取代文字後,請執行已修改的命令以建立load-balancer-role-trust-policy.json
檔案。cat >load-balancer-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller" } } } ] } EOF
-
建立 IAM 角色。
aws iam create-role \ --role-name AmazonEKSLoadBalancerControllerRole \ --assume-role-policy-document file://"load-balancer-role-trust-policy.json"
-
將必要的 Amazon EKS 受管 IAM 政策連接至 IAM 角色。Replace (取代)
111122223333
使用您的帳戶 ID。aws iam attach-role-policy \ --policy-arn arn:aws: iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --role-name AmazonEKSLoadBalancerControllerRole
-
將以下內容複製到您的裝置。Replace (取代)
111122223333
使用您的帳戶 ID。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:
以 取代arn:aws-us-gov:
。取代文字後,請執行已修改的命令以建立aws-load-balancer-controller-service-account.yaml
檔案。cat >aws-load-balancer-controller-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/AmazonEKSLoadBalancerControllerRole EOF
-
建立 Kubernetes 叢集上的 服務帳戶。所以此 Kubernetes 名為 的服務帳戶會以您建立的 IAM 角色
aws-load-balancer-controller
標註AmazonEKSLoadBalancerControllerRole
.$ kubectl apply -f aws-load-balancer-controller-service-account.yaml
-
步驟 2:安裝 cert-manager
使用以下其中一個方法安裝 cert-manager
,將憑證組態注入 Webhook。如需詳細資訊,請參閱 cert-manager 文件中的入門
建議使用quay.io
容器登錄檔來安裝 cert-manager
。如果您的節點無法存取quay.io
容器登錄檔,cert-manager
請使用 Amazon ECR 安裝 (請參閱下文)。
- Quay.io
-
-
如果您的節點可以存取
quay.io
容器登錄檔,請安裝cert-manager
以將憑證組態注入 Webhook。$ kubectl apply \ --validate=false \ -f https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
-
- Amazon ECR
-
-
使用以下其中一個方法安裝
cert-manager
,將憑證組態注入 Webhook。如需詳細資訊,請參閱 cert-manager 文件中的入門。 -
下載清單檔案。
curl -Lo cert-manager.yaml https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
-
提取以下映像並將其推送到節點可存取的儲存庫。有關如何提取、標記映像並將其推送到您儲存庫的詳細資訊,請參閱 將容器映像從一個儲存庫複製到另一個儲存庫。
quay.io/jetstack/cert-manager-cainjector:v1.13.5 quay.io/jetstack/cert-manager-controller:v1.13.5 quay.io/jetstack/cert-manager-webhook:v1.13.5
-
使用您的登錄檔名稱取代清單檔案中三個映像的
quay.io
。下列命令假設您的私有儲存庫名稱與來源儲存庫相同。Replace (取代)111122223333.dkr.ecr.region-code.amazonaws.com
您的私有登錄檔。$ sed -i.bak -e 's|quay.io|111122223333.dkr.ecr.region-code.amazonaws.com|' ./cert-manager.yaml
-
套用清單檔案。
$ kubectl apply \ --validate=false \ -f ./cert-manager.yaml
-
步驟 3:安裝 AWS Load Balancer Controller
-
下載控制器規格。如需控制器的詳細資訊,請參閱 上的文件
GitHub. curl -Lo v2_7_2_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.7.2/v2_7_2_full.yaml
-
對檔案進行以下編輯。
-
如果您已下載
v2_7_2_full.yaml
檔案,請執行下列命令以移除清單檔案中的ServiceAccount
區段。如果您未移除本節,則會覆寫您在上一個步驟中對服務帳戶所做的必要註釋。如果您刪除控制器,移除此區段還可保留您在上一個步驟中建立的服務帳戶。$ sed -i.bak -e '612,620d' ./v2_7_2_full.yaml
如果您下載不同的檔案版本,請在編輯器中開啟檔案並移除下列各行。
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system ---
-
將 檔案的
your-cluster-name
Deployment
spec
區段取代為叢集的名稱,方法是取代my-cluster
您的叢集名稱。$ sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_7_2_full.yaml
-
如果您的節點無法存取 Amazon EKS Amazon ECR 映像儲存庫,則需要提取下列映像,並將其推送至節點可存取的儲存庫。有關如何提取、標記映像並將其推送到您儲存庫的詳細資訊,請參閱 將容器映像從一個儲存庫複製到另一個儲存庫。
public.ecr.aws/eks/aws-load-balancer-controller:v2.7.2
將登錄檔的名稱新增至資訊清單。下列命令假設私有儲存庫的名稱與來源儲存庫相同,並將私有登錄檔的名稱新增至 檔案。Replace (取代)
111122223333.dkr.ecr.region-code.amazonaws.com
您的登錄檔。此行假定您將私有儲存庫命名為與來源儲存庫相同的名稱。如果沒有,請將私有登錄檔名稱後的eks/aws-load-balancer-controller
文字變更為儲存庫名稱。$ sed -i.bak -e 's|public.ecr.aws/eks/aws-load-balancer-controller|111122223333.dkr.ecr.region-code.amazonaws.com/eks/aws-load-balancer-controller|' ./v2_7_2_full.yaml
-
(僅適用於 Fargate 或受限制的 IMDS)
如果您要將控制器部署到限制存取 Amazon EC2 執行個體中繼資料服務 (Word) 的 Amazon Word 節點,或者如果您要部署到 Fargate,請在
following parameters
下新增- args:
。 EC2 IMDS[...] spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb - --aws-vpc-id=vpc-xxxxxxxx - --aws-region=region-code [...]
-
-
套用檔案。
$ kubectl apply -f v2_7_2_full.yaml
-
將
IngressClass
和IngressClassParams
清單檔案下載至叢集。$ curl -Lo v2_7_2_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.7.2/v2_7_2_ingclass.yaml
-
將清單檔案套用至叢集。
$ kubectl apply -f v2_7_2_ingclass.yaml
步驟 4:確認已安裝控制器
-
確認控制器已安裝。
$ kubectl get deployment -n kube-system aws-load-balancer-controller
範例輸出如下。
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
如果使用 Helm 進行部署,則會收到先前的輸出。如果您使用 進行部署 Kubernetes 資訊清單,您只有一個複本。
-
使用控制器佈建 AWS 資源之前,您的叢集必須符合特定需求。如需詳細資訊,請參閱 使用 Application Load Balancer 路由應用程式和 HTTP 流量 和 使用 Network Load Balancer 路由 TCP 和 UDP 流量。