如何在 Amazon EKS 的 Amazon EC2 節點群組中使用 AWS 負載平衡器控制器設定 Application Load Balancer?

3 分的閱讀內容
0

我想要在 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


AWS 官方
AWS 官方已更新 2 年前