

 **帮助改进此页面** 

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

# 从已弃用的 ALB 入口控制器迁移应用程序
<a name="lbc-remove"></a>

本主题介绍如何从已弃用的控制器版本迁移。更具体地说，是介绍如何移除 AWS 负载均衡器控制器的已弃用版本。
+ 已弃用的版本无法升级。必须先将其移除，然后再安装当前版本。
+ 已弃用的版本包括：
  +  适用于 Kubernetes 的 AWS ALB 入口控制器（简称“入口控制器”），是 AWS 负载均衡器控制器的前身。
  + 任何 `0.1.x ` 版本的 AWS 负载均衡器控制器

## 移除已弃用的控制器版本
<a name="lbc-remove-desc"></a>

**注意**  
您可能已经使用 Helm 安装了已弃用的版本，或者使用 Kubernetes 清单手动安装了该版本。使用原来安装它的工具完成该过程。

1. 如果您安装了 `incubator/aws-alb-ingress-controller` Helm 图表，请将其卸载。

   ```
   helm delete aws-alb-ingress-controller -n kube-system
   ```

1. 如果安装了 `eks-charts/aws-load-balancer-controller` 图表的 `0.1.x ` 版本，请将其卸载。由于与 Webhook API 版本不兼容，从 `0.1.x ` 升级到版本 `1.0.0` 不起作用。

   ```
   helm delete aws-load-balancer-controller -n kube-system
   ```

1. 检查当前是否安装了该控制器。

   ```
   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
   ```

1. 输入以下命令以删除控制器。

   ```
   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
   ```

## 迁移到 AWS 负载均衡器控制器
<a name="lbc-migrate"></a>

要从适用于 Kubernetes 的 ALB 入口控制器迁移到 AWS 负载均衡器控制器，您需要：

1. 移除 ALB 入口控制器（请参阅上述内容）。

1.  [安装AWS负载均衡器控制器。](aws-load-balancer-controller.md#lbc-overview)

1. 向 AWS 负载均衡器控制器使用的 IAM 角色添加其他策略。此策略允许 LBC 管理由适用于 Kubernetes 的 ALB 入口控制器创建的资源。

1. 下载该 IAM 策略。此策略允许 AWS 负载均衡器控制器管理由适用于 Kubernetes 的 ALB 入口控制器创建的资源。您还可以[查看策略](https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_v1_to_v2_additional.json)。

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy_v1_to_v2_additional.json
   ```

1. 如果您的集群位于 AWS GovCloud（美国东部）或 AWS GovCloud（美国西部）AWS 区域，则将 ` arn:aws: ` 替换为 `arn:aws-us-gov:`。

   ```
   sed -i.bak -e 's|arn:aws:|arn:aws-us-gov:|' iam_policy_v1_to_v2_additional.json
   ```

1. 创建 IAM 策略并记下返回的 ARN。

   ```
   aws iam create-policy \
     --policy-name AWSLoadBalancerControllerAdditionalIAMPolicy \
     --policy-document file://iam_policy_v1_to_v2_additional.json
   ```

1. 将 IAM 策略附加到 AWS 负载均衡器控制器使用的 IAM 角色。将 *your-role-name* 替换为角色的名称，例如 `AmazonEKSLoadBalancerControllerRole`。

   如果您使用 `eksctl` 创建该角色，请找到已创建的角色名称，打开 [AWS CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)并选择 **eksctl-*my-cluster*-addon-iamserviceaccount-kube-system-aws-load-balancer-controller** 堆栈。选择**资源**选项卡。角色名称位于 **Physical ID（物理 ID）**列。

   ```
   aws iam attach-role-policy \
     --role-name your-role-name \
     --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerAdditionalIAMPolicy
   ```