--- title: EKS Install AWS Load Balancer Controller tags: AWS --- # EKS Install AWS Load Balancer Controller * [EKS Install AWS Load Balancer Controller](https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/aws-load-balancer-controller.html) * [教學2](https://blog.csdn.net/baidu_38432732/article/details/127842184) ## 創建IAM Policy - 下載AWS Load Balancer Controller 的 IAM policy,該允許LB調用API。 #### AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域 <pre> curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy_us-gov.json </pre> #### 所有其他 AWS 区域 <pre> curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json </pre> #### 透過下載的策略創建IAM Policy叫AWSLoadBalancerControllerIAMPolicy <pre> aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json </pre> ## 創建IAM Role - 創建一個 IAM 角色。在 AWS Load Balancer Controller 的 kube-system 命名空間中創建名為 aws-load-balancer-controller 的 Kubernetes 服務賬戶,並使用 IAM 角色的名稱註釋 Kubernetes 服務賬戶。 #### 確定您的賬戶中是否已存在具有您的集群 ID 的 IAM OIDC 提供商。 a .檢索集群的 OIDC 提供商 ID 並將其存儲在變量中。my-cluster改成自己的cluster名稱。 <pre> oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5) </pre> b .確定您的賬戶中是否已存在具有您的集群 ID 的 IAM OIDC 提供商。 <pre> aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4 </pre> 如果返回輸出,則您已有集群的 IAM OIDC 提供商。如果沒有返回輸出,則您必須為集群創建 IAM OIDC 提供商。[為集群創建 IAM OIDC 提供商]。(https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) #### 建立Role a .建立可信任的實體內容。 <pre> 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 </pre> b .創建Role名稱為AmazonEKSLoadBalancerControllerRole。 <pre> aws iam create-role --role-name AmazonEKSLoadBalancerControllerRole --assume-role-policy-document file://"load-balancer-role-trust-policy.json" </pre> c .将所需的 Amazon EKS 托管 IAM policy 附加到 IAM 角色。请将 111122223333 替换为您的账户 ID。 <pre> aws iam attach-role-policy --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy --role-name AmazonEKSLoadBalancerControllerRole </pre> d .建立ServiceAccount Yaml,並且部署起來。请将 111122223333 替换为您的账户 ID。 <pre> 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 </pre> ## 部署AWS Load Balancer Controller相關Yaml a .安裝cert-manager。 <pre> kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml </pre> b .安裝Load Balancer Controller。 <pre> curl -Lo aws-load-balancer-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_full.yaml </pre> c .因為前面已經有部署serviceaccount,所以進到aws-load-balancer-controller.yaml將serviceaccount刪除掉。 <pre> 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 </pre> d .aws-load-balancer-controller.yaml修改cluster-name。 <pre> ... spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb ... </pre> e .部署aws-load-balancer-controller.yaml。 <pre> kubectl apply -f aws-load-balancer-controller.yaml </pre> f .將 IngressClass 和 IngressClassParams 清單檔案下載至叢集。 <pre> curl -Lo ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_ingclass.yaml </pre> <pre> kubectl apply -f ingclass.yaml </pre> ## Troubleshooting #### 問題一:這個錯誤提示表明在你的 AWS 帳戶中沒有為 https://oidc.eks.ap-east-1.amazonaws.com/id/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 找到有效的 OpenID Connect 提供程序。 <pre> # aws-load-balancer-controller pod Error Message WebIdentityErr: failed to retrieve credentials caused by: InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.ap-east-1.amazonaws.com/id/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx </pre> #### 解決方式:進到AWS IAM,確認IAM是否有建立身分供應商,可用此網站依序檢查。[問題一檢查網址](https://repost.aws/knowledge-center/eks-troubleshoot-oidc-and-irsa)。 --- #### 問題二:[解說](https://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/id_credentials_temp.html)。  #### 解決方式:到IAM建立好的身分提供商,點進去後,新增對象(sts.amazonaws.com)。  --- #### 問題三:[解說](https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/alb-ingress.html)。  #### 解決方式:到EKS的subnet新增標籤(kubernetes.io/role/elb)。  --- #### 問題四:subnet不能小於2以下。 <pre> couldn't auto-discover subnets: subnets count less than minimal required count: 1 < 2 </pre> #### 解決方式:跟問題三的解決方式一樣,新增eks subnet的標籤,至少設定兩個以上subnet的標籤。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up