帮助改进此页面
想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
使用清单安装 AWS Load Balancer Controller
提示
使用 Amazon EKS 自动模式时,您无需安装或升级联网附加组件。自动模式包含容器组联网和负载均衡功能。
有关更多信息,请参阅 使用 EKS 自动模式实现集群基础设施自动化。
本主题描述如何通过下载和应用 Kubernetes 清单安装控制器。您可以在 GitHub 上查看关于该控制器的完整文档
在以下步骤中,将 example values
替换为您自己的值。
先决条件
在开始使用本教程之前,您必须安装并配置创建和管理 Amazon EKS 集群所需的以下工具和资源。
-
现有 Amazon EKS 集群。要部署一个角色,请参阅开始使用 Amazon EKS。
-
您的集群的现有 AWS Identity and Access Management(IAM)OpenID Connect(OIDC)提供者。要确定您是否已经拥有一个或是否要创建一个,请参阅为集群创建 IAM OIDC 提供商。
-
确保您的 Amazon VPC CNI plugin for Kubernetes、
kube-proxy
、CoreDNS 和 附加组件为服务账户令牌中列出的最低版本。 -
熟悉 AWS Elastic Load Balancing。有关更多信息,请参阅 Elastic Load Balancing 用户指南。
步骤 1:配置 IAM
注意
您只需为
AWS Load Balancer Controller 创建一个角色,每个 AWS 账户一个。检查 IAM 控制台AmazonEKSLoadBalancerControllerRole
。如果此角色存在,则请跳至步骤 2:安装 cert-manager。
注意
以下示例涉及的是
AWS Load Balancer Controller v2.11.0 发行版本。有关所有发行版的更多信息,请参阅 GitHub 上的 AWS 负载均衡器控制器发行版页面
-
下载 AWS Load Balancer Controller 的 IAM 策略,该策略允许负载均衡器代表您调用 AWS API。
-
使用上一步中下载的策略创建一个 IAM 策略。
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
注意
如果您在AWS Management Console中查看策略,则控制台会显示有关 ELB 服务的警告,但不会显示有关 ELB v2 服务的警告。之所以发生这种情况,是因为策略中的某些操作适用于 ELB v2,但不适用于 ELB。您可以忽略有关 ELB 的警告。
步骤 2:安装 cert-manager
使用以下方法之一安装 cert-manager
以将证书配置注入 Webhook。有关更多信息,请参阅 cert-manager 文档中的 Getting Started
我们建议使用 quay.io
容器注册表安装 cert-manager
。如果您的节点无权访问 quay.io
容器注册表,则请使用 Amazon ECR 安装 cert-manager
(见下文)。
步骤 3:安装 AWS Load Balancer Controller
-
下载控制器规范。有关控制器的更多信息,请参阅 GitHub 上的文档
。 curl -Lo v2_11_0_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.11.0/v2_11_0_full.yaml
-
对文件进行以下编辑。
-
如果您已下载
v2_11_0_full.yaml
文件,请运行以下命令以删除清单中的ServiceAccount
部分。如果您不删除此部分,系统将覆盖您在上一步中对服务账户所做的必需注释。如果删除此部分,若您删除了控制器,系统还会保留您在上一步中创建的服务账户。sed -i.bak -e '690,698d' ./v2_11_0_full.yaml
如果您已下载其他文件版本,请在编辑器中打开此文件,然后删除以下行。
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 ---
-
请将
my-cluster
替换为您的集群名称,将文件的Deployment
spec
部分中的your-cluster-name
替换为您的集群名称。sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_11_0_full.yaml
-
如果您的节点无权访问 Amazon EKS Amazon ECR 镜像存储库,则需要提取以下镜像并将其推送到节点有权访问的存储库。有关如何提取、标记和推送镜像到您自己的存储库的更多信息,请参阅 将容器镜像从一个存储库复制到另一个存储库。
public.ecr.aws/eks/aws-load-balancer-controller:v2.11.0
请为清单添加注册表的名称。以下命令假定您的私有存储库名称与源存储库的名称相同,并将您的私有注册表名称添加到文件中。请将
111122223333.dkr.ecr.region-code.amazonaws.com
替换为您的注册表。此行假定您的私有存储库名称与源存储库的名称相同。如果不相同,请将私有注册表名称后面的eks/aws-load-balancer-controller
文本给更改为您的存储库名称。sed -i.bak -e 's|public.ecr.aws/eks/aws-load-balancer-controller|111122223333.dkr.ecr.region-code.amazonaws.com/eks/aws-load-balancer-controller|' ./v2_11_0_full.yaml
-
(只有 Fargate 或受限的 IMDS 才需要此选项)
如果要将控制器部署到限制访问 Amazon EC2 实例元数据服务(IMDS)
的 Amazon EC2 节点,或者部署到 Fargate 节点或 Amazon EKS 混合节点功能,则需要在 - args:
下添加following parameters
。[...] spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb - --aws-vpc-id=vpc-xxxxxxxx - --aws-region=region-code [...]
-
-
应用文件。
kubectl apply -f v2_11_0_full.yaml
-
将
IngressClass
和IngressClassParams
清单下载到您的集群。curl -Lo v2_11_0_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.11.0/v2_11_0_ingclass.yaml
-
将清单应用于集群。
kubectl apply -f v2_11_0_ingclass.yaml
步骤 4:验证控制器是否已安装
-
验证控制器是否已安装。
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
如果使用 Helm 进行部署,则会收到之前的输出结果。如果您使用 Kubernetes 清单进行部署,则只有一个副本。
-
在使用控制器预置AWS资源前,您的集群必须满足特定要求。有关更多信息,请参阅使用 Application Load Balancers 路由应用程序和 HTTP 流量 和使用 Network Load Balancers 路由 TCP 和 UDP 流量。