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

本页面介绍了如何为在 Google Kubernetes Engine (GKE) 环境网络上运行的工作负载配置出站路由,以将其路由到安全 Web 代理 (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 检查: Secure Web Proxy 政策只能按 IP 地址过滤出站流量,除非启用 TLS 检查。
  • 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 检查配置信任

如果您的安全 Web 代理政策使用 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:已注册到环境网络中的命名空间。
    • CLUSTER_CONTROL_PLANE_CIDR:应绕过 Secure Web Proxy 的内部通信的 CIDR 范围(例如 GKE 控制平面地址范围或内部 VPC 子网)。
  2. 应用 GCPEgressPolicy 资源:

    kubectl apply -f swp-egress-policy.yaml
    

    应用政策后,命名空间中工作负载的出站流量会重定向到安全 Web 代理。

问题排查

请按照以下指南诊断和解决环境出口路由问题:

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