使用出站流量 NAT 政策在 Autopilot 集群中配置 IP 伪装


本页面介绍了如何使用出站流量 NAT 政策来配置在 Google Kubernetes Engine (GKE) Autopilot 模式下创建的集群以执行 IP 伪装。如需详细了解 GKE 标准模式下的 IP 伪装,请参阅配置 IP 伪装代理

概览

您可以使用 GKE 出站流量 NAT 政策为 Autopilot 集群配置 IP 伪装行为。

GKE 支持两个自动生成的出站流量 NAT 政策:

  • 由 GKE 管理的政策,固定且不可修改。
  • 可修改的默认政策。

本页面介绍了如何通过修改默认政策或创建出站流量 NAT 政策来修改和部署出站流量 NAT 政策。本页面还介绍了如何删除已创建的出站流量 NAT 政策。

如需详细了解出站流量 NAT 政策行为,请参阅 Autopilot 集群的流量伪装行为

准备工作

在开始之前,请确保您已执行以下任务:

  • 确保您已启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 确保您已安装 Google Cloud CLI
  • 使用以下某种方法为您的项目设置默认 Google Cloud CLI 设置:
    • 使用 gcloud init(如果您想要在系统引导下完成项目默认设置)。
    • 使用 gcloud config(如果您想要单独设置项目 ID、可用区和区域。

    gcloud init

    1. 运行 gcloud init 并按照说明操作:

      gcloud init

      如果您要在远程服务器上使用 SSH,请使用 --console-only 标志来防止命令启动浏览器:

      gcloud init --console-only
    2. 按照说明授权 gcloud CLI 使用您的 Google Cloud 帐号。
    3. 创建新配置或选择现有配置。
    4. 选择 Google Cloud 项目。
    5. 选择默认的 Compute Engine 可用区
    6. 选择默认的 Compute Engine 区域

    gcloud config

    1. 设置默认项目 ID
      gcloud config set project PROJECT_ID
    2. 设置默认的 Compute Engine 区域(例如 us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. 设置默认的 Compute Engine 可用区(例如 us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. gcloud 更新到最新版本:
      gcloud components update

    通过设置默认位置,您可以避免 gcloud CLI 中出现以下错误:One of [--zone, --region] must be supplied: Please specify location

要求

使用 GKE 出站流量 NAT 政策需要满足以下要求:

  • 1.23.4-gke.1600 或更高版本或者 1.22.7-gke.1500 或更高版本的集群。
  • Autopilot 模式下启用了 GKE Dataplane V2 的集群。

检查出站流量 NAT 政策状态

您可以使用 Google Cloud CLI 工具检查集群是否正在运行出站流量 NAT 政策自定义资源定义 (CRD):

  1. 获取集群的凭据:

    gcloud container clusters get-credentials CLUSTER-NAME
    

    CLUSTER_NAME 替换为您的集群的名称。

  2. 检查出站流量 NAT 政策是否正在运行:

    kubectl get crds egressnatpolicies.networking.gke.io
    

    如果出站流量 NAT 政策正在运行,则输出类似于以下内容:

     NAME                                  CREATED AT
     egressnatpolicies.networking.gke.io   2022-03-16T21:05:43Z
    
  3. 获取已创建的出站流量 NAT 政策列表:

    kubectl get egressnatpolicies
    

    输出内容类似如下:

      NAME             AGE
      default          44h
      gke-bbfa6c0e-1   44h
    

修改现有的默认政策

GKE 支持两个自动生成的 NAT 政策:默认政策由 GKE 管理的政策。默认政策可加以修改,且会配置默认非伪装目标

如需修改现有默认政策,请执行以下步骤:

  1. 获取集群的凭据:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME 替换为您的集群名称。

  2. 修改默认出站流量 NAT 政策:

    kubectl edit egressnatpolicies default
    
  3. 将 NoSNAT 操作作为 CIDR 格式cidr 特性,添加或移除目的地。

      apiVersion: networking.gke.io/v1
      kind: EgressNATPolicy
      metadata:
        name: default
      spec:
        action: NoSNAT
        destinations:
        - cidr:  10.0.0.0/8
        - cidr:  172.16.0.0/12
        - cidr:  192.168.0.0/16
        - cidr:  240.0.0.0/4
        - cidr:  192.0.2.0/24
        - cidr:  198.51.100.0/24
        - cidr:  203.0.113.0/24
        - cidr:  100.64.0.0/10
        - cidr:  198.18.0.0/15
        - cidr:  192.0.0.0/24
        - cidr:  192.88.99.0/24
    

    将数据包发送到这些目标时,您的集群将不会伪装 IP 地址来源,而是会保留来源 Pod IP 地址。

  4. 通过检查 Kubernetes 事件确认修改后的默认政策已部署:

    kubectl get events
    

    输出内容类似如下:

    LAST SEEN   TYPE     REASON           OBJECT                    MESSAGE
    13s         Normal   EnsuringPolicy   egressnatpolicy/default   Ensuring IP masquerade config for policy "default"
    

部署新的出站流量 NAT 政策

如需使用 NoSNAT 操作添加新目的地,您可以使用以下方式之一:

如需创建不属于默认政策的新出站流量 NAT 政策,请执行以下步骤:

  1. 将以下清单保存为 egress_nat_policy.yaml

    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: POLICY_NAME
    spec:
      action: NoSNAT
      destinations:
      - cidr: CIDR_1
      - cidr: CIDR_2
    

    替换以下内容:

    • POLICY_NAME:新政策的名称。
    • CIDR_1CIDR_2:采用 CIDR 格式的 IP 地址范围。将数据包发送到这些目标时,您的集群将不会伪装 IP 地址来源,而是会保留来源 Pod IP 地址。如果您需要超过两个 CIDR,请按照相同格式向 destinations 列表添加更多条目。
  2. 部署新政策:

    kubectl create -f egress_nat_policy.yaml
    
  3. 通过检查 Kubernetes 事件确认政策已部署:

    kubectl get events
    

    输出内容类似如下:

    LAST SEEN   TYPE     REASON           OBJECT                              MESSAGE
    13s         Normal   EnsuringPolicy   egressnatpolicy/mypolicy            Ensuring IP masquerade config for policy "mypolicy"
    

删除出站流量 NAT 政策

如需完全删除出站流量 NAT 政策,请运行以下命令:

kubectl delete egressnatpolicies POLICY_NAME

POLICY_NAME 替换为要删除的政策的名称。

后续步骤