如要在專案命名空間層級為虛擬機器 (VM) 工作負載設定網路政策,請使用 ProjectNetworkPolicy
資源,這是 Google Distributed Cloud Air-gapped (GDC) 的多叢集網路政策。您可以透過這項功能定義政策,允許專案內、專案間以及與外部 IP 位址的通訊。
對於專案內的流量,GDC 預設會將預先定義的專案網路政策 (即「專案內政策」) 套用至每個專案。如要啟用及控管同一個機構內跨專案的流量,請定義跨專案政策。如果有多項政策,GDC 會為每個專案加總規則。如果至少有一項規則相符,GDC 也會允許流量。
要求權限和存取權
如要執行這個頁面列出的工作,您必須具備專案 NetworkPolicy 管理員角色。請專案 IAM 管理員在 VM 所在的專案命名空間中,授予您專案 NetworkPolicy 管理員 (project-networkpolicy-admin
) 角色。
專案內流量
根據預設,專案命名空間中的 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 | 管理 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_SERVER
管理 API 伺服器 kubeconfig 路徑。 PROJECT_1
GDC 專案名稱。 CIDR
允許目的地的無類別跨網域路由 (CIDR) 區塊。 NAME
與目的地相關聯的名稱。 套用這項政策後,如果沒有定義其他輸出政策,系統就會拒絕
PROJECT_1
的所有其他輸出流量。