Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何通过 AWS 负载均衡器控制器在 Amazon EKS 的 Amazon EC2 节点组上设置应用程序负载均衡器?
我想通过 Amazon Elastic Kubernetes Service(Amazon EKS)中的 Amazon Elastic Compute Cloud(Amazon EC2)节点组上通过 AWS 负载均衡器控制器设置应用程序负载均衡器。
概述
将 AWS 负载均衡器控制器连接到以下任一 AWS 服务端点:
- AWS Identity and Access Management(IAM)
- Amazon EC2
- AWS Certificate Manager(ACM)
- 弹性负载均衡(ELB)
- Amazon Cognito
- AWS WAF
- AWS Shield
要使 AWS 负载均衡器控制器正常工作,您必须有出站互联网连接。有关更多信息,请参阅如何为 Amazon EKS 集群配置我得子网?
要在 AWS Fargate 上部署 AWS 负载均衡器控制器,请参阅如何在 Amazon EKS 集群上为 Fargate 设置 AWS 负载均衡器控制器并部署 2048 游戏?
解决方案
标记您的子网以允许自动发现
在您的 Amazon EKS 集群中Amazon Virtual Private Cloud(Amazon VPC)子网。这允许您的 AWS 负载均衡器控制器在您创建应用程序负载均衡器资源时自动发现子网。
对于公有应用程序负载均衡器,您的集群的 VPC 中必须至少有两个带有以下标签的公有子网:
kubernetes.io/role/elb
对于内部应用程序负载均衡器,您的集群的 VPC 中必须至少有两个带有以下标签的私有子网:
kubernetes.io/role/internal-elb
为您的集群创建 OIDC 身份提供商
使用 eksctl 或 AWS 管理控制台创建 OpenID Connect (OIDC) 身份提供商,用于服务账户的 IAM 角色。
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI。
或者,使用 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 替换为您的集群名称,将 region-name替换为您的 AWS 区域,将 ca-thumbrint 替换为根 CA 证书的指纹。您可以通过oidc.eks.region-name.amazonaws.com 获得您的集群使用的根 CA 证书的指纹。
为 AWS 负载均衡器控制器创建 IAM 策略
您创建的 Amazon EKS 策略允许 AWS 负载均衡器控制器调用 AWS API。当您授予对 AWS API 的访问权限时,最佳做法是为服务账户使用 AWS IAM 角色。
-
从 GitHub 下载适用于 AWS 负载均衡器控制器的 IAM 政策。根据您的配置,运行以下命令之一:
除中国以外的所有地区: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
中国北京和宁夏地区:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
-
要为您的 Worker 节点实例配置文件创建名为 AWSloadBalancerControllerIAMPolicy 的 IAM 策略,请运行以下命令:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json
-
记下输出中返回的策略的 ARN。
-
使用现有的 IAM 角色,或为 AWS 负载均衡器控制器创建新的 IAM 角色。
**注意:**要使用 eksctl 创建 IAM 角色,请将 —attach-policy-arn 参数与 AWSloadBalancerControllerIAMPolicy IAM 策略的 ARN 一起使用。 -
要将 ** AWSloadBalancerControllerIAMPolicy** 附加到 IAM 角色,请运行以下命令:
aws iam attach-role-policy \--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --role-name role-name
**注意:**将 111122223333 替换为您的 AWS 账户 ID,将 role-name 替换为您的 IAM 角色名称。
部署 AWS 负载均衡器控制器
-
安装 cert-manager 这样您就可以将证书配置注入到网络挂钩中。使用 Kubernetes 1.16 或更高版本运行以下命令:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
-
在您从 GitHub 下载的清单文件中,运行以下命令:
curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_6_2_full.yaml
**注意:**将 $VERSION 替换为要部署的 AWS 负载均衡器控制器版本,并修改文件名,例如 v2.6.2 的 v2_6_2_2_full.yaml。有关更多信息,请参阅 GitHub The Kubernetes repository。
-
编辑集群的 cluster-name。例如:
spec: containers: - args: - --cluster-name=your-cluster-name # edit the cluster name - --ingress-class=alb
-
仅更新文件的 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
**注意:**将 111122223333 替换为您的账户 ID,将 role-name 替换为您的 IAM 角色名称。
-
要部署 AWS 负载均衡器控制器,请运行以下命令:
kubectl apply -f ingress-controller.yaml
部署示例应用程序来测试 AWS 负载均衡器控制器
部署示例应用程序以验证 AWS 负载均衡器控制器是否因为 Ingress 对象而创建了公有应用程序负载均衡器。
- 将部署名为 2048 的游戏作为示例应用程序,请运行以下命令:
**注意:**将 $VERSION 替换为要部署的 AWS 负载均衡器控制器的版本(来自 GitHub 网站 的 Kubernetes SIG)。kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
- 要验证 Ingress 资源是否已创建,请等待几分钟,然后运行以下命令:
您收到的输出结果类似于以下示例:kubectl get ingress/ingress-2048 -n game-2048
NAME CLASS HOSTS ADDRESS PORTS AGEingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com 80 2m32s
- 如果几分钟之后 Ingress 还未创建,请运行以下命令,查看 AWS 负载均衡器控制器日志:
**注意:**AWS 负载均衡器控制器日志经常显示错误消息,以帮助您解决部署问题。kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
- 要查看示例应用程序,请打开 Web 浏览器,然后转到步骤 2 的输出中的 URL 地址。
- 要清理示例应用程序,请运行以下命令:
**注意:**将 $VERSION 替换为要部署的 AWS 负载均衡器控制器的版本(来自 GitHub 网站 的 Kubernetes SIG)。kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
相关信息

相关内容
- AWS 官方已更新 8 个月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前