如要在專案命名空間層級為虛擬機器 (VM) 工作負載設定網路政策,請使用 ProjectNetworkPolicy
資源,這是適用於 Google Distributed Cloud Air-gapped Appliance (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
專案工作負載的連線,以及相同流程的傳回流量。執行下列指令來套用政策:
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 預設會啟用資料外洩防護功能,禁止專案將資料傳輸至專案所屬機構以外的工作負載,因此需要核准。本節將說明如何新增特定輸出政策,以及如何啟用資料外洩防護功能。
輸入跨機構流量網路政策
設定跨機構外送網路政策後,就不需要授予連入權。工作負載允許來自機構外部的輸出流量,這些流量會通過負載平衡器 (LB),並使用您為專案分配的 IP 位址,做為來源網路位址轉譯 (NAT)。
輸出跨機構流量網路政策
如要允許輸出至機構外部的服務,請自訂專案網路政策 ProjectNetworkPolicy
。不過,由於資料外洩防護功能預設為啟用,自訂的 Egress ProjectNetworkPolicy
會在狀態欄位中顯示驗證錯誤,資料平面也會忽略該錯誤。這是正常的。
允許特定專案外洩資料後,工作負載即可外洩資料。您允許輸出的流量是來源網路位址轉譯 (NAT),使用為專案分配的已知 IP 位址。
以下說明如何啟用自訂輸出政策:
設定及套用您自己的自訂 Egress
ProjectNetworkPolicy
,請參閱kubectl
CLI 範例。在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
的所有其他輸出流量。