

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 使用 Helm 安装 Amazon 负载均衡器控制器
<a name="lbc-helm"></a>

**提示**  
 [注册参加](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el)即将举办的 Amazon EKS 讲习会。

**提示**  
使用 Amazon EKS 自动模式时，您无需安装或升级联网附加组件。自动模式包含容器组联网和负载均衡功能。  
有关更多信息，请参阅 [使用 EKS 自动模式实现集群基础设施自动化](automode.md)。

本主题介绍如何使用 Helm（Kubernetes 的程序包管理器）和 `eksctl` 安装 Amazon 负载均衡器控制器。控制器安装了默认的选项。有关控制器的更多信息，包括使用注释对其进行配置的详细信息，请参阅 GitHub 上的 [Amazon Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/) 文档。

在以下步骤中，将 example values 替换为您自己的值。

## 先决条件
<a name="lbc-prereqs"></a>

在开始本教程之前，请完成以下步骤：
+ 创建一个 Amazon EKS 集群。要创建该文件，请参阅 [开始使用 Amazon EKS](getting-started.md)。
+ 在本地计算机上安装 [Helm](https://helm.sh/docs/helm/helm_install/)。
+ 确保适用于 Kubernetes 的 Amazon VPC CNI 插件、`kube-proxy` 和 CoreDNS 附加组件为[服务账户令牌](service-accounts.md#boundserviceaccounttoken-validated-add-on-versions)中列出的最低版本。
+ 了解 Amazon Elastic Load Balancing 概念。有关更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.amazonaws.cn/elasticloadbalancing/latest/userguide/)。
+ 了解 Kubernetes [服务](https://kubernetes.io/docs/concepts/services-networking/service/)和[入口](https://kubernetes.io/docs/concepts/services-networking/ingress/)资源。

### 注意事项
<a name="lbc-considerations"></a>

在继续执行本页面的配置步骤之前，请注意以下事项：
+ IAM 策略和角色 (`AmazonEKSLoadBalancerControllerRole`) 可以在同一 Amazon 账户中的多个 EKS 集群中重复使用。
+ 如果要在最初创建角色 (`AmazonEKSLoadBalancerControllerRole`) 的同一集群上安装控制器，请先确认角色存在，然后转到[步骤 2：安装负载均衡器控制器](#lbc-helm-install)。
+ 如果使用的是服务账户的 IAM 角色（IRSA），则必须为每个集群设置 IRSA，并且角色信任策略中的 OpenID Connect（OIDC）提供者 ARN 应特定于每个 EKS 集群。此外，如果要在具有现有 `AmazonEKSLoadBalancerControllerRole` 的新集群上安装控制器，请更新该角色的信任策略以包含新集群的 OIDC 提供者，并通过适当的角色注释创建一个新的服务账户。要确定是否已经拥有 OIDC 提供者或者要创建一个 OIDC 提供者，请参阅[为集群创建 IAM OIDC 提供商](enable-iam-roles-for-service-accounts.md)。

## 步骤 1：使用 `eksctl` 创建 IAM 角色
<a name="lbc-helm-iam"></a>

以下步骤参考 Amazon 负载均衡器控制器 **v2.14.1** 发行版。有关所有发行版的更多信息，请参阅 GitHub 上的 [Amazon Load Balancer Controller Release](https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/) 页面。

1. 下载Amazon负载均衡器控制器的 IAM 策略，该策略允许负载均衡器代表您调用 Amazon API。

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy.json
   ```
   + 对于政府区域或中国区域等非标准 Amazon 分区，[请查看 GitHub 上的政策](https://github.com/kubernetes-sigs/aws-load-balancer-controller/tree/main/docs/install)并下载适用于您所在区域的相应政策。

1. 使用上一步中下载的策略创建一个 IAM 策略。

   ```
   aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicy \
       --policy-document file://iam_policy.json
   ```
**注意**  
如果您在Amazon Web Services 管理控制台中查看策略，则控制台会显示有关 **ELB** 服务的警告，但不会显示有关 **ELB v2** 服务的警告。之所以发生这种情况，是因为策略中的某些操作适用于 **ELB v2**，但不适用于 **ELB**。您可以忽略有关 **ELB** 的警告。

1. 替换集群名称、区域代码和账户 ID 的值。

   ```
   eksctl create iamserviceaccount \
       --cluster=<cluster-name> \
       --namespace=kube-system \
       --name=aws-load-balancer-controller \
       --attach-policy-arn=arn:aws-cn:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \
       --override-existing-serviceaccounts \
       --region <aws-region-code> \
       --approve
   ```

## 步骤 2：安装 Amazon 负载均衡器控制器
<a name="lbc-helm-install"></a>

1. 添加 `eks-charts` Helm 图表存储库。Amazon 在 GitHub 上维护[此存储库](https://github.com/aws/eks-charts)。

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

1. 更新您的本地存储库，以确保您拥有最新的图表。

   ```
   helm repo update eks
   ```

1. 安装Amazon负载均衡器控制器。

   如果要将控制器部署到[限制访问 Amazon EC2 实例元数据服务（IMDS）](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node) 的 Amazon EC2 节点，或者部署到 Fargate 节点或 Amazon EKS 混合节点功能，则需要在以下 `helm` 命令中添加以下标志：
   +  `--set region=region-code ` 
   +  `--set vpcId=vpc-xxxxxxxx ` 

     将 *my-cluster* 替换为您的集群的名称。在以下命令中，`aws-load-balancer-controller` 是您在上一步中创建的 Kubernetes 服务账户。

     有关配置 Helm 图表的更多信息，请参阅 GitHub 上的 [values.yaml](https://github.com/aws/eks-charts/blob/master/stable/aws-load-balancer-controller/values.yaml)。

     ```
     helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
       -n kube-system \
       --set clusterName=my-cluster \
       --set serviceAccount.create=false \
       --set serviceAccount.name=aws-load-balancer-controller \
       --version 1.14.0
     ```

**重要**  
已部署的图表不会自动接收安全更新。当新图表可用时，您需要手动升级到新图表。升级时，在上一个命令中将 *install* 更改为 `upgrade`。

`helm install` 命令会自动安装控制器的自定义资源定义（CRD）。`helm upgrade` 命令不会。如果您使用 `helm upgrade,`，则必须手动安装 CRD。运行以下命令来安装 CRD：

```
wget https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml
kubectl apply -f crds.yaml
```

## 步骤 3：验证控制器是否已安装
<a name="lbc-helm-verify"></a>

1. 验证控制器是否已安装。

   ```
   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 清单进行部署，则只有一个副本。

1. 在使用控制器预置Amazon资源前，您的集群必须满足特定要求。有关更多信息，请参阅[使用应用程序负载均衡器路由应用程序和 HTTP 流量](alb-ingress.md)和[使用网络负载均衡器路由 TCP 和 UDP 流量](network-load-balancing.md)。