View a markdown version of this page

Amazon EKS 混合节点功能网关操作 - Amazon EKS

帮助改进此页面

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

Amazon EKS 混合节点功能网关操作

本页介绍了 Amazon EKS 混合节点功能网关的日常操作,包括高可用性、失效转移行为、监控、扩展和 VXLAN 隧道生命周期。有关安装说明,请参阅开始使用 EKS 混合节点功能的网关

高可用性和失效转移

混合节点网关使用主动-备用模式,并采用基于 Kubernetes Lease 的主节点选举。通过容器组(pod)反亲和性,强制两个网关容器组(pod)在单独的 EC2 节点上运行。两个容器组(pod)在启动时都会创建一个 VXLAN 接口,并运行一个节点协调程序,用于维护所有混合节点的 VTEP 条目。只有主节点容器组(pod)管理 VPC 路由表和 CiliumVTEPConfig CRD。备用容器组(pod)已拥有完整的隧道条目,因而始终可以在失效转移发生后的 3 – 5 秒内转发流量。

失效转移序列

当活动网关实例出现故障时,将执行以下序列:

  1. 备用容器组(pod)检测到主节点租约已到期。

  2. 备用容器组(pod)获取租约并成为新主节点。

  3. 新主节点运行主节点设置序列:

    • 更新 VPC 路由表条目,将混合容器组(pod)CIDR 指向新主节点的主 ENI。

    • 使用新主节点的节点 IP 和 VXLAN MAC 地址更新 CiliumVTEPConfig 自定义资源。

  4. 流量恢复流经新主节点。

由于两个容器组(pod)始终维护 VXLAN 接口和 VTEP 条目,新主节点在失效转移期间无需重新创建 VXLAN 接口或对隧道条目重新编程。只需更新 VPC 路由表和 CiliumVTEPConfig

预期的失效转移时间约为 3 – 5 秒。在失效转移期间,VPC 与混合容器组(pod)之间的流量会中断。

可用区建议

将网关节点分布在两个可用区,这样某个可用区出现故障就不会同时影响主节点和备用节点。使用 EKS 自动模式时,在 NodeClass 中配置跨多个可用区的子网选择器。对于托管节点组或自行管理的节点,在标记节点时选择不同可用区中的节点。

注意

网关与 VPC 中其他资源之间的跨可用区流量会产生标准的 AWS 跨可用区数据传输费用。

主节点选举参数

默认主节点选举参数针对快速失效转移进行了调优:

参数 默认值 说明

--leader-election-lease-duration

3s

主节点停止续订后,非主节点在尝试获取租约之前的等待时间。

--leader-election-renew-deadline

2s

主节点在放弃之前尝试续订租约的时间。

--leader-election-retry-period

1s

候选节点重试获取租约的频率。

降低这些值可以缩短失效转移时间,但会增加在网络分区情况下出现虚假故障转移的风险。对于大多数部署,默认值是适当的。有关更多信息,请参阅 Amazon EKS 混合节点功能网关配置参考

VPC 路由表管理

网关管理 VPC 路由表条目,以便发往混合容器组(pod)CIDR 的流量能够到达活动网关实例。

路由管理方式

网关容器组(pod)成为主节点后,会在每个已配置的 VPC 路由表中创建或替换路由。每条路由会将目标 CIDR 设置为混合容器组(pod)CIDR,将目标设置为主节点的主 ENI。如果路由已存在且指向正确的 ENI,网关会跳过更新。

在失效转移期间,新主节点会替换现有路由,使其指向自己的 ENI。这是将 VPC 流量重定向到新活动网关的机制。

路由表条目示例

在网关配置路由后,VPC 路由表将包含类似于以下内容的条目:

目标位置 Target Status

10.0.0.0/16

本地

active

HYBRID_POD_CIDR

eni-LEADER_ENI_ID

active

IAM 权限

网关需要以下 IAM 操作来管理路由表:

  • ec2:DescribeRouteTables

  • ec2:CreateRoute

  • ec2:ReplaceRoute

  • ec2:DescribeInstances

将这些权限附加到与网关节点实例配置文件、容器组(pod)身份或 IRSA 配置关联的 IAM 角色。

监控

运行状况和就绪端点

网关在端口 8088 上公开运行状况和就绪端点:

端点 路径 说明

运行状况检查

/healthz

当网关进程运行正常时,返回 HTTP 200。用于 Kubernetes 存活探针。

就绪检查

/readyz

当网关准备好提供流量时,返回 HTTP 200。用于 Kubernetes 就绪探针。

您可以通过运行临时调试容器或端口转发手动查询这些端点以进行诊断:

kubectl port-forward -n eks-hybrid-nodes-gateway POD_NAME 8088:8088 & curl -s http://localhost:8088/healthz curl -s http://localhost:8088/readyz

指标端点

网关在端口 10080/metrics 路径上公开与 Prometheus 兼容的指标。除标准的控制器运行时指标外,还提供以下自定义指标。

网关信息:

指标 Type 说明

hybrid_gateway_info

计量表

有关网关实例的静态信息。始终为 1。标签:node_ipnode_namevxlan_interfacevpc_cidrpod_cidr

混合节点:

指标 Type 说明

hybrid_gateway_hybrid_nodes_configured

计量表

已配置 VTEP 条目的当前混合节点数。

VTEP 操作:

指标 Type 说明

hybrid_gateway_vtep_add_total

计数器

VTEP 添加成功操作总数。

hybrid_gateway_vtep_add_errors_total

计数器

VTEP 添加失败操作总数。

hybrid_gateway_vtep_remove_total

计数器

VTEP 移除成功操作总数。

hybrid_gateway_vtep_remove_errors_total

计数器

VTEP 移除失败操作总数。

主节点选举和路由表:

指标 Type 说明

hybrid_gateway_leader_is_active

计量表

如果此容器组(pod)是活动主节点,则为 1,是备用节点,则为 0。

hybrid_gateway_leader_setup_duration_seconds

直方图

主节点设置操作(路由表 + CiliumVTEPConfig)的持续时间(以秒为单位)。

hybrid_gateway_aws_route_table_update_total

计数器

AWS 路由表更新成功操作总数。

hybrid_gateway_aws_route_table_update_errors_total

计数器

AWS 路由表更新失败操作总数。

hybrid_gateway_aws_route_table_update_duration_seconds

直方图

AWS 路由表更新操作的持续时间(以秒为单位)。

网络统计信息(按需收集,每次抓取时获取):

指标 Type 说明

hybrid_gateway_vxlan_rx_bytes_total

计量表

在 VXLAN 接口上接收的字节总数。

hybrid_gateway_vxlan_tx_bytes_total

计量表

在 VXLAN 接口上传输的字节总数。

hybrid_gateway_vxlan_rx_packets_total

计量表

在 VXLAN 接口上接收的数据包总数。

hybrid_gateway_vxlan_tx_packets_total

计量表

在 VXLAN 接口上传输的数据包总数。

hybrid_gateway_vxlan_rx_dropped_total

计量表

VXLAN 接口接收时丢弃的数据包总数。

hybrid_gateway_vxlan_tx_dropped_total

计量表

VXLAN 接口传输时丢弃的数据包总数。

hybrid_gateway_vxlan_rx_errors_total

计量表

VXLAN 接口接收错误总数。

hybrid_gateway_vxlan_tx_errors_total

计量表

VXLAN 接口传输错误总数。

hybrid_gateway_vxlan_interface_up

计量表

如果 VXLAN 接口已启动,则为 1,否则为 0。

hybrid_gateway_vxlan_fdb_entries

计量表

VXLAN 接口当前的 FDB 条目数。

hybrid_gateway_vxlan_route_count

计量表

通过 VXLAN 接口的当前路由数。

hybrid_gateway_primary_nic_rx_bytes_total

计量表

主网络接口上接收的字节总数。

hybrid_gateway_primary_nic_tx_bytes_total

计量表

主网络接口上传输的字节总数。

hybrid_gateway_primary_nic_rx_packets_total

计量表

主网络接口上接收的数据包总数。

hybrid_gateway_primary_nic_tx_packets_total

计量表

主网络接口上传输的数据包总数。

hybrid_gateway_primary_nic_rx_dropped_total

计量表

主 NIC 接收时丢弃的数据包总数。

hybrid_gateway_primary_nic_tx_dropped_total

计量表

主 NIC 传输时丢弃的数据包总数。

hybrid_gateway_primary_nic_rx_errors_total

计量表

主 NIC 接收错误总数。

hybrid_gateway_primary_nic_tx_errors_total

计量表

主 NIC 传输错误总数。

hybrid_gateway_primary_nic_info

计量表

主 NIC 名称。始终为 1。标签:interface_name

CloudWatch 可观测性附加组件

您可以使用 Amazon CloudWatch 可观测性附加组件来收集网关指标和日志。配置附加组件以抓取网关命名空间 (eks-hybrid-nodes-gateway) 的端口 10080。有关正确的配置格式,请参阅上述附加组件文档。

扩展注意事项

混合节点网关使用带主节点选举的主动-备用模式,因此任何时候都只有一个容器组(pod)处理流量。水平扩缩网关(通过增加副本数)可通过提供额外的备用容器组(pod)来提升可用性,这些容器组(pod)可在失效转移期间接管,但不会提高性能或吞吐量,因为流量不会分布在多个副本之间。要扩展性能,请通过选择网络带宽能满足流量需求的 EC2 实例类型进行垂直扩展。

实例类型指南

网关吞吐量受 EC2 实例网络性能的限制。选择实例类型时,需考虑以下事项:

  • 网络带宽:网关转发 VPC 与混合容器组(pod)之间的所有流量。选择网络带宽能满足峰值流量要求的实例类型。

  • 每秒数据包数(PPS):VXLAN 封装会增加每个数据包的开销。具有大量小数据包的工作负载(例如高请求率的微服务)受益于具有更高 PPS 限制的实例类型。

  • 混合节点数:每个混合节点都会增加一个 VXLAN 隧道端点,网关通过该端点转发流量。随着混合节点数量的增加,通过网关的总流量也会增加。选择具有足够网络带宽的实例类型,以处理集群的跨网络流量峰值。

建议的实例类型

生产环境(10 – 100 个混合节点,中等流量)

适用于具有稳定跨网络流量的标准生产工作负载。

实例类型 vCPU 内存 Network 备注

c6i.xlarge

4

8 GiB

最高 12.5Gbps

实现成本与性能的良好平衡

c6in.xlarge

4

8 GiB

最高 30 Gbps

网络优化型;推荐用于生产环境

c7i.xlarge

4

8 GiB

最高 12.5Gbps

最新一代计算优化型

m6i.xlarge

4

16 GiB

最高 12.5Gbps

如果在网关节点上同时运行其他工作负载,则适用

高吞吐量生产环境(100 多个混合节点,流量高峰)

适用于对跨网络带宽需求较高的环境,例如数据密集型工作负载或大量并发连接。

实例类型 vCPU 内存 Network 备注

c6in.2xlarge

8

16 GiB

最高 40 Gbps

推荐用于高吞吐量生产环境

c5n.2xlarge

8

21 GiB

最高 25 Gbps

上一代网络优化型,经济高效

c6in.4xlarge

16

32 GiB

最高 50 Gbps

吞吐量最大,适用于极其繁重的工作负载

c5n.4xlarge

16

42 GiB

最高 25 Gbps

vCPU 数量高,适用于极高数据包速率

使用网关指标监控网络利用率(请参阅指标端点),并根据需要调整实例类型。

VXLAN 隧道生命周期

当混合节点加入或离开集群时,网关会自动维护通往混合节点的 VXLAN 隧道。

隧道管理方式

节点控制器会监视集群中的 CiliumNode 对象。控制器在每个网关容器组(pod)(不仅仅是主节点)上运行,以便主节点和备用节点都能保持最新的隧道状态。当发生 CiliumNode 事件时,控制器会通过查找 eks.amazonaws.com/compute-type: hybrid 标签来检查该节点是否为混合节点。

当混合节点加入集群时:

  1. 控制器检测到新的 CiliumNode 对象。

  2. 它从 CiliumNode 规范中提取节点的内部 IP 地址和容器组(pod)CIDR。

  3. 它在 VXLAN 接口上对以下内容进行编程:

    • 通过 VXLAN 接口指向该节点 IP 的节点容器组(pod)CIDR 路由。

    • 将节点 IP 映射到确定性 MAC 地址的静态 ARP 条目。

    • 告知 VXLAN 模块将封装数据包发送到节点 IP 的 FDB 条目。

当混合节点离开集群时:

  1. 控制器检测到 CiliumNode 被删除。

  2. 它从 VXLAN 接口中删除该节点的路由、ARP 条目和 FDB 条目。

此生命周期完全自动化。添加或移除混合节点时,无需手动配置隧道。

后续步骤