[!TIP]
文档编写时间:2021-12-02
一、前置条件
在AWS EKS中service默认的LoadBalance模式是CLB。
如果需要使用ALB或NLB则需要安装AWS Load Balancer Controller
安装AWS负载均衡器控制器前需要为集群创建IAM OIDC提供商
二、创建IAM OIDC提供商
-
确定集群是否拥有现有 IAM OIDC 提供商。
查看集群的 OIDC 提供商 URL。
aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text输出示例:
https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E列出您账户中的所有 OIDC 提供商。将
<EXAMPLED539D4633E53DE1B716D3041E>(包括<>)替换为上一个命令返回的值。aws iam list-open-id-connect-providers | grep <EXAMPLED539D4633E53DE1B716D3041E>输出示例
"Arn": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E"如果上一个命令返回了输出,则表示您的集群已经有提供商。如果没有返回输出,则您必须创建 IAM OIDC 提供商。
-
使用以下命令为您的集群创建 IAM OIDC 身份提供商。将
<cluster_name>(包括<>)替换为您自己的值。eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve
三、安装AWS Load Balancer Controller
-
下载AWS负载均衡器控制器的 IAM 策略,该策略允许负载均衡器代表您调用 AWS API。您可以查看 GitHub 上的策略文档。
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy.json -
使用上一步中下载的策略创建一个 IAM 策略。
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json记下返回的策略 ARN。
-
将
my_cluster替换为您的集群的名称,并将111122223333替换为您的账户 ID,然后运行命令。eksctl create iamserviceaccount \ --cluster=my_cluster \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve -
使用 Helm V3 或更高版本来安装AWS负载均衡器控制器
a. 安装
TargetGroupBinding自定义资源定义。kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"b. 添加
eks-charts存储库。helm repo add eks https://aws.github.io/eks-chartsc. 更新您的本地存储库,以确保您拥有最新的图表。
helm repo updated. 安装AWS负载均衡器控制器。
重要
如果要将控制器部署到被限制访问 Amazon EC2 实例元数据服务 (IMDS) 的 Amazon EC2 节点,或者部署到 Fargate 节点,则需要在运行的命令中添加以下标志:
--set region=region-code--set vpcId=vpc-xxxxxxxx
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=cluster-name \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system -
验证控制器是否已安装。
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
四、应用中部署ALB
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.3/guide/ingress/annotations/