设置 Amazon NLB 网络负载均衡器

本文介绍了如何在 Amazon EC2 服务中设置 Amazon NLB 网络负载均衡器,用于将流量转发到 EC2 上的多个实例中。

这些示例中,负载均衡器将流量转发到三个 Rancher Server 节点。如果 Rancher 安装在 RKE Kubernetes 集群上,则需要三个节点。如果 Rancher 安装在 K3s Kubernetes 集群上,则只需要两个节点。

本文介绍的只是配置负载均衡器的其中一种方式。其他负载均衡器如传统负载路由器(Classic Load Balancer)和应用负载路由器(Application Load Balancer),也可以将流量转发到 Rancher Server 节点。

Rancher 仅支持使用 Amazon NLB 以 TCP 模式终止 443 端口的流量,而不支持 TLS 模式。这试因为在 NLB 终止时,NLB 不会将正确的标头注入请求中。如果你想使用由 Amazon Certificate Manager (ACM) 托管的证书,请使用 ALB。

要求

你已在 EC2 中创建了 Linux 实例。此外,负载均衡器会把流量转发到这些节点。

1. 创建目标组

首先,为 TCP 协议创建两个目标组,其中一个使用 TCP 端口 443,另一个使用 TCP 端口 80(用于重定向到 TCP 端口 443)。然后,将 Linux 节点添加到这些组中。

配置 NLB 的第一个步骤是创建两个目标组。一般来说,只需要端口 443 就可以访问 Rancher。但是,由于端口 80 的流量会被自动重定向到端口 443,因此,你也可以为端口 80 也添加一个监听器。

不管使用的是 NGINX Ingress 还是 Traefik Ingress Controller,Ingress 都应该将端口 80 的流量重定向到端口 443。以下为操作步骤:

  1. 登录到 Amazon AWS 控制台。确保选择的区域是你创建 EC2 实例 (Linux 节点)的区域。

  2. 选择服务 > EC2,找到负载均衡器并打开目标组

  3. 单击创建目标组,然后创建用于 TCP 端口 443 的第一个目标组。

不同 Ingress 的健康检查处理方法不同。详情请参阅本节

目标组(TCP 端口 443)

根据下表配置第一个目标组:

选项 设置

目标组名称

rancher-tcp-443

目标类型

instance

协议

TCP

端口

443

VPC

选择 VPC

健康检查设置:

选项 设置

协议

TCP

端口

override,80

健康阈值

3

不正常阈值

3

超时

6 秒

间隔

10 秒

单击创建目标组,然后创建用于 TCP 端口 80 的第二个目标组。

目标组(TCP 端口 80)

根据下表配置第二个目标组:

选项 设置

目标组名称

rancher-tcp-80

目标类型

instance

协议

TCP

端口

80

VPC

选择 VPC

健康检查设置:

选项 设置

协议

TCP

端口

traffic port

健康阈值

3

不正常阈值

3

超时

6 秒

间隔

10 秒

2. 注册目标

接下来,将 Linux 节点添加到两个目标组中。

选择名为 rancher-tcp-443 的目标组,点击目标选项卡并选择编辑

edit targetgroup 443

选择你要添加的实例(Linux 节点),然后单击添加到已注册


add targets targetgroup 443
Figure 1. 将目标添加到目标组 TCP 端口 443

added targets targetgroup 443
Figure 2. 已将目标添加到目标组 TCP 端口 443

添加实例后,单击右下方的保存

rancher-tcp-443 替换为 rancher-tcp-80,然后重复上述步骤。你需要将相同的实例作为目标添加到此目标组。

3. 创建 NLB

使用 Amazon 的向导创建网络负载均衡器。在这个过程中,你需要添加在 1. 创建目标组中创建的目标组。

  1. 在网页浏览器中,导航到 Amazon EC2 控制台

  2. 在导航栏中,选择负载均衡 > 负载均衡器

  3. 单击创建负载均衡器

  4. 选择网络负载均衡器并单击创建。然后,填写每个表格。

步骤 1:配置负载均衡器

在表单中设置以下字段:

  • 名称rancher

  • Schemeinternalinternet-facing。实例和 VPC 的配置决定了 NLB 的 Scheme。如果你的实例没有绑定公共 IP,或者你只需要通过内网访问 Rancher,请将 NLB 的 Scheme 设置为 internal 而不是 internet-facing

  • 监听器:负载均衡器协议需要是 TCP,而且负载均衡器端口需要设为 443

  • 可用区:选择你的VPC可用区

步骤 2:配置路由

  1. 目标组下拉列表中,选择 现有目标组

  2. 名称下拉列表中,选择 rancher-tcp-443

  3. 打开高级健康检查设置,并将间隔设为 10 秒

步骤 3:注册目标

由于你已经在先前步骤注册了目标,因此你只需单击 下一步:审核

步骤 4:审核

检查负载均衡器信息无误后,单击创建

AWS 完成 NLB 创建后,单击关闭

4. 为 TCP 端口 80 向 NLB 添加监听器

  1. 选择新创建的 NLB 并选择监听器选项卡。

  2. 单击添加监听器

  3. 使用 TCP:80 作为协议:端口

  4. 单击添加操作并选择转发到..

  5. 转发到下拉列表中,选择 rancher-tcp-80

  6. 单击右上角的保存

NGINX Ingress 和 Traefik Ingress 的健康检查路径

K3s 和 RKE Kubernetes 集群使用的默认 Ingress 不同,因此对应的健康检查方式也不同。

RKE Kubernetes 集群默认使用 NGINX Ingress,而 K3s Kubernetes 集群默认使用 Traefik Ingress。

  • Traefik:默认健康检查路径是 /ping。默认情况下,不管主机如何,/ping 总是匹配,而且 Traefik 自身总会响应。

  • NGINX Ingress:NGINX Ingress Controller 的默认后端有一个 /healthz 端点。默认情况下,不管主机如何,/healthz 总是匹配,而且 ingress-nginx 自身总会响应。

想要精确模拟健康检查,最好是使用 Host 标头(Rancher hostname)加上 /ping/healthz(分别对应 K3s 和 RKE 集群)来获取 Rancher Pod 的响应,而不是 Ingress 的响应。