本頁面提供操作說明,說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中,設定專案內流量網路政策。
專案網路政策會定義輸入或輸出規則。您可以定義政策,允許專案內、專案間以及與外部 IP 位址的通訊。
根據預設,這些政策適用於所有區域。如要進一步瞭解 GDC 宇宙中的全域資源,請參閱多區域總覽。
如需在單一區域內強制執行專案內流量,請參閱「建立單一區域工作負載層級的專案內政策」。
事前準備
如要設定專案內流量網路政策,您必須具備下列條件:
- 必要的身分與存取權角色。如要管理特定專案的政策,您需要
project-networkpolicy-admin角色。在多區域環境中,如要管理涵蓋所有區域的政策,您需要global-project-networkpolicy-admin角色。詳情請參閱「準備預先定義的角色和存取權」。 - 現有專案。詳情請參閱「建立專案」一文。
建立專案內政策
對於專案內的流量,GDC 預設會對每個專案套用預先定義的專案網路政策 (即專案內政策)。根據預設,專案命名空間中的工作負載可以相互通訊,不必向外部資源公開任何內容。
系統預設並未啟用輸出政策,因此允許所有專案內流量輸出。不過,如果設定單一輸出政策,系統只會允許政策指定的流量。
建立專案內部的 Ingress 政策
建立專案時,您會隱含建立預設的基礎 ProjectNetworkPolicy 資源,允許專案內通訊。這項政策允許來自同一專案中其他工作負載的連入流量。
您可以移除預設政策,但請注意,移除後,專案內所有服務和工作負載都會遭到拒絕,無法進行專案內通訊。如要移除政策,請使用 kubectl delete 指令:
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
您可以套用下列資訊清單,重新新增預設政策:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: base-policy-allow-intra-project-traffic
spec:
policyType: Ingress
ingress:
- from:
- projectSelector:
projects:
matchNames:
- PROJECT
EOF
更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。
建立專案內輸出政策
停用資料外洩防護功能,並對專案套用 ProjectNetworkPolicy 輸出政策 (例如禁止存取外部資源) 時,請使用下列必要政策,允許專案內部的輸出流量:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: allow-intra-project-outbound-traffic
spec:
policyType: Egress
egress:
- to:
- projectSelector:
projects:
matchNames:
- PROJECT
EOF
更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。
建立工作負載層級的專案內政策
工作負載層級的網路政策可精細控管專案內個別工作負載之間的通訊。這種精細程度可嚴格控管網路存取權,進而提升安全性和資源使用率。
建立工作負載層級的專案內送流量政策
建立專案時,系統會隱含建立預設的基礎 ProjectNetworkPolicy 資源,允許所有工作負載在專案內通訊。這項政策允許來自同一專案中其他工作負載的連入流量。
如要建立專案內部的輸入工作負載層級政策,請先刪除預設基本政策。否則可能會發生非預期的行為。
如要刪除預設基本政策,請執行下列指令:
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT如要建立專案內部的 Ingress 工作負載層級政策,請建立並套用下列自訂資源:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-workload-level-intra-project-inbound-traffic spec: policyType: Ingress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - PROJECT workloadSelector: labelSelector: workloads: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。
建立專案內部的輸出工作負載層級政策
如要建立專案內工作負載層級的出站政策,請建立並套用下列自訂資源:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-workload-level-intra-project-outbound-traffic spec: policyType: Egress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: workloads matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - PROJECT workloadSelector: labelSelector: workloads: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY為app,且SUBJECT_LABEL_VALUE為backend,則具有app: backend標籤的工作負載會傳送流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。
建立單一可用區工作負載層級的專案內政策
工作負載層級的網路政策可強制執行單一區域的 PNP。您可以為單一區域內的工作負載新增特定標籤,控管專案內或不同專案中,該區域內個別工作負載之間的通訊。
建立單一區域的 Ingress 工作負載層級專案內政策
建立專案時,您會隱含建立預設基礎 ProjectNetworkPolicy 資源,允許所有工作負載在專案內通訊。這項政策允許來自同一專案中其他工作負載的連入流量。
如要建立單一區域的 Ingress 工作負載層級專案內政策,請先刪除預設基本政策。否則可能會發生非預期的行為。
如要刪除預設基本政策,請執行下列指令:
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT如要建立單一可用區的 Ingress 工作負載層級專案內流量網路政策,請建立並套用下列自訂資源:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-single-zone-intra-project-inbound-traffic spec: policyType: Ingress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - PROJECT workloadSelector: labelSelector: workloads: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE ZONE_PEER_LABEL_KEY: ZONE_PEER_LABEL_VALUE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。ZONE_SUBJECT_LABEL_KEY:用於選取主體區域的標籤鍵。例如zone或region。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。ZONE_SUBJECT_LABEL_VALUE:與ZONE_SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果ZONE_SUBJECT_LABEL_KEY是zone,而ZONE_SUBJECT_LABEL_VALUE是us-central1-a,則標籤為zone: us-central1-a的工作負載會接收流量。ZONE_PEER_LABEL_KEY:用於選取與對等互連相關聯區域的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。ZONE_PEER_LABEL_VALUE:與ZONE_PEER_LABEL_KEY相關聯的值。
建立單一區域輸出工作負載層級的專案內政策
如要建立單一區域輸出工作負載層級的專案內政策,請建立並套用下列自訂資源:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-single-zone-intra-project-outbound-traffic spec: policyType: Egress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - PROJECT workloadSelector: labelSelector: workloads: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE ZONE_PEER_LABEL_KEY: ZONE_PEER_LABEL_VALUE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。ZONE_SUBJECT_LABEL_KEY:用於選取主體區域的標籤鍵。例如zone或region。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。ZONE_SUBJECT_LABEL_VALUE:與ZONE_SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果ZONE_SUBJECT_LABEL_KEY是zone,而ZONE_SUBJECT_LABEL_VALUE是us-central1-a,則標籤為zone: us-central1-a的工作負載會接收流量。ZONE_PEER_LABEL_KEY:用於選取與對等互連相關聯區域的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。ZONE_PEER_LABEL_VALUE:與ZONE_PEER_LABEL_KEY相關聯的值。
為標準叢集建立專案內政策
標準叢集是專案範圍的 Kubernetes 叢集,可提供更完善的控制、彈性和叢集管理員權限。建立專案內政策時,標準叢集預設會繼承該政策。這項政策允許相同專案中標準叢集內的所有通訊。
為標準叢集建立專案內 Ingress 政策
建立專案時,系統會隱含建立預設的基礎 ProjectNetworkPolicy 資源,允許所有工作負載在專案內通訊。這項政策允許來自相同專案中其他工作負載的傳入流量,也允許專案中標準叢集內所有工作負載之間的叢集內通訊。
如要為標準叢集建立專案內送流量政策,請先刪除預設基本政策。否則可能會發生非預期的行為。
如要刪除預設基本政策,請執行下列指令:
kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT您可以套用下列資訊清單,重新新增預設政策:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: base-policy-allow-intra-project-traffic spec: policyType: Ingress ingress: - from: - projectSelector: projects: matchNames: - PROJECT EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT:專案名稱。
如要在標準叢集中建立叢集內 Pod 對 Pod 的 Ingress 政策,請建立並套用下列自訂資源
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: STANDARD_CLUSTER_PROJECT name: allow-ingress-from-intra-cluster-traffic spec: policyType: Ingress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME namespaces: matchLabels: kubernetes.io/metadata.name: SUBJECT_NAMESPACE workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - STANDARD_CLUSTER_PROJECT workloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME namespaces: matchLabels: kubernetes.io/metadata.name: PEER_NAMESPACE workloads: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。STANDARD_CLUSTER_PROJECT:標準叢集專案的名稱。STANDARD_CLUSTER_NAME:標準叢集的名稱。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。PEER_NAMESPACE:標準叢集中的對等互連命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。
如要在標準叢集中建立 Ingress 叢集內節點到 Pod 的政策,請建立並套用下列自訂資源:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: STANDARD_CLUSTER_PROJECT name: allow-ingress-from-node-to-pod-traffic spec: policyType: Ingress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME namespaces: matchLabels: kubernetes.io/metadata.name: SUBJECT_NAMESPACE workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ingress: - from: - ipBlocks: - cidr: NODE_IP ports: - protocol: TCP port: PORT EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。STANDARD_CLUSTER_PROJECT:標準叢集專案的名稱。STANDARD_CLUSTER_NAME:標準叢集的名稱。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。NODE_IP:節點的 IP 位址。PORT:允許流量的主體工作負載通訊埠。
為標準叢集建立專案內輸出政策
如要在標準叢集中建立叢集內 Pod 對 Pod 的輸出政策,請建立並套用下列自訂資源
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: STANDARD_CLUSTER_PROJECT name: allow-egress-to-intra-cluster-traffic spec: policyType: Egress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME namespaces: matchLabels: kubernetes.io/metadata.name: SUBJECT_NAMESPACE workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - STANDARD_CLUSTER_PROJECT workloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME namespaces: matchLabels: kubernetes.io/metadata.name: PEER_NAMESPACE workloads: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。STANDARD_CLUSTER_PROJECT:標準叢集專案的名稱。STANDARD_CLUSTER_NAME:標準叢集的名稱。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。PEER_NAMESPACE:標準叢集中的對等互連命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY為app,且SUBJECT_LABEL_VALUE為backend,則具有app: backend標籤的工作負載會傳送流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。
- 如要在 Standard 叢集中建立叢集內 Pod 到節點的出站政策,請建立並套用下列自訂資源:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: STANDARD_CLUSTER_PROJECT name: allow-egress-from-pod-to-node-traffic spec: policyType: Egress subject: subjectType: UserWorkload userWorkloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME namespaces: matchLabels: kubernetes.io/metadata.name: SUBJECT_NAMESPACE workloads: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE egress: - to: - ipBlocks: - cidr: NODE_IP ports: - protocol: TCP port: PORT EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。 如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。STANDARD_CLUSTER_PROJECT:標準叢集專案的名稱。STANDARD_CLUSTER_NAME:標準叢集的名稱。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier或role。如果您要參照 VM 標籤,必須為這個鍵新增前置字元;請參閱這份清單後方的警告。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY為app,且SUBJECT_LABEL_VALUE為backend,則具有app: backend標籤的工作負載會傳送流量。NODE_IP:節點的 IP 位址。PORT:節點 IP 上允許流量的通訊埠。