

 **帮助改进此页面** 

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

# Amazon EKS 混合节点功能网关操作
<a name="hybrid-nodes-gateway-operations"></a>

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

## 高可用性和失效转移
<a name="hybrid-nodes-gateway-ha"></a>

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

### 失效转移序列
<a name="hybrid-nodes-gateway-failover-sequence"></a>

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

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

1. 备用容器组（pod）获取租约并成为新主节点。

1. 新主节点运行主节点设置序列：
   + 更新 VPC 路由表条目，将混合容器组（pod）CIDR 指向新主节点的主 ENI。
   + 使用新主节点的节点 IP 和 VXLAN MAC 地址更新 `CiliumVTEPConfig` 自定义资源。

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

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

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

### 可用区建议
<a name="hybrid-nodes-gateway-az-recommendation"></a>

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

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

### 主节点选举参数
<a name="hybrid-nodes-gateway-leader-params"></a>

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


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
|  `--leader-election-lease-duration`  |  `3s`  | 主节点停止续订后，非主节点在尝试获取租约之前的等待时间。 | 
|  `--leader-election-renew-deadline`  |  `2s`  | 主节点在放弃之前尝试续订租约的时间。 | 
|  `--leader-election-retry-period`  |  `1s`  | 候选节点重试获取租约的频率。 | 

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

## VPC 路由表管理
<a name="hybrid-nodes-gateway-route-table-mgmt"></a>

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

### 路由管理方式
<a name="hybrid-nodes-gateway-route-how"></a>

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

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

### 路由表条目示例
<a name="hybrid-nodes-gateway-route-example"></a>

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


| 目标位置 | Target | Status | 
| --- | --- | --- | 
|  `10.0.0.0/16`  | 本地 | active | 
|  {{HYBRID\_POD\_CIDR}}  |  {{eni-LEADER\_ENI\_ID}}  | active | 

### IAM 权限
<a name="hybrid-nodes-gateway-route-iam"></a>

网关需要以下 IAM 操作来管理路由表：
+  `ec2:DescribeRouteTables` 
+  `ec2:CreateRoute` 
+  `ec2:ReplaceRoute` 
+  `ec2:DescribeInstances` 

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

## 监控
<a name="hybrid-nodes-gateway-monitoring"></a>

### 运行状况和就绪端点
<a name="hybrid-nodes-gateway-health-endpoints"></a>

网关在端口 `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
```

### 指标端点
<a name="hybrid-nodes-gateway-metrics"></a>

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

 **网关信息：**


| 指标 | Type | 说明 | 
| --- | --- | --- | 
|  `hybrid_gateway_info`  | 计量表 | 有关网关实例的静态信息。始终为 1。标签：`node_ip`、`node_name`、`vxlan_interface`、`vpc_cidr`、`pod_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 可观测性附加组件
<a name="hybrid-nodes-gateway-cloudwatch"></a>

您可以使用 [Amazon CloudWatch 可观测性附加组件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-addon.html)来收集网关指标和日志。配置附加组件以抓取网关命名空间 (`eks-hybrid-nodes-gateway`) 的端口 `10080`。有关正确的配置格式，请参阅上述附加组件文档。

## 扩展注意事项
<a name="hybrid-nodes-gateway-scaling"></a>

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

### 实例类型指南
<a name="hybrid-nodes-gateway-instance-guidance"></a>

网关吞吐量受 EC2 实例网络性能的限制。选择实例类型时，需考虑以下事项：
+  **网络带宽**：网关转发 VPC 与混合容器组（pod）之间的所有流量。选择网络带宽能满足峰值流量要求的实例类型。
+  **每秒数据包数（PPS）**：VXLAN 封装会增加每个数据包的开销。具有大量小数据包的工作负载（例如高请求率的微服务）受益于具有更高 PPS 限制的实例类型。
+  **混合节点数**：每个混合节点都会增加一个 VXLAN 隧道端点，网关通过该端点转发流量。随着混合节点数量的增加，通过网关的总流量也会增加。选择具有足够网络带宽的实例类型，以处理集群的跨网络流量峰值。

### 建议的实例类型
<a name="hybrid-nodes-gateway-instance-recommendations"></a>

 **生产环境（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 数量高，适用于极高数据包速率 | 

使用网关指标监控网络利用率（请参阅[指标端点](#hybrid-nodes-gateway-metrics)），并根据需要调整实例类型。

## VXLAN 隧道生命周期
<a name="hybrid-nodes-gateway-vxlan-lifecycle"></a>

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

### 隧道管理方式
<a name="hybrid-nodes-gateway-tunnel-mgmt"></a>

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

 **当混合节点加入集群时：**

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

1. 它从 `CiliumNode` 规范中提取节点的内部 IP 地址和容器组（pod）CIDR。

1. 它在 VXLAN 接口上对以下内容进行编程：
   + 通过 VXLAN 接口指向该节点 IP 的节点容器组（pod）CIDR 路由。
   + 将节点 IP 映射到确定性 MAC 地址的静态 ARP 条目。
   + 告知 VXLAN 模块将封装数据包发送到节点 IP 的 FDB 条目。

 **当混合节点离开集群时：**

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

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

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

## 后续步骤
<a name="hybrid-nodes-gateway-operations-next"></a>
+  [Amazon EKS 混合节点功能网关配置参考](hybrid-nodes-gateway-configuration.md)：自定义 Helm 值、CLI 标志和主节点选举参数。
+  [Amazon EKS 混合节点功能网关问题排查](hybrid-nodes-gateway-troubleshooting.md)：诊断和解决常见问题。
+  [Amazon EKS 混合节点功能网关](hybrid-nodes-gateway-overview.md)：返回概述页面。