AWS Load Balancer Controller使用清單進行安裝 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS Load Balancer Controller使用清單進行安裝

本主題說明如何透過下載和套用資Kubernetes訊清單來安裝控制器。您可以檢視 GitHub 上的完整文件

在下列步驟中,使用自己的值取代 example values

必要條件

在開始本教學課程之前,您必須安裝並設定下列建立和管理 Amazon EKS 叢集所需的工具和資源。

步驟 1:設定 IAM

注意

您只需要為每個 AWS 帳戶創建AWS Load Balancer Controller一個角色。檢查IAM控制台中是否AmazonEKSLoadBalancerControllerRole存在。如果此角色存在,請跳至步驟 2:安裝 cert-manager

建立IAM策略。
  1. 下載的IAM政策AWS Load Balancer Controller,允許其代表您撥 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 (US)
    $ 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
  2. 使用上一個IAM步驟中下載的策略建立策略。

    $ aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
    注意

    如果您在中檢視原則 AWS Management Console,主控台會顯示ELB服務的警告,但不會顯示 ELBv2 服務的警告。發生這種情況是因為原則中的某些動作適用於 ELBv2,但不適用於 ELB. 您可以忽略的警告ELB

eksctl
使用建立IAM角色 eksctl
  • 使用叢集名稱取代 my-cluster,並使用帳戶 ID 取代 111122223333,然後執行命令。如果您的叢集位於 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 and kubectl
使用 AWS CLI 和建立IAM角色 kubectl
  1. 擷取叢集的 OIDC 供應商 ID 並將其存放在變數中。

    oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
  2. 判斷擁有叢集 ID 的IAMOIDC提供者是否已在您的帳戶中。您需要OIDC針對叢集和IAM.

    aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

    如果傳回輸出,表示您已有叢集的IAMOIDC提供者。如果沒有傳回任何輸出,則必須為叢集建立IAMOIDC提供者。如需詳細資訊,請參閱為您的叢集建立IAMOIDC提供者

  3. 將以下內容複製到您的裝置。使用您的帳戶 ID 取代 111122223333region-code以叢集所 AWS 區域 在的位置取代。 使用前一個步驟傳回的輸出取代 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
  4. 建立IAM角色。

    aws iam create-role \ --role-name AmazonEKSLoadBalancerControllerRole \ --assume-role-policy-document file://"load-balancer-role-trust-policy.json"
  5. 將必要的 Amazon EKS 受管IAM政策附加到該IAM角色。使用您的帳戶 ID 取代 111122223333

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --role-name AmazonEKSLoadBalancerControllerRole
  6. 將以下內容複製到您的裝置。使用您的帳戶 ID 取代 111122223333如果您的叢集位於 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
  7. 在您的叢集上建立 Kubernetes 服務帳戶。名為的Kubernetes服務帳戶aws-load-balancer-controller會以您建立的名稱為AmazonEKSLoadBalancerControllerRole的IAM角色加上註解。

    $ kubectl apply -f aws-load-balancer-controller-service-account.yaml

步驟 2:安裝 cert-manager

使用以下其中一個方法安裝 cert-manager,將憑證組態注入 Webhook。如需詳細資訊,請參閱 cert-managercert-manager 文件上的入門

我們建議您使用quay.io容器登錄進行安裝cert-manager。如果您的節點無法存取quay.io容器登錄,請cert-manager使用 Amazon 進行安裝 ECR (請參閱下文)。

奎伊大作战
cert-manager使用 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使用 Amazon 安裝 ECR
  1. 使用以下其中一個方法安裝 cert-manager,將憑證組態注入 Webhook。如需詳細資訊,請參閱 cert-managercert-manager 文件上的入門

  2. 下載清單檔案。

    curl -Lo cert-manager.yaml https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
  3. 提取以下映像並將其推送到節點可存取的儲存庫。有關如何提取、標記映像並將其推送到您儲存庫的詳細資訊,請參閱 將容器映像從一個儲存庫複製到另一個儲存庫

    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
  4. 使用您的登錄檔名稱取代清單檔案中三個映像的 quay.io。以下命令假定私有儲存庫的名稱與來源儲存庫的名稱相同。將 111122223333.dkr.ecr.region-code.amazonaws.com 取代為您的私有登錄檔。

    $ sed -i.bak -e 's|quay.io|111122223333.dkr.ecr.region-code.amazonaws.com|' ./cert-manager.yaml
  5. 套用清單檔案。

    $ kubectl apply \ --validate=false \ -f ./cert-manager.yaml

步驟 3:安裝 AWS Load Balancer Controller

AWS Load Balancer Controller使用Kubernetes資訊清單安裝
  1. 下載控制器規格。如需控制器的詳細資訊,請參閱 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
  2. 對檔案進行以下編輯。

    1. 如果您已下載 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 ---
    2. 使用叢集名稱取代 my-cluster,從而使用叢集名稱取代檔案的 Deployment spec 區段中的 your-cluster-name

      $ sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_7_2_full.yaml
    3. 如果您的節點無法存取 Amazon EKS Amazon ECR 映像儲存庫,則需要提取以下映像並將其推送到節點可存取的儲存庫。有關如何提取、標記映像並將其推送到您儲存庫的詳細資訊,請參閱 將容器映像從一個儲存庫複製到另一個儲存庫

      public.ecr.aws/eks/aws-load-balancer-controller:v2.7.2

      將您的登錄檔名稱新增至清單檔案。以下命令假定私有儲存庫的名稱與來源儲存庫的名稱相同,並將您的私有登錄檔名稱新增至檔案中。將 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
    4. (僅適用於 Fargate 或受限制IMDS)

      如果您要將控制器部署到限制存取 Amazon EC2 執行個體中繼資料服務 (IMDS) 的 Amazon EC2 節點,或者如果您要部署到 Fargate,請新增following parameters- args:方。

      [...] spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb - --aws-vpc-id=vpc-xxxxxxxx - --aws-region=region-code [...]
  3. 套用檔案。

    $ kubectl apply -f v2_7_2_full.yaml
  4. IngressClassIngressClassParams 清單檔案下載至叢集。

    $ 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
  5. 將清單檔案套用至叢集。

    $ kubectl apply -f v2_7_2_ingclass.yaml

步驟 4:確認控制器已安裝

  1. 確認控制器已安裝。

    $ 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 清單檔案進行部署,則您只有一個複本。

  2. 使用控制器佈建 AWS 資源之前,您的叢集必須符合特定需求。如需詳細資訊,請參閱 路線應用和HTTP交通 Application Load Balancers路線TCP和UDP交通 Network Load Balancers