建立專案內網路政策

本頁面說明如何在 Google Distributed Cloud (GDC) 實體隔離方案中,設定專案內流量網路政策。

專案網路政策會定義輸入或輸出規則。您可以定義政策,允許專案內部、專案之間,以及與外部 IP 位址之間的通訊。

根據預設,這些政策會全域套用至所有可用區。如要進一步瞭解 GDC 宇宙中的全域資源,請參閱「多可用區總覽」。

如需在單一可用區內強制執行專案內流量,請參閱「建立單一可用區工作負載層級專案內政策」。

事前準備

如要設定專案內流量網路政策,您必須具備下列條件:

  • 必要的身分和存取權角色。如要管理流量網路政策,您必須具備專案網路政策管理員 (global-project-networkpolicy-admin) 角色。詳情請參閱「準備預先定義的角色和存取權」。
  • 現有專案。詳情請參閱「建立專案」一文。
  • 如為輸出網路政策,您也必須停用專案的資料竊取防護功能。

建立專案內政策

對於專案內的流量,GDC 會對每項專案套用預先定義的專案網路政策,也就是預設專案內政策。根據預設,專案命名空間中的工作負載可以互相通訊,不會向外部資源公開任何內容。

根據預設,系統不會設定輸出政策,因此所有專案內流量都允許傳出。不過,套用輸出政策後,所選工作負載只能傳送輸出政策允許的流量。如要與同一專案中的其他工作負載和服務保持連線能力,請先建立輸出專案內政策,再套用輸出政策。如果資料竊取防護功能仍處於啟用狀態,請在停用該功能前建立 egress intra-project 政策,因為現有的輸出政策會在該時間點生效。詳情請參閱「預設專案內政策」。

建立 ingress 專案內政策

建立專案時,GDC 會自動在專案命名空間中,建立名為 base-policy-allow-intra-project-traffic 的預設 ProjectNetworkPolicy 資源。這項 Ingress 政策會選取專案中的所有使用者工作負載,並允許來自同一專案中其他工作負載的傳入流量。GDC 只會建立這項政策一次,如果您變更或刪除,系統不會還原。

如要移除預設政策,請使用 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

資訊清單省略 spec.subject,因此政策會套用至專案中的所有使用者工作負載,就像原始預設政策一樣。

更改下列內容:

  • 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:專案名稱。

如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

建立工作負載層級的專案內政策

工作負載層級網路政策可精細控管專案內個別工作負載之間的通訊。這種精細程度可讓您更嚴格控管網路存取權,提升安全性及資源使用效率。

建立輸入工作負載層級專案內政策

建立專案時,GDC 會自動建立名為 base-policy-allow-intra-project-traffic 的預設 ProjectNetworkPolicy 資源,允許專案中所有工作負載之間的傳入流量。

刪除預設基本政策後,工作負載層級的專案內政策才會限制流量。為避免服務中斷,請建立政策並確認已準備就緒,然後刪除預設基本政策:

  1. 如要建立 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 相關聯的值。

    如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

  2. 政策準備就緒後,請刪除預設基礎政策,讓政策生效:

    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: 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。您可以為單一可用區內的工作負載新增特定標籤,控管該可用區內專案或不同專案中個別工作負載之間的通訊。

建立單一可用區輸入工作負載層級專案內政策

建立專案時,GDC 會自動建立名為 base-policy-allow-intra-project-traffic 的預設 ProjectNetworkPolicy 資源,允許專案中所有工作負載之間的傳入流量。

刪除預設基本政策後,單一可用區工作負載層級專案內政策才會限制流量。為避免服務中斷,請建立政策並確認已準備就緒,然後刪除預設基本政策:

  1. 如要建立單一可用區輸入工作負載層級專案內流量網路政策,請建立並套用下列自訂資源:

    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 相關聯的值。

    如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

  2. 政策準備就緒後,請刪除預設基礎政策,讓政策生效:

    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: 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 專案內政策

建立專案時,GDC 會自動建立名為 base-policy-allow-intra-project-traffic 的預設 ProjectNetworkPolicy 資源,允許專案中所有工作負載之間的傳入流量,包括專案中標準叢集內所有工作負載之間的叢集內通訊。

刪除預設基礎政策後,標準叢集的 ingress 專案內政策才會限制流量。為避免服務中斷,請按照下列步驟建立政策,並確認政策已準備就緒,然後刪除預設基本政策:

  1. 如要在標準叢集中建立輸入叢集內 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-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 相關聯的值。

    如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

  2. 使用 ipBlocks 欄位控管 Pod 和特定叢集節點之間的流量,是預先發布版功能。如需詳細資訊和規模考量,請參閱「使用 IP 區塊指定叢集節點」。如要在標準叢集中建立 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_NAMESPACE:標準叢集中的主體命名空間。
    • SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier 或 role。
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。舉例來說,如果 SUBJECT_LABEL_KEY 為 app,且 SUBJECT_LABEL_VALUE 為 webhook,則標籤為 app: webhook 的工作負載會接收流量。
    • NODE_IP:來源叢集節點的 IP 位址 (採用 /32 標記法) 或 CIDR 範圍,系統會允許來自該節點的流量。
    • PORT:主體工作負載上允許流量的通訊埠 (例如 8443 或 443)。

    如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

  3. 政策準備就緒後,請刪除預設基本政策,讓政策生效:

    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:專案名稱。

如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

為標準叢集建立輸出專案內政策

  1. 如要在標準叢集建立輸出叢集內 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 相關聯的值。

    如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

  2. 使用 ipBlocks 欄位控管 Pod 和特定叢集節點之間的流量,是預先發布版功能。如需詳細資訊和規模考量,請參閱「使用 IP 區塊指定叢集節點」。如要在標準叢集中建立輸出叢集內 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_NAMESPACE:標準叢集中的主體命名空間。
    • SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如:app、tier 或 role。
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。舉例來說,如果 SUBJECT_LABEL_KEY 為 app,且 SUBJECT_LABEL_VALUE 為 controller,則標籤為 app: controller 的工作負載會傳送流量。
    • NODE_IP:目的地叢集節點的 IP 位址 (採用 /32 標記法) 或 CIDR 範圍,允許流量傳送至該節點。
    • PORT:目的地節點上允許流量的通訊埠 (例如 6444 或 443)。

    如要確認政策是否已準備就緒,請參閱「確認政策是否已準備就緒」。

確認政策是否就緒

執行下列指令,確認專案網路政策已就緒:

kubectl --kubeconfig GLOBAL_API_SERVER get pnp POLICY_NAME -n PROJECT -oyaml

將 POLICY_NAME 替換為要驗證的政策名稱,並將 PROJECT 替換為建立政策的專案名稱。

在輸出內容的 Ready 條件中,尋找 status: "True":

...
status:
  ...
  conditions:
  - lastTransitionTime: "2026-03-24T10:55:25Z"
    message: ProjectNetworkPolicy propagated to remote clusters
    observedGeneration: 1
    reason: Propagated
    status: "True"
    type: Ready
...