關於 Private Service Connect


本文提供 Google Kubernetes Engine (GKE) 叢集中的 Private Service Connect 總覽。繼續閱讀之前,請先熟悉虛擬私有雲網路和網路基礎知識,例如 IP 位址。

總覽

Private Service Connect (PSC) 是 Google Cloud網路基礎架構的一部分,可讓 GKE 叢集安全地以私密方式使用 Google Cloud 或內部部署環境中代管的服務,不必公開這些服務。使用 PSC 時, Google Cloud 會將內部 IP 位址指派給控制層,以便將要求轉送至 GKE 叢集管理 API,讓您管理叢集,而流量不會經過公開網際網路。PSC 提供一致的架構,可透過服務網路方法連結不同網路,並允許服務供應商和消費者使用虛擬私有雲內部的內部 IP 位址進行通訊。

在採用 PSC 基礎架構的 GKE 叢集中,叢集控制層與節點之間的所有通訊都會以私密方式進行。您也可以在控制層和節點集區層級隔離叢集,不必管理複雜的 VPC 對等互連設定。

啟用 Private Service Connect 的叢集優點

安全性:PSC 會在 GKE 叢集控制層和節點之間建立私人連線,確保流量完全在 Google 網路內傳輸,不會經過公開網際網路。這可將未經授權存取的風險降至最低。

簡化連線:如果是 PSC 叢集,您不必管理控制層端點的特定子網路。PSC 端點完全位於叢集網路內,因此不需要複雜的網路設定。

可擴充性:您可以建立最多 1000 個啟用 PSC 的叢集,滿足高資源需求。相較之下,使用 VPC 網路對等互連的叢集,每個可用區或地區最多只能建立 75 個叢集。

可自訂的設定:透過 PSC,您可以獨立控管叢集控制層、節點集區或工作負載的隔離狀態,讓叢集更具擴充性和安全性。您可以在叢集中設定私有和公有節點集區的組合。

彈性:叢集建立後,您可以隨時變更隔離設定。您可以在控制層的公開和私人存取權之間切換,並變更節點集區和工作負載的網際網路存取權,不必建立新的叢集。

限制

控制層有內部端點和外部端點。控制層的內部端點不支援您設定的任何 webhook 網址中的內部 IP 位址。如果網址中的內部 IP 位址有 Webhook,請按照下列步驟操作,解決不相容問題:

  1. 建立沒有選擇器的無標頭服務,手動管理這項服務導向流量的端點。以下範例顯示在 3000 埠上接聽 Webhook 的服務:

    apiVersion: v1
    kind: Service
    metadata:
      name: <service-name>
    spec:
      clusterIP: None
      ports:
      - port: 3000
        targetPort: 3000
    
  2. 為所需目的地建立對應的端點。舉例來說,如果 Webhook 在網址中使用內部 IP 位址 10.0.0.1,您可以建立下列端點:

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: <service-name>
    subsets:
    - addresses:
      - ip: 10.0.0.1
      ports:
      - port: 3000
    
  3. 更新 Webhook 設定:在 Webhook 設定中,刪除含有內部 IP 位址的網址,並新增您在第一個步驟中建立的服務。例如:

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        service:
          name: <service-name>
          namespace: <namespace>
          path: "/validate"
          port: 3000
    

    在上述範例中,Webhook 的路徑為 /validate,並監聽通訊埠 3000。

  4. 驗證 Webhook:確認 Webhook 可以繼續接收 API 伺服器要求,並根據自訂邏輯核准、拒絕或修改要求。如果驗證 Webhook 時發生錯誤,您可能需要建立新憑證,然後使用新憑證詳細資料更新 Webhook 設定。例如:

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        ...
        caBundle: <new-certificate>
    ...
    

架構

下圖概略說明使用 PSC 的叢集架構:

GKE 中的 Private Service Connect 架構。
圖: Private Service Connect 架構

啟用 PSC 的叢集核心元件如下:

控制層:每個 GKE 叢集都有 Kubernetes API 伺服器,由控制層管理。控制層會在 Google 管理的專案中,透過虛擬私有雲網路的虛擬機器 (VM) 執行。區域叢集有多個控制層副本,每個副本都會在自己的 VM 上執行。

控制層同時具有內部端點 (Private Service Connect 端點),用於內部叢集通訊,以及外部端點。您可以選擇停用外部端點。 節點與控制層間的傳輸全部交由內部 IP 位址來做導向。如要瞭解叢集設定,請參閱「驗證控制平面設定」。

虛擬私有雲網路:這是虛擬網路,您可以在其中建立子網路,並為叢集的節點和 Pod 設定專用的內部 IP 位址範圍。

Private Service Connect 端點:這是叢集控制層中的內部端點,位於專案的虛擬私有雲網路中。PSC 端點是存取叢集控制層的進入點。

服務附件:服務附件是一種資源,可在您的虛擬私有雲網路與生產者虛擬私有雲網路之間建立安全且私密的連線。如上圖所示,PSC 端點會透過私人連線存取服務連結,並允許流量在節點和控制層之間流動。

設定叢集存取權

在啟用 PSC 的叢集上,您可以透過多種方式設定控制層存取權和節點存取權。叢集建立後,您隨時可以變更這些設定。如要設定叢集存取權,請參閱「自訂網路隔離」。

控制層存取權

  • 僅透過 DNS 型端點存取控制層 (建議)。您可以建立 IAM 允許政策,授權要求存取控制層。

  • 僅透過以 IP 為基礎的端點存取控制層。您可以選擇同時使用控制層的外部和內部端點,也可以停用外部端點,只允許從 Google 保留的 IP 位址 (用於叢集管理) 和 GKE 叢集內部 IP 位址存取。

    如果您使用 IP 位址,建議您使用授權網路,限制叢集控制層的存取權。您也可以透過授權網路,封鎖來自 Google Cloud VM、Cloud Run 或 Cloud Run 函式的存取要求,這些要求是透過 Google Cloud 外部 IP 提出。

  • 透過 DNS 型端點 IP 型端點存取控制層。

叢集節點存取權

啟用 PSC 的叢集可設定混合模式叢集。您可以設定叢集,讓節點具有內部或外部存取權。您也可以根據使用的叢集類型變更節點網路設定:

  • 如果是 Autopilot 叢集,您可以設定部分工作負載在私人節點上執行,其他工作負載則在公開節點上執行。舉例來說,您可能在叢集中執行混合工作負載,其中有些需要存取網際網路,有些則不需要。您可以在具有外部 IP 位址的節點上部署工作負載,確保只有這類工作負載可公開存取。

  • 對於標準叢集,您可以為部分節點佈建內部 IP 位址,其他節點則可使用外部 IP 位址。

使用 Private Service Connect 的叢集

如要檢查叢集是否使用 Private Service Connect,請執行 gcloud container clusters describe 指令。如果叢集使用 Private Service Connect,privateClusterConfig 資源會具有下列值:

  • peeringName 欄位空白或不存在。
  • privateEndpoint 欄位已指派值。

如要為叢集啟用 PSC,請在 1.29 以上版本中建立叢集。 否則,如果是 1.28 以下版本,請建立叢集,但不要啟用私有節點。叢集建立後,您隨時可以更新這項設定並啟用私人節點。

後續步驟