建立專案內網路政策

本頁面提供操作說明,說明如何在 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 資源,允許所有工作負載在專案內通訊。這項政策允許來自同一專案中其他工作負載的連入流量。

如要建立專案內部的輸入工作負載層級政策,必須先刪除預設基本政策。否則可能會發生非預期的行為。

  1. 如要刪除預設基本政策,請執行下列指令:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. 如要建立專案內部的 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:用於選取來源工作負載的標籤鍵。例如 apptierrole
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果 SUBJECT_LABEL_KEYapp,且 SUBJECT_LABEL_VALUEbackend,則標籤為 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:用於選取來源工作負載的標籤鍵。例如 apptierrole
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果 SUBJECT_LABEL_KEYapp,且 SUBJECT_LABEL_VALUEbackend,則標籤為 app: backend 的工作負載就是流量來源。
    • TARGET_LABEL_KEY:用於選取目的地工作負載的標籤鍵。
    • TARGET_LABEL_VALUE:與 TARGET_LABEL_KEY 相關聯的值。這項設定會指定允許的流量目的地工作負載。

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

工作負載層級的網路政策可沿著單一區域強制執行 PNP。您可以為單一區域內的工作負載新增特定標籤,控管專案內或該區域不同專案中個別工作負載之間的通訊。

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

建立專案時,您會隱含建立預設的基礎 ProjectNetworkPolicy 資源,允許所有工作負載在專案內通訊。這項政策允許來自同一專案中其他工作負載的連入流量。

如要建立單一區域的 Ingress 工作負載層級專案內政策,必須先刪除預設基本政策。否則可能會發生非預期的行為。

  1. 如要刪除預設基本政策,請執行下列指令:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. 如要建立單一可用區的 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:用於選取來源工作負載的標籤鍵。例如 apptierrole
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果 SUBJECT_LABEL_KEYapp,且 SUBJECT_LABEL_VALUEbackend,則標籤為 app: backend 的工作負載就是流量來源。
    • TARGET_LABEL_KEY:用於選取目的地工作負載的標籤鍵。
    • TARGET_LABEL_VALUE:與 TARGET_LABEL_KEY 相關聯的值。這項設定會指定允許的流量目的地工作負載。
    • ZONE_SUBJECT_LABEL_KEY:用於選取來源區域的標籤鍵。例如 zoneregion
    • ZONE_SUBJECT_LABEL_VALUE:與 ZONE_SUBJECT_LABEL_KEY 相關聯的值。指定允許流量的來源區域。舉例來說,如果 ZONE_SUBJECT_LABEL_KEYzone,且 ZONE_SUBJECT_LABEL_VALUEus-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:用於選取來源工作負載的標籤鍵。例如 apptierrole
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。這項規則會指定允許流量的來源工作負載。舉例來說,如果 SUBJECT_LABEL_KEYapp,且 SUBJECT_LABEL_VALUEbackend,則標籤為 app: backend 的工作負載就是流量來源。
    • TARGET_LABEL_KEY:用於選取目的地工作負載的標籤鍵。
    • TARGET_LABEL_VALUE:與 TARGET_LABEL_KEY 相關聯的值。這項設定會指定允許的流量目的地工作負載。
    • ZONE_SUBJECT_LABEL_KEY:用於選取來源區域的標籤鍵。例如 zoneregion
    • ZONE_SUBJECT_LABEL_VALUE:與 ZONE_SUBJECT_LABEL_KEY 相關聯的值。指定允許流量的來源區域。舉例來說,如果 ZONE_SUBJECT_LABEL_KEYzone,且 ZONE_SUBJECT_LABEL_VALUEus-central1-a,則標籤為 zone: us-central1-a 的工作負載就是流量來源。
    • ZONE_TARGET_LABEL_KEY:用於選取目的地可用區的標籤鍵。
    • ZONE_TARGET_LABEL_VALUE:與 ZONE_TARGET_LABEL_KEY 相關聯的值。指定允許流量的目的地區域。