透過 Secure Web Proxy 轉送環境輸出流量

本頁面說明如何設定輸出轉送,將 Google Kubernetes Engine (GKE) 周邊網路中執行的工作負載,傳送至 Secure Web Proxy (SWP) 閘道。

透過 Secure Web Proxy 閘道轉送傳出流量,即可強制執行集中式輸出安全性政策 (例如網址篩選、網域許可清單和 TLS 檢查),而不必修改應用程式程式碼。第 4 層節點 Proxy 會攔截應用程式 Pod 外部的傳出流量,即使工作負載容器遭到入侵,也能提供 Pod 外部的安全隔離。

架構和流量

在這個部署模型中,您會保有基礎架構的擁有權,包括 GKE 叢集、Secure Web Proxy 執行個體,以及任何 Private Service Connect (PSC) 端點 (適用於跨虛擬私有雲部署)。

輸出流量的運作方式如下:

  1. 工作負載 Pod 會向外部端點或網際網路目的地發出傳出流量。
  2. 本機第 4 層 Ambient 節點 Proxy 會攔截節點上的傳出要求。
  3. 節點 Proxy 會建立連至 egress 閘道的 HTTP CONNECT 通道。
  4. 如果 Secure Web Proxy 位於同一個虛擬私有雲網路,流量會直接連線至閘道。如果 Secure Web Proxy 位於其他虛擬私有雲網路,流量會經過 PSC 服務連結。
  5. Secure Web Proxy 會終止通道、強制執行設定的輸出安全性政策,並將授權要求轉送至目的地。

限制

設定 Secure Web Proxy 輸出路由前,請先詳閱下列預先發布版限制:

  • 命名空間層級政策:輸出路由政策僅適用於命名空間層級。不支援使用標籤選取器精細選取 Pod。
  • 主機名稱篩選功能需要 TLS 檢查:除非啟用 TLS 檢查,否則 Secure Web Proxy 政策只能依 IP 位址篩選輸出流量。
  • Workload Identity:GKE 周邊網路支援標準 Workload Identity。這個預先發布版不支援代管代理程式身分集區。
  • 驗證:Ambient 節點 Proxy 和 Secure Web Proxy 之間的連線會略過伺服器憑證驗證。CONNECT 要求包含未繫結的權杖和用戶端憑證。
  • 更新設定時重新建立資源:對現有 Secure Web Proxy 執行個體或 PSC 設定所做的變更不會自動套用。如果更新 Secure Web Proxy 或 PSC 設定,則必須刪除並重新建立 GCPEgressPolicy 資源和 Secure Web Proxy 執行個體,才能套用變更。
  • TLS 檢查信任錨點:GKE 不會自動將 Secure Web Proxy 私人 CA 憑證插入工作負載容器。如果您使用 TLS 檢查,則必須手動將信任憑證安裝到容器映像檔中。

必要條件

設定輸出路由前,請確認您具備下列項目:

  • 已啟用周邊網路的 GKE 叢集。如需操作說明,請參閱「準備 GKE 周邊網路」。
  • 已部署的 Secure Web Proxy 執行個體,其 serverTlsPolicy 在Cloud de Confiance by S3NS 專案或共用虛擬私有雲中設定為 clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT。
  • 如果 Secure Web Proxy 位於與 GKE 叢集不同的虛擬私有雲網路:
    • 為 Secure Web Proxy 建立的 PSC 服務連結。
    • 在 GKE 叢集虛擬私有雲網路中設定的 PSC 消費者端點。

如要完成這些步驟,您必須具備下列角色:

  • Secure Web Proxy/Network Services:networkservices.gateways.* (或 roles/networkservices.admin),用於設定 Secure Web Proxy 閘道資源。
  • PSC 管理 (僅限跨虛擬私有雲部署):compute.networkAttachments.list (或 roles/compute.networkAdmin),用於管理 Private Service Connect 連線。
  • GKE 管理:roles/container.clusterAdmin,用於部署自訂資源 (GCPBackend、GCPEgressPolicy)。

設定 TLS 檢查的信任機制

如果 Secure Web Proxy 政策使用 TLS 檢查功能檢查加密的傳出流量,Proxy 會產生由其私人憑證授權單位 (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

定義閘道端點

設定周邊輸出路由的第一步,是建立閘道端點,定義 GKE 叢集中的 Secure Web Proxy 端點,並將 Proxy 的位置告知周邊網路。

如要指定 Secure Web Proxy 或 Private Service Connect (PSC) 服務連結的 URI,請在 GKE 叢集中建立 GCPBackend 自訂資源:

相同的虛擬私有雲

  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:已註冊周邊網路的命名空間。
    • 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
    

跨虛擬私有雲

  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:已註冊周邊網路的命名空間。
    • PROJECT_ID:您的 Cloud de Confiance by S3NS 專案 ID。
    • REGION:部署 PSC 服務連結的區域。
    • ATTACHMENT_NAME:如果 Secure Web Proxy 位於其他虛擬私有雲網路,請提供 PSC 服務連結名稱。
  2. 套用 GCPBackend 資源:

    kubectl apply -f swp-backend.yaml
    

設定輸出流量重新導向

建立 GCPEgressPolicy 自訂資源,將命名空間的傳出流量轉送至 Secure Web Proxy 閘道。這會提供必要的信號,讓 ambient 節點 Proxy 建立 HTTP CONNECT 通道至 Secure Web Proxy,這是輸出轉送的必要條件。

  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 控制層位址範圍或內部虛擬私有雲子網路)。
  2. 套用 GCPEgressPolicy 資源:

    kubectl apply -f swp-egress-policy.yaml
    

    套用政策後,命名空間中工作負載的傳出流量會重新導向至 Secure Web Proxy。

疑難排解

請按照下列指引,診斷及解決 Ambient 輸出路由問題:

  • 流量未到達 Secure Web Proxy:
    • 如果是相同虛擬私有雲部署作業,請確認 GCPBackend 資源指向正確的 Secure Web Proxy 閘道 URI。
    • 跨虛擬私有雲部署作業:
    • 確認 GCPBackend 資源指向正確的 PSC 服務連結 URI。
    • 確認 PSC 端點已在供應商虛擬私有雲中建立並接受。
    • 確認 GCPEgressPolicy 中的 excludeCIDRRanges 並未不小心比對到目的地流量。
  • mTLS 連線失敗:
    • 確認 Secure Web Proxy 已設為接受來自節點 Proxy 的連線。
  • TLS 檢查憑證錯誤:
    • 如果用戶端要求因憑證驗證錯誤 (例如 x509: certificate signed by unknown authority) 而失敗,請確認 Secure Web Proxy CA 憑證已正確安裝在工作負載容器的系統憑證儲存庫中。