本文說明如何在 Google Distributed Cloud (GDC) Air-gapped 中,為虛擬機器 (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
ingress:
- from:
- projects:
matchNames:
- PROJECT_1
EOF
跨專案 (機構內) 流量
只要套用跨專案網路政策,但位於同一機構內不同專案命名空間的 VM 工作負載就能相互通訊。
一節。輸入跨專案流量網路政策
如要允許專案工作負載與其他專案中的其他工作負載建立連線,您必須設定 Ingress 政策,允許其他專案工作負載傳輸資料。
以下政策可讓 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。 |
輸出跨專案流量網路政策
當您授予跨專案的 Ingress 流量政策,允許一個專案 (PROJECT_1) 中的工作負載連線至另一個專案 (PROJECT_2) 中的工作負載時,系統也會授予相同流程的回程流量。因此,您不需要輸出跨專案流量網路政策。
跨機構流量
如要將 VM 工作負載連線至專案外部的目的地 (位於不同機構),必須明確核准。這是因為 GDC 預設會啟用資料外洩防護功能,禁止專案輸出至專案所屬機構外部的工作負載,因此需要核准。本節將說明如何新增特定輸出政策,以及啟用資料外洩防護功能。
輸入跨機構流量網路政策
如要允許跨機構的輸入流量,必須套用 ProjectNetworkPolicy,允許來自機構外部用戶端的流量進入專案,例如使用 SSH 連線至 VM。
回覆流量不需有相應的 Egress 政策。系統會默許回訪流量。
如要從 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。由於資料外洩防護功能預設為啟用,自訂的 Egress ProjectNetworkPolicy 會在狀態欄位中顯示驗證錯誤,資料平面也會忽略該錯誤。這是正常的。
如「安全性與連線」一文所述,當您允許特定專案的資料外洩時,工作負載可以將資料移出。您允許資料轉出的流量是來源網路位址轉譯 (NAT),使用為專案分配的已知 IP 位址。「安全性與連線」也會提供專案網路政策 (ProjectNetworkPolicy) 的強制執行詳細資料。
回覆流量不需要相應的 Ingress 政策。系統會默許回訪流量。
啟用自訂輸出政策:
設定及套用您自己的自訂 Egress
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的所有其他輸出流量。