

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 Helm 的 Install AWS Load Balancer 控制器
<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 自動模式，您無需安裝或升級聯網附加元件。自動模式包括 Pod 聯網和負載平衡功能。  
如需詳細資訊，請參閱[利用 EKS 自動模式自動運作叢集基礎設施](automode.md)。

本主題說明如何使用 Helm、Kubernetes 套件管理員 和 安裝 AWS Load Balancer控制器`eksctl`。已使用預設選項安裝控制器。如需有關控制器的詳細資訊，包括使用註釋設定控制器的詳細資訊，請參閱 GitHub 上的[AWS Load Balancer 控制器文件](https://kubernetes-sigs.github.io/aws-load-balancer-controller/)。

在下列步驟中，使用您自己的值取代範例值。

## 先決條件
<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)中列出的最低版本。
+ 了解 AWS Elastic Load Balancing概念。如需詳細資訊，請參閱《[Elastic Load Balancing 使用者指南](https://docs.aws.amazon.com/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`) 可以在相同 AWS 帳戶中的多個 EKS 叢集之間重複使用。
+ 如果您要在最初建立角色 (`AmazonEKSLoadBalancerControllerRole`) 的相同叢集上安裝控制器，請在驗證角色存在後，前往[步驟 2：安裝 Load Balancer 控制器](#lbc-helm-install)。
+ 如果您使用服務帳戶的 IAM 角色 (IRSA)，則必須為每個叢集設定 IRSA，而且角色信任政策中的 OpenID Connect (OIDC) 提供商 ARN 專屬於每個 EKS 叢集。此外，如果您要在具有現有 `AmazonEKSLoadBalancerControllerRole` 的新叢集上安裝控制器，請更新角色的信任政策，以包含新叢集的 OIDC 提供商，並使用適當的角色註釋來建立新的服務帳戶。若要判定您是否已經擁有 OIDC 提供商，或是要建立一個，則請參閱 [為您的叢集建立 IAM OIDC 身分提供者](enable-iam-roles-for-service-accounts.md)。

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

下列步驟參考 AWS Load Balancer控制器 v**2.14.1 **發行版本。如需有關所有發行版本的詳細資訊，請參閱 GitHub 上的 [AWS Load Balancer 控制器發行頁面](https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/)。

1. 下載 AWS Load Balancer控制器的 IAM 政策，允許其代表您呼叫 AWS APIs。

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy.json
   ```
   + 如果您是非標準 AWS 分割區，例如政府或中國區域，[請檢閱 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
   ```
**注意**  
如果您在 中檢視政策 AWS 管理主控台，主控台會顯示 **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: iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \
       --override-existing-serviceaccounts \
       --region <aws-region-code> \
       --approve
   ```

## 步驟 2：Install AWS Load Balancer 控制器
<a name="lbc-helm-install"></a>

1. 新增 `eks-charts` Helm Chart 儲存庫。 會在 GitHub 上 AWS 維護[此儲存庫](https://github.com/aws/eks-charts)。

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

1. 更新您的本機儲存庫，以確定您擁有最新的圖表。

   ```
   helm repo update eks
   ```

1. 安裝 AWS Load Balancer控制器。

   如果您要將控制器部署到[限制存取 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 Chart 的詳細資訊，請參閱 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
     ```

**重要**  
部署的圖表不會自動接收安全更新。當圖表可用時，您需要手動升級到較新的圖表。升級時，請將先前命令中的{{安裝}}變更為 `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. 使用控制器佈建 AWS 資源之前，您的叢集必須符合特定需求。如需詳細資訊，請參閱[透過 Application Load Balancer 路由應用程式與 HTTP 流量](alb-ingress.md)及[透過 Network Load Balancer 路由 TCP 與 UDP 流量](network-load-balancing.md)。