在AWS EKS中service
默认的LoadBalance
模式是CLB
。
如果需要使用ALB
或NLB
则需要安装AWS Load Balancer Controller
安装AWS负载均衡器控制器前需要为集群创建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-charts
c. 更新您的本地存储库,以确保您拥有最新的图表。
helm repo update
d. 安装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
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.3/guide/ingress/annotations/
AWS Load Balancer Controller: https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.3/