通过 Secure Web Proxy 路由环境出站流量

本页面介绍了如何为在 Google Kubernetes Engine (GKE) Ambient Networking 上运行的工作负载配置到 Secure Web Proxy (SWP) 网关的出站流量路由。

通过安全 Web 代理网关路由出站流量,您可以强制执行集中式出站流量安全政策(例如网址过滤、网域许可清单和 TLS 检查),而无需修改应用代码。第 4 层节点代理会拦截应用 Pod 外部的出站流量,即使工作负载容器遭到入侵,也能提供 Pod 外部的安全隔离。

架构和流量

在此部署模式下,您将保留对基础架构的所有权,包括 GKE 集群、Secure Web Proxy 实例以及任何 Private Service Connect (PSC) 端点(适用于跨 VPC 部署)。

出站流量流的工作方式如下:

  1. 工作负载 Pod 向外部端点或互联网目标发起出站流量。
  2. 本地第 4 层环境节点代理会拦截节点上的出站请求。
  3. 节点代理会建立到出站网关的 HTTP CONNECT 隧道。
  4. 如果 Secure Web Proxy 位于同一 VPC 网络中,流量会直接连接到网关。如果 Secure Web Proxy 位于其他 VPC 网络中,则流量会遍历 PSC 服务连接。
  5. Secure Web Proxy 会终止隧道,强制执行配置的出站流量安全政策,并将已获授权的请求转发到目的地。

限制

在设置 Secure Web Proxy 出站流量路由之前,请先查看预览版中的以下限制:

  • 命名空间级政策:出站路由政策仅在命名空间级应用。不支持使用标签选择器进行精细 Pod 选择。
  • 主机名过滤需要 TLS 检查:除非启用了 TLS 检查,否则 Secure Web Proxy 政策只能按 IP 地址过滤出站流量。
  • Workload Identity:GKE Ambient Networking 支持标准 Workload Identity。此预览版不支持代管式代理身份池。
  • 身份验证:环境节点代理与 Secure Web Proxy 之间的连接会跳过服务器证书验证。CONNECT 请求包含一个无边界令牌以及客户端证书。
  • 配置更新时重新创建资源:对现有 Secure Web Proxy 实例或 PSC 配置所做的更改不会自动传播。如果您更新 Secure Web Proxy 或 PSC 配置,则必须删除并重新创建 GCPEgressPolicy 资源和 Secure Web Proxy 实例,才能应用更改。
  • TLS 检查信任锚:GKE 不会自动将 Secure Web Proxy 私有 CA 证书注入工作负载容器。如果您使用 TLS 检查,则必须手动将信任证书安装到容器映像中。

前提条件

在配置出站流量路由之前,请验证您是否具备以下条件:

  • 已启用 Ambient Networking 的 GKE 集群。如需了解相关说明,请参阅准备 GKE Ambient Networking。
  • 在Cloud de Confiance by S3NS 项目或共享 VPC 中,使用 clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT 配置了 serverTlsPolicy 的已部署 Secure Web Proxy 实例。
  • 如果 Secure Web Proxy 位于与 GKE 集群不同的 VPC 网络中:
    • 为 Secure Web Proxy 创建的 PSC 服务连接。
    • 在 GKE 集群 VPC 网络中配置的 PSC 使用方端点。

如需完成这些步骤,您必须拥有以下角色:

  • Secure Web Proxy/Network Services:networkservices.gateways.*(或 roles/networkservices.admin),用于配置 Secure Web Proxy 网关资源。
  • PSC 管理(仅限跨 VPC 部署):compute.networkAttachments.list(或 roles/compute.networkAdmin),用于管理 Private Service Connect 连接。
  • GKE 管理:roles/container.clusterAdmin,用于部署自定义资源(GCPBackend、GCPEgressPolicy)。

为 TLS 检查配置信任

如果您的 Secure Web Proxy 政策使用 TLS 检查来检查加密的出站流量,则代理会生成由其私有证书授权机构 (CA) 签名的证书,以模拟外部目的地。

您的工作负载应用必须信任 Secure Web Proxy 提供的私有 CA 证书。由于 GKE 不会自动注入此证书,因此您必须将 SWP CA 证书(信任锚点)安装到容器的受信任证书存储区中。

如需将 CA 证书添加到容器映像,请在 Dockerfile 中添加以下行:

COPY swp-ca-cert.pem /usr/local/share/ca-certificates/swp-ca-cert.crt
RUN update-ca-certificates

定义网关端点

配置 Ambient Networking 出站流量路由的第一步是创建网关端点,该端点定义 GKE 集群中的 Secure Web Proxy 端点,并向 Ambient Networking 告知代理的位置。

如需指定 Secure Web Proxy 或 Private Service Connect (PSC) 服务连接的 URI,请在 GKE 集群中创建 GCPBackend 自定义资源:

同一 VPC

  1. 将以下清单保存为 swp-backend.yaml:

    apiVersion: networking.gke.io/v1
    kind: GCPBackend
    metadata:
      name: swp-backend
      namespace: ambient-test
    spec:
      serviceUris:
      - //networkservices.googleapis.com/projects/PROJECT_ID/locations/REGION/gateways/SWP_NAME
    

    替换以下内容:

    • ambient-test:已加入 Ambient Networking 的命名空间。
    • PROJECT_ID:您的 Cloud de Confiance by S3NS 项目 ID。
    • REGION:Secure Web Proxy 的部署区域。
    • SWP_NAME:Secure Web Proxy 的名称。
  2. 应用 GCPBackend 资源:

    kubectl apply -f swp-backend.yaml
    

跨 VPC

  1. 将以下清单保存为 swp-backend.yaml:

    apiVersion: networking.gke.io/v1
    kind: GCPBackend
    metadata:
      name: swp-backend
      namespace: ambient-test
    spec:
      serviceUris:
      - //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    

    替换以下内容:

    • ambient-test:已加入 Ambient Networking 的命名空间。
    • PROJECT_ID:您的 Cloud de Confiance by S3NS 项目 ID。
    • REGION:PSC 服务连接的部署区域。
    • ATTACHMENT_NAME:PSC 服务连接的名称(如果 Secure Web Proxy 位于其他 VPC 网络中)。
  2. 应用 GCPBackend 资源:

    kubectl apply -f swp-backend.yaml
    

配置出站流量重定向

创建 GCPEgressPolicy 自定义资源,以将出站流量从命名空间路由到 Secure Web Proxy 网关。这提供了必要的信号,以便环境节点代理建立到 Secure Web Proxy 的 HTTP CONNECT 隧道,这是出站路由所必需的。

  1. 将以下清单保存为 swp-egress-policy.yaml:

    apiVersion: networking.gke.io/v1
    kind: GCPEgressPolicy
    metadata:
      name: swp-egress-policy
      namespace: ambient-test
    spec:
      to:
        excludeCIDRRanges:
        - "CLUSTER_CONTROL_PLANE_CIDR"
      proxyRef:
        group: networking.gke.io
        kind: GCPBackend
        name: swp-backend
    

    替换以下内容:

    • ambient-test:已加入 Ambient Networking 的命名空间。
    • CLUSTER_CONTROL_PLANE_CIDR:应绕过 Secure Web Proxy 的内部通信的 CIDR 范围(例如 GKE 控制平面地址范围或内部 VPC 子网)。
  2. 应用 GCPEgressPolicy 资源:

    kubectl apply -f swp-egress-policy.yaml
    

    应用该政策后,来自命名空间中工作负载的出站流量会重定向到 Secure Web Proxy。

问题排查

请按照以下指南诊断和解决 Ambient 出站流量路由问题:

  • 流量未到达 Secure Web Proxy:
    • 对于同 VPC 部署,请验证 GCPBackend 资源是否指向正确的 Secure Web Proxy 网关 URI。
    • 对于跨 VPC 部署:
    • 验证 GCPBackend 资源是否指向正确的 PSC 服务连接 URI。
    • 验证 PSC 端点是否已在提供方 VPC 中建立并接受。
    • 检查 GCPEgressPolicy 中的 excludeCIDRRanges 是否未无意中匹配您的目标流量。
  • mTLS 连接失败:
    • 验证 Secure Web Proxy 是否已配置为接受来自节点代理的连接。
  • TLS 检查证书错误:
    • 如果客户端请求因证书验证错误(例如 x509: certificate signed by unknown authority)而失败,请验证 Secure Web Proxy CA 证书是否已正确安装在工作负载容器的系统证书存储区中。