本頁面提供操作說明,說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中,設定專案內流量網路政策。
專案網路政策會定義輸入或輸出規則。您可以定義政策,允許專案內、專案間以及與外部 IP 位址的通訊。
根據預設,這些政策適用於所有區域。如要進一步瞭解 GDC 宇宙中的全域資源,請參閱多區域總覽。
如要在單一區域內強制執行專案內流量,請參閱「建立單一區域工作負載層級的專案內政策」。
事前準備
如要設定專案內流量網路政策,您必須具備下列條件:
- 必要的 ID 和存取權角色。如要管理特定專案的政策,您需要
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
:專案名稱。
建立工作負載層級的專案內政策
工作負載層級的網路政策可精細控管專案中個別工作負載之間的通訊。這種精細程度可嚴格控管網路存取權,進而提升安全性和資源使用率。
建立專案內部的 Ingress 工作負載層級政策
建立專案時,您會隱含建立預設的基礎 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-intra-project-inbound-traffic-from-target-to-subject spec: policyType: Ingress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE EOF
更改下列內容:
GLOBAL_API_SERVER
:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT
:專案名稱。SUBJECT_LABEL_KEY
:用於選取來源工作負載的標籤鍵。例如app
、tier
或role
。SUBJECT_LABEL_VALUE
:與SUBJECT_LABEL_KEY
相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果SUBJECT_LABEL_KEY
為app
,且SUBJECT_LABEL_VALUE
為backend
,則標籤為app: backend
的工作負載就是流量來源。TARGET_LABEL_KEY
:用於選取目的地工作負載的標籤鍵。TARGET_LABEL_VALUE
:與TARGET_LABEL_KEY
相關聯的值。這項設定會指定允許的流量目的地工作負載。
建立工作負載層級的專案內輸出政策
如要建立專案內工作負載層級的出站政策,請建立並套用下列自訂資源:
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-to-subject-from-target spec: policyType: Egress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE EOF
更改下列內容:
GLOBAL_API_SERVER
:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT
:專案名稱。SUBJECT_LABEL_KEY
:用於選取來源工作負載的標籤鍵。例如app
、tier
或role
。SUBJECT_LABEL_VALUE
:與SUBJECT_LABEL_KEY
相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果SUBJECT_LABEL_KEY
為app
,且SUBJECT_LABEL_VALUE
為backend
,則標籤為app: backend
的工作負載就是流量來源。TARGET_LABEL_KEY
:用於選取目的地工作負載的標籤鍵。TARGET_LABEL_VALUE
:與TARGET_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-from-target-to-subject spec: policyType: Ingress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE ingress: - from: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE EOF
更改下列內容:
GLOBAL_API_SERVER
:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT
:專案名稱。SUBJECT_LABEL_KEY
:用於選取來源工作負載的標籤鍵。例如app
、tier
或role
。SUBJECT_LABEL_VALUE
:與SUBJECT_LABEL_KEY
相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果SUBJECT_LABEL_KEY
為app
,且SUBJECT_LABEL_VALUE
為backend
,則標籤為app: backend
的工作負載就是流量來源。TARGET_LABEL_KEY
:用於選取目的地工作負載的標籤鍵。TARGET_LABEL_VALUE
:與TARGET_LABEL_KEY
相關聯的值。這項設定會指定允許的流量目的地工作負載。ZONE_SUBJECT_LABEL_KEY
:用於選取來源區域的標籤鍵。例如zone
或region
。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_TARGET_LABEL_KEY
:用於選取目的地可用區的標籤鍵。ZONE_TARGET_LABEL_VALUE
:與ZONE_TARGET_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-to-subject-from-target spec: policyType: Egress subject: subjectType: UserWorkload workloadSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE egress: - to: - projectSelector: projects: matchNames: - PROJECT workloads: matchLabels: TARGET_LABEL_KEY: TARGET_LABEL_VALUE ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE EOF
更改下列內容:
GLOBAL_API_SERVER
:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT
:專案名稱。SUBJECT_LABEL_KEY
:用於選取來源工作負載的標籤鍵。例如app
、tier
或role
。SUBJECT_LABEL_VALUE
:與SUBJECT_LABEL_KEY
相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果SUBJECT_LABEL_KEY
為app
,且SUBJECT_LABEL_VALUE
為backend
,則標籤為app: backend
的工作負載就是流量來源。TARGET_LABEL_KEY
:用於選取目的地工作負載的標籤鍵。TARGET_LABEL_VALUE
:與TARGET_LABEL_KEY
相關聯的值。這項設定會指定允許的流量目的地工作負載。ZONE_SUBJECT_LABEL_KEY
:用於選取來源區域的標籤鍵。例如zone
或region
。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_TARGET_LABEL_KEY
:用於選取目的地可用區的標籤鍵。ZONE_TARGET_LABEL_VALUE
:與ZONE_TARGET_LABEL_KEY
相關聯的值。指定允許流量的目的地區域。