本文說明如何在 Google Distributed Cloud (GDC) 實體隔離方案中,為虛擬機器 (VM) 執行個體設定網路政策。
如要在專案命名空間層級為 VM 工作負載設定網路政策,請使用 ProjectNetworkPolicy 資源,這是 Distributed Cloud 的多叢集網路政策。接著,您可以定義政策,啟用專案內部、專案之間,以及與外部 IP 位址的通訊。
對於專案內的流量,GDC 預設會對每個專案套用預先定義的專案網路政策,即專案內政策,您可以覆寫或擴充這項政策。如要啟用及控管同一組織內不同專案之間的流量,請定義跨專案網路政策。如果有多項政策,GDC 會將各項專案的規則累加合併。如果至少有一項規則相符,GDC 也會允許流量。
本文適用於平台管理員或應用程式操作員群組中的開發人員,他們負責在 Distributed Cloud 環境中建立及管理 VM 的網路政策。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
要求 IAM 角色
請與 IAM 專案管理員聯絡,要求在專案中取得下列角色:
- 專案 NetworkPolicy 管理員 (
project-networkpolicy-admin):建立、列出、更新及刪除專案命名空間中 VM 執行個體的專案網路政策。
這個角色必須繫結至 VM 所在專案的命名空間。按照步驟驗證存取權。
專案內流量
根據預設,專案命名空間中的 VM 工作負載可以互相通訊,不必向外部公開服務,即使 VM 屬於同一專案中的不同叢集也一樣。
輸入專案內流量網路政策
建立專案時,您會在 Management API 伺服器上建立預設基礎 ProjectNetworkPolicy,以允許專案內通訊。這項政策允許來自相同專案中其他工作負載的輸入流量。您可以移除這項規則,但請務必小心,因為這樣會拒絕專案內和容器工作負載通訊。
輸出流量專案內流量網路政策
根據預設,您不需要對輸出作業採取任何行動。這是因為在沒有輸出政策的情況下,系統會允許所有流量。不過,如果設定單一政策,則只有政策指定的流量會獲得允許。
停用資料竊取防護功能,並對專案套用輸出 ProjectNetworkPolicy (例如禁止存取外部資源) 時,請使用必要政策允許專案內輸出:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_1
name: allow-intra-project-egress-traffic
spec:
policyType: Egress
egress:
- to:
- projectSelector:
projects:
matchNames:
- PROJECT_1
EOF
跨專案 (組織內) 流量
只要套用跨專案網路政策,不同專案命名空間但位於相同組織的 VM 工作負載,就能互相通訊。
輸入跨專案流量網路政策
如要允許專案工作負載接收其他專案工作負載的連線,您必須設定輸入政策,允許其他專案工作負載傳出資料。
下列政策可讓 PROJECT_1 專案中的工作負載,允許來自 PROJECT_2 專案中工作負載的連線,以及相同流量的回傳流量。如要從 PROJECT_2 內部的來源存取 PROJECT_1 中的 VM,也可以使用這項政策。執行下列指令來套用政策:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_1
name: allow-ingress-traffic-from-PROJECT_2
spec:
policyType: Ingress
subject:
subjectType: UserWorkload
ingress:
- from:
- projects:
matchNames:
- PROJECT_2
EOF
上述指令允許 PROJECT_2 前往 PROJECT_1,但不允許從 PROJECT_1 啟動連線至 PROJECT_2。如果是後者,您必須在 PROJECT_2 專案中設定對等政策。執行下列指令,套用對等政策:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_2
name: allow-ingress-traffic-from-PROJECT_1
spec:
policyType: Ingress
subject:
subjectType: UserWorkload
ingress:
- from:
- projects:
matchNames:
- PROJECT_1
EOF
您現在已允許與 PROJECT_1 和 PROJECT_2 建立連線。
請使用下列變數定義。
| 變數 | 定義 |
|---|---|
MANAGEMENT_API_SERVER | Management API 伺服器 kubeconfig 路徑。 |
PROJECT_1 | GDC 專案名稱,對應範例中的 PROJECT_1。 |
PROJECT_2 | GDC 專案名稱,對應範例中的 PROJECT_2。 |
輸出跨專案流量網路政策
當您授予輸入跨專案流量政策,允許某個專案 PROJECT_1 中的工作負載接受另一個專案 PROJECT_2 中工作負載的連線時,系統也會授予相同流量的回傳流量。因此,您不需要輸出跨專案流量網路政策。
跨組織流量
如要將 VM 工作負載連線至專案外部的目的地,且該目的地屬於其他組織,則必須取得明確核准。這是因為 GDC 預設會啟用資料竊取防護功能,防止專案將資料輸出至專案所在組織以外的工作負載。本節說明如何新增特定輸出政策及啟用資料竊取防護功能。
輸入跨組織流量網路政策
如要允許不同組織之間的輸入流量,必須套用 ProjectNetworkPolicy,允許組織外部用戶端傳送流量至您的專案,例如使用 SSH 連線至 VM。
回覆流量不需要對應的輸出政策。系統會默許回傳流量。
如要從 VM 所在組織外部的來源存取 PROJECT_1 中的 VM,必須套用下列政策。您必須取得並使用包含來源 IP 位址的 CIDR。CIDR 應採用 network/len 標記法。例如,192.0.2.0/21 是有效網址。
按照
kubectl範例設定並套用 IngressProjectNetworkPolicy。將政策套用至PROJECT_1中的所有使用者工作負載。這項規則允許輸入流量傳送至CIDR中位於組織外部的所有主機。套用
ProjectNetworkPolicy設定:kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT_1 name: allow-external-traffic spec: policyType: Ingress subject: subjectType: UserWorkload ingress: - from: - ipBlock: cidr: CIDR EOF
輸出跨組織流量網路政策
如要啟用資料移轉功能,將資料移轉至組織外部的服務,請自訂專案網路政策 ProjectNetworkPolicy。由於資料竊取防護功能預設為啟用,自訂的輸出 ProjectNetworkPolicy 會在狀態欄位中顯示驗證錯誤,且資料層會忽略該輸出。這是正常現象。
如「安全性與連線能力」一文所述,如果您允許特定專案的資料竊取行為,工作負載就能將資料移轉出去。您允許轉出資料的流量,是使用為專案分配的已知 IP 位址,進行來源網路位址轉譯 (NAT)。「Security and connectivity」(安全性和連線能力) 也會提供專案網路政策 (ProjectNetworkPolicy) 強制執行的詳細資料。
回覆流量不需要對應的輸入政策。系統會默許回傳流量。
啟用自訂輸出政策:
設定並套用自訂輸出
ProjectNetworkPolicy,請參考kubectl範例。將政策套用至PROJECT_1中的所有使用者工作負載。這項規則允許輸出流量傳送至CIDR中位於組織外部的所有主機。第一次嘗試會導致必要狀態錯誤,這是預期行為。套用
ProjectNetworkPolicy設定:kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT_1 name: allow-egress-traffic-to-NAME spec: policyType: Egress subject: subjectType: UserWorkload egress: - to: - ipBlock: cidr: CIDR EOF完成後,請確認狀態顯示驗證錯誤。
請要求管理員使用者停用資料竊取防護功能。這會啟用您的設定,同時禁止所有其他輸出。
查看剛建立的
ProjectNetworkPolicy,確認驗證狀態欄位中的錯誤已消失,且狀態Ready為True,表示政策已生效:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get projectnetworkpolicy allow-egress-traffic-to-NAME \ -n PROJECT_1 \ -o yaml請根據下列定義替換變數。
變數 定義 MANAGEMENT_API_SERVERManagement API 伺服器 kubeconfig 路徑。 PROJECT_1GDC 專案名稱。 CIDR允許目的地的無類別跨網域路由 (CIDR) 區塊。 NAME與目的地相關聯的名稱。 套用這項政策後,只要您未定義其他輸出政策,系統就會拒絕
PROJECT_1的所有其他輸出流量。