設計資源之間的存取範圍

本文介紹最佳做法,說明如何使用機構、專案和 Kubernetes 叢集,在 Google Distributed Cloud (GDC) 氣隙環境中設計工作負載的階層和區隔。這份指南兼顧資源使用效率、工作負載隔離和作業便利性。

為客戶之間的實體和邏輯隔離設計機構

Organization 資源是單一客戶擁有的所有資源的根目錄。您可以透過角色繫結和網路政策,在機構內的工作負載之間定義精細的存取控制。詳情請參閱身分與存取權管理一文。

GDC 區域內的每個機構都會為運算基礎架構提供實體隔離,並為網路、儲存空間和其他服務提供邏輯隔離。除非明確授予存取權,否則一個機構的使用者無法存取另一個機構的資源。根據預設,系統不允許機構之間建立網路連線,除非您明確設定允許資料從一個機構傳出,並傳入另一個機構。

定義可共用機構的工作負載範圍

貴公司定義信任範圍的方式,可能會影響機構在公司環境中的範圍。有些公司可能會偏好為公司內的不同實體建立多個機構資源。舉例來說,如果公司各部門需要完全區隔工作負載的實體和管理作業,則每個部門可能都是 GDC 的獨立客戶,並擁有獨立機構。

一般而言,建議您根據下列信號,將多個工作負載歸入單一機構:

  • 工作負載可以共用依附元件。例如共用資料來源、工作負載之間的連線,或共用監控工具。
  • 工作負載可以共用管理信任根。同一位管理員可獲得機構中所有工作負載的特殊存取權。
  • 只要有足夠的邏輯分隔,工作負載就能與同一機構中的其他工作負載共用基礎實體基礎架構。
  • 同一預算負責人須負責匯總工作負載預算。如要查看機構的匯總費用,或針對每個工作負載進行精細分析,請參閱「帳單」頁面。
  • 工作負載可用性需求必須符合多區域距離的高可用性需求。

設計專案,在工作負載之間建立邏輯隔離

在機構內,我們建議佈建多個專案,在資源之間建立邏輯區隔。同一機構中的專案可能會共用底層實體基礎架構,但專案會根據身分與存取權管理 (IAM) 政策和網路政策,以邏輯界線分隔工作負載。

設計專案界線時,請考量資源可共用的最大功能集,例如角色繫結網路政策可觀測性需求。將可共用這項功能的資源歸入一個專案,並將無法共用這項功能的資源移至另一個專案。

以 Kubernetes 術語來說,專案是 Kubernetes 命名空間,保留給機構中的所有叢集。雖然命名空間會保留給多個叢集,但這不代表系統會自動在所有叢集排定 Pod。排定至特定叢集的 Pod 會繼續排定至該叢集。

下圖顯示如何將角色繫結套用至跨多個叢集的專案。

GDC RBAC 政策

角色繫結是在專案層級設定,用來定義誰可以對哪些資源類型執行哪些操作。VM 或 Pod 等工作負載會部署至專案,而這些工作負載的存取權則由角色繫結控管。無論部署到哪個叢集,角色繫結都會一致套用至 VM 型工作負載和容器型工作負載。

下圖顯示網路政策如何管理專案之間的存取權。系統已停用 Backend ProjectFrontend ProjectDatabase Project 之間的跨專案通訊。不過,每個專案內的資源可以互相通訊。

網路政策是在專案層級設定,可選擇性地允許資源之間的網路存取權。根據預設,單一專案中的所有資源都允許透過內部網路相互通訊,但一個專案中的資源無法與另一個專案中的資源通訊。無論資源是否部署至相同叢集,網路政策都會套用這項行為。

您也可以定義 ProjectNetworkPolicy 自訂資源,啟用專案間通訊。這項政策是為每個專案定義,可允許來自其他專案的連入流量。下圖說明為 Backend Project 定義的自訂資源,可從 Frontend ProjectDatabase Project 啟用資料傳輸。ProjectNetworkPolicy

GDC 專案層級政策

此外,監控堆疊會收集整個機構的指標,但您可以在資源階層的各個層級進行篩選和查詢。您可以查詢叢集或命名空間等實體的指標。

為每個部署環境建立專案

建議您為每個工作負載分別建立專案,用於實際工作環境、開發環境,以及您需要的任何其他部署環境。將實際和開發部署環境分開,可讓您精細定義角色繫結和網路政策,這樣一來,在用於開發的專案中進行變更時,就不會影響實際工作環境。

在專案中授予資源層級的角色繫結

視團隊結構和需求而定,您可以允許開發人員修改所管理專案中的任何資源,也可以要求更精細的存取權控管。在專案中,您可以授予精細的角色繫結,讓個別開發人員存取專案中的部分資源,而非所有資源。舉例來說,團隊可能有一位資料庫管理員,必須管理資料庫但不得修改其他資源,而團隊中的軟體開發人員則不得有權修改資料庫。

設計叢集,在邏輯上隔離 Kubernetes 作業

Kubernetes 叢集並非硬性租戶界線,因為角色繫結網路政策適用於專案,而非 Kubernetes 叢集。Kubernetes 叢集和專案之間為多對多關係。您可以在單一專案中有多個 Kubernetes 叢集,也可以有一個 Kubernetes 叢集跨越多個專案。