更新时间:2024-12-18 GMT+08:00

保留Pod IP非伪装网段最佳实践

Pod IP伪装(SNAT)简介

在使用VPC网络的CCE集群中,为了实现Pod与集群外部的通信,系统默认会将源Pod的IP地址转换为节点的IP地址,使Pod以节点IP的形式与外部进行通信。这一过程被称为“Pod IP伪装”,技术上也称为源网络地址转换(Source Network Address Translation, SNAT)。

前提条件

您需要拥有一个VPC网络模型的集群,且版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上。

CCE集群默认设置的非伪装网段说明

CCE集群默认会将以下三个知名私有网段作为非伪装网段(nonMasqueradeCIDRs):

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

此外,如果CCE集群使用了扩展网段VPC,创建、重置节点也会将扩展网段添加到非伪装网段中。

这意味着,从这些网段发起通信的Pod,在与外部资源通信时,其数据包的源IP地址将保持不变,不会被替换成节点的IP地址。

默认非伪装网段无法满足需求的场景

尽管CCE中默认的非伪装网段设置适用于常见情况,但在某些特定场景下,默认配置可能无法满足用户的需求。以下是两个典型的例子:

  • 跨节点访问Pod

    在Kubernetes集群中,当一个节点需要访问位于其他节点上的Pod时,通常情况下,Pod的响应数据包会被自动执行SNAT,此时源地址会从Pod的IP地址变更为节点的IP地址。这种自动的IP地址转换可能会导致通信异常,从而使得跨节点的访问变得不可行。

    为了确保节点能够正常访问位于其他节点上的Pod,需要将节点所在子网的网段添加到nonMasqueradeCIDRs参数中,以免进行SNAT,从而保留Pod的原始IP地址。

  • 从VPC内其他资源访问Pod

    在一些场景下,可能需要从同一个VPC内的其他资源(例如ECS实例)直接访问位于不同节点的Pod的原始IP地址。由于默认情况下启用了SNAT,数据包的源IP地址在经过节点时会被替换为节点的IP地址,这会阻碍从这些资源到Pod的直接访问。

    要确保VPC内的其他资源能够直接访问Pod,需要将这些资源所在子网的网段也添加到nonMasqueradeCIDRs参数中,从而避免源地址转换,保持数据包的源IP地址为原始Pod地址。

配置非伪装网段的注意事项

如果云服务配置了安全组或ACL,而这些配置仅允许Pod所在节点的IP进行访问,那么在这种场景下就不应该执行Pod IP伪装,因而也就无需配置nonMasqueradeCIDRs参数。

在大多数情况下,保持Pod IP伪装(SNAT)的默认行为即可满足需求。仅在特定场景中确有必要保留Pod原始IP地址时,才推荐配置nonMasqueradeCIDRs参数。

在配置该参数之前,请仔细评估您的使用场景,并深入了解不当配置可能引起的潜在风险。错误的配置可能会导致集群内部访问受阻。如果您对是否需要配置该参数感到不确定,建议暂时保留默认设置,待需求明确后再作调整。

配置非伪装网段的方法

为了让Pod访问目标网段时保留Pod的源IP地址,您可以通过设置nonMasqueradeCIDRs参数来指定无需伪装的网段。

  1. 登录CCE控制台,单击集群名称进入集群详情页。
  2. 在左侧导航栏中选择“配置中心”,单击“网络配置”页签。
  3. 修改“保留原有Pod IP的非伪装网段”参数。在配置该参数时,请遵循以下原则:

    • 每个网段必须符合CIDR格式,且为有效的IPv4网段。

      正确示例: 192.168.1.0/24

      错误示例: 192.168.1.1/24 (不符合CIDR格式)

    • 所设置的多个网段之间不得存在任何重叠。

      正确示例: 192.168.1.0/24 和 192.168.2.0/24

      错误示例: 192.168.1.0/24 和 192.168.1.128/25 (两个网段存在重叠)

    • 确保nonMasqueradeCIDRs参数中包含了所有希望使用原始Pod IP进行通信的目的地网段。

  4. 修改完成后,单击“确认配置”。该配置修改后将在一分钟内生效。