

 **帮助改进此页面** 

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

# 使用 AWS 负载均衡器控制器路由互联网流量
<a name="aws-load-balancer-controller"></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 讲习会。

AWS负载均衡器控制器管理适用于 Kubernetes 集群的 AWS Elastic Load Balancer。您可以使用控制器将您的集群应用程序公开到互联网。控制器预调配指向集群服务或入口资源的 AWS 负载均衡器。换句话说，控制器创建一个指向集群中多个容器组（pod）的 IP 地址或 DNS 名称。

![\[架构示意图。互联网用户流量流向 Amazon 负载均衡器的示意图。Amazon 负载均衡器将流量分配到集群中的容器组。\]](http://docs.aws.amazon.com/zh_cn/eks/latest/userguide/images/lbc-overview.png)


控制器会监控 Kubernetes 入口或服务资源。作为响应，它会创建相应的 AWS 弹性负载均衡资源。您可以通过对 Kubernetes 资源应用注释来配置负载均衡器的特定行为。例如，您可以使用注释将 AWS 安全组附加到负载均衡器。

此控制器预置以下资源：

 **Kubernetes `Ingress`**   
LBC 会在您创建 Kubernetes `Ingress` 时创建 [AWS 应用程序负载均衡器（ALB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)。[查看可以应用于入口资源的注释。](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/)

 **`LoadBalancer` 类型的 Kubernetes 服务**   
LBC 将在您创建 `LoadBalancer` 类型的 Kubernetes 服务时创建 [AWS 网络负载均衡器（NLB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)。[查看可以应用于服务资源的注释。](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/)  
在过去，*实例*目标使用 Kubernetes 网络负载均衡器，而 *IP* 目标使用 LBC。现在，有了 AWS 负载均衡器控制器版本 `2.3.0` 或更高版本，您可以使用任一目标类型创建 NLB。有关 NLB 目标类型的更多信息，请参阅 Network Load Balancer 用户指南中的[目标类型](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#target-type)。

控制器是托管在 GitHub 上的[开源项目](https://github.com/kubernetes-sigs/aws-load-balancer-controller)。

在部署控制器之前，我们建议您查看[使用应用程序负载均衡器路由应用程序和 HTTP 流量](alb-ingress.md)和[使用网络负载均衡器路由 TCP 和 UDP 流量](network-load-balancing.md)中的先决条件和注意事项。在这些主题中，您将部署包含 AWS 负载均衡器的示例应用程序。

 **Kubernetes `Gateway` API**   
对于 AWS 负载均衡器控制器 `2.14.0` 版本或更高版本，LBC 会在您创建 Kubernetes `Gateway` 时创建 [AWS 应用程序负载均衡器（ALB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)。与 Ingress 相比，Kubernetes 网关标准化的配置更多，前者需要为许多常用选项自定义注释。[查看可以应用于网关资源的配置。](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/gateway/gateway/)有关 `Gateway` API 的更多信息，请参阅 Kubernetes 文档中的 [Gateway API](https://kubernetes.io/docs/concepts/services-networking/gateway/)。

## 安装控制器
<a name="lbc-overview"></a>

可以按照以下过程之一安装 AWS 负载均衡器控制器：
+ 如果您不熟悉 Amazon EKS，我们建议您使用 Helm 进行安装，因为它可以简化 AWS 负载均衡器控制器安装。有关更多信息，请参阅 [使用 Helm 安装 AWS 负载均衡器控制器](lbc-helm.md)。
+ 对于高级配置，例如对公有容器注册表具有有限网络访问权限的集群，请使用 Kubernetes 清单。有关更多信息，请参阅 [使用清单安装 AWS 负载均衡器控制器](lbc-manifest.md)。

## 从已弃用的控制器版本迁移
<a name="lbc-deprecated"></a>
+ 如果您安装了已弃用的 AWS 负载均衡器控制器版本，请参阅[从已弃用的 ALB 入口控制器迁移应用程序](lbc-remove.md)。
+ 已弃用的版本无法升级。必须将其移除并安装最新版本的 AWS 负载均衡器控制器。
+ 已弃用的版本包括：
  +  适用于 Kubernetes 的 AWS ALB 入口控制器（简称“入口控制器”），是 AWS 负载均衡器控制器的前身。
  + 任何 `0.1.x ` 版本的 AWS 负载均衡器控制器

## 旧版云提供商
<a name="lbc-legacy"></a>

Kubernetes 包括 AWS 的旧版云提供商。旧版云提供商能够预置 AWS 负载均衡器，这与 AWS 负载均衡器控制器类似。传统云提供商创建经典负载均衡器。如果不安装 AWS 负载均衡器控制器，则 Kubernetes 将默认设置为使用旧版云提供商。您应该安装 AWS 负载均衡器控制器，避免使用旧版云提供商。

**重要**  
在版本 2.5 及更高版本中，AWS 负载均衡器控制器成为 Kubernetes *服务*资源的默认控制器（包含 `type: LoadBalancer`），并为每个服务创建了 AWS 网络负载均衡器（NLB）。为此它将为服务创建一个变异的 Webhook，对于新的 `type: LoadBalancer` 服务，后者会将 `spec.loadBalancerClass` 字段设置为 `service.k8s.aws/nlb`。您可以关闭此功能，然后将 Helm 图表值 `enableServiceMutatorWebhook` 设置为 `false`，从而恢复将 [传统云提供商](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider) 作为默认控制器。除非您关闭此功能，否则集群不会为您的服务预置新的经典负载均衡器。现有的经典负载均衡器将继续运行。