
# 在VPC网络集群中访问集群外地址时使用Pod IP作为客户端源IP
在使用VPC网络的CCE集群中，Pod与集群外部通信时，系统默认会将源Pod的IP地址转换为节点的IP地址，使Pod以节点IP的形式与外部进行通信。这一过程被称为"Pod IP伪装"，技术上也称为源网络地址转换（Source Network Address Translation, SNAT）。
CCE提供nonMasqueradeCIDRs参数设置集群私有网段。在Pod中发起访问请求时，如果Pod访问的目的地址在集群私有网段范围内，则节点不会将Pod IP进行网络地址转换，可以借由VPC路由表直接将报文送达至目的地址，即直接使用Pod IP与集群私有网络地址进行通信。关于在Pod中访问外部地址的具体操作步骤，请参见[从Pod访问集群外部网络](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_10048.html)。
图1Pod IP地址转换示意图   
![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002032951017.png "点击放大")
#### 前提条件
您需要拥有一个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进行访问，那么在这种场景下就需要进行SNAT，将Pod IP转换成节点IP进行访问，因而服务端所在的子网网段就不能加入到nonMasqueradeCIDRs配置中。
在大多数情况下，保持Pod IP伪装(SNAT)的默认行为即可满足需求。仅在特定场景中确有必要保留Pod原始IP地址时，才推荐配置nonMasqueradeCIDRs参数。
在配置该参数之前，请仔细评估您的使用场景，并深入了解不当配置可能引起的潜在风险。错误的配置可能会导致集群内部访问受阻。如果您对是否需要配置该参数感到不确定，建议暂时保留默认设置，待需求明确后再作调整。
#### 配置非伪装网段的方法
为了让Pod访问目标网段时保留Pod的源IP地址，您可以通过设置nonMasqueradeCIDRs参数来指定无需伪装的网段。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群详情页。
2. 在左侧导航栏中选择"配置中心"，单击"网络配置"页签。
3. 修改"设置非伪装访问的网段范围"参数，表示当Pod访问这些指定网段时，将保留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. 修改完成后，单击"确认配置"。该配置修改后将在一分钟内生效。
 
