安装 AWS Load Balancer Controller 附加组件
AWS负载均衡器控制器管理适用于 Kubernetes 集群的 AWS Elastic Load Balancer。此控制器预置以下资源。
-
当您创建 Kubernetes
Ingress
时预置 AWS Application Load Balancer (ALB)。 -
当您创建
LoadBalancer
类型的 Kubernetes 服务时的 AWS Network Load Balancer (NLB)。在过去,实例目标使用 Kubernetes 网络负载均衡器,而 IP 目标使用 AWS Load Balancer Controller。使用 AWS Load Balancer Controller 2.3.0 版或更高版本,您可以使用任一目标类型创建 NLB。有关 NLB 目标类型的更多信息,请参阅 Network Load Balancer 用户指南中的目标类型。
AWS Load Balancer Controller 以前称为 AWS ALB Ingress Controller。它是托管在 GitHub 上的一个开源项目
先决条件
-
现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。要使用控制器的 2.4.0 版本(本主题中使用的版本),您的集群必须为 1.19 版或更高版本。如果您的集群早于 1.19 版本,则我们建议使用 2.3.1 版本。
-
集群的现有 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) 提供程序。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商。
将AWS负载均衡器控制器部署到 Amazon EKS 集群
在以下步骤中,将
替换为您自己的值:。如果您的集群早于 1.19 版本,请将 example
values
2.4.0
的所有实例更改为 2.3.1
,并将 v2_4_0_full.yaml
的所有实例更改为 v2_3_1_full.yaml
。
-
创建一个 IAM 策略。
-
下载AWS负载均衡器控制器的 IAM 策略,该策略允许负载均衡器代表您调用 AWS API。您可以查看 GitHub 上的策略文档
。 curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.0/docs/install/iam_policy.json
-
使用上一步中下载的策略创建一个 IAM 策略。
aws iam create-policy \ --policy-name
AWSLoadBalancerControllerIAMPolicy
\ --policy-document file://iam_policy.json注意 如果您在 AWS Management Console 中查看策略,则可能会看到 ELB 的警告。您可以安全地忽略这些操作,因为有些操作仅适用于 ELB v2。您不会看到 ELB v2 的警告。
-
-
使用
eksctl
或 AWS CLI 和kubectl
创建 IAM 角色并注释AWS负载均衡器控制器的kube-system
命名空间中名为aws-load-balancer-controller
的 Kubernetes 服务账户。 如果您已安装了适用于 Kubernetes 的 AWS ALB 入口控制器,请将其卸载。AWS负载均衡控制器取代适用于 Kubernetes 的 AWS ALB 入口控制器的功能。
-
检查当前是否安装了该控制器。
kubectl get deployment -n kube-system alb-ingress-controller
这是未安装控制器情况下的输出。跳至安装控制器步骤。
Error from server (NotFound): deployments.apps "alb-ingress-controller" not found
这是安装了控制器情况下的输出。
NAME READY UP-TO-DATE AVAILABLE AGE alb-ingress-controller 1/1 1 1 122d
-
输入以下命令以删除控制器。
kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/alb-ingress-controller.yaml kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml
-
将以下 IAM 策略添加到在前一步骤中创建的 IAM 角色。该策略允许AWS负载均衡器控制器访问由适用于 Kubernetes 的 ALB 入口控制器创建的资源。
-
下载该 IAM 策略。您还可以查看策略
。 curl -o iam_policy_v1_to_v2_additional.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.0/docs/install/iam_policy_v1_to_v2_additional.json
-
创建 IAM 策略并记下返回的 ARN。
aws iam create-policy \ --policy-name
AWSLoadBalancerControllerAdditionalIAMPolicy
\ --policy-document file://iam_policy_v1_to_v2_additional.json -
将您创建的 IAM 策略附加到您在前一步骤中创建的 IAM 角色。将
替换为角色的名称。如果您使用your-role-name
eksctl
创建该角色,请找到已创建的角色名称,打开 AWS CloudFormation 控制台并选择 eksctl- your-cluster-name
-addon-iamserviceaccount-kube-system-aws-load-balancer-controller 堆栈。选择 Resources 选项卡。角色名称位于 Physical ID(物理 ID)列。如果您使用 AWS Management Console 来创建角色,那么角色名称就是您命名的名称,例如
。AmazonEKSLoadBalancerControllerRole
aws iam attach-role-policy \ --role-name
your-role name
\ --policy-arn arn:aws:iam::111122223333
:policy/AWSLoadBalancerControllerAdditionalIAMPolicy
-
-
-
使用 Helm V3 或更高版本或通过应用 Kubernetes 清单来安装 AWS Load Balancer Controller。如果要在 Fargate 上部署控制器,请使用 Helm 程序,因为它不依赖于
cert-manager
。 -
验证控制器是否已安装。
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资源前,您的集群必须满足特定要求。有关更多信息,请参阅 Amazon EKS 上的应用程序负载均衡 和 Amazon EKS 上的网络负载均衡。