建立跨專案網路政策

本頁面提供操作說明,說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中設定跨專案流量網路政策。

跨專案流量是指來自不同專案命名空間,但位於同一機構的服務和工作負載之間的通訊。

專案中的服務和工作負載預設會與外部服務和工作負載隔離。不過,只要套用跨專案流量網路政策,來自不同專案命名空間且位於同一機構的服務和工作負載,就能彼此通訊。

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

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

事前準備

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

  • 必要的 ID 和存取權角色。如要管理特定專案的政策,您需要 project-networkpolicy-admin 角色。在需要管理跨所有區域政策的多區域環境中,您需要 global-project-networkpolicy-admin 角色。詳情請參閱「準備預先定義的角色和存取權」。
  • 現有專案。詳情請參閱「建立專案」一文。

建立跨專案政策

您可以定義專案間的輸入或輸出流量政策,管理專案間的通訊。

建立 Ingress 跨專案政策

如要允許專案工作負載或服務接受來自機構內其他專案中其他工作負載的連線,您必須設定輸入防火牆規則,允許其他專案工作負載的輸入流量。

這項政策適用於貴機構的所有區域。

請按照下列步驟建立新的防火牆規則,並允許來自其他專案中工作負載的傳入流量:

主控台

  1. 在要設定的專案 GDC 控制台中,依序前往導覽選單中的「Networking」(網路) >「Firewall」(防火牆),開啟「Firewall」(防火牆) 頁面。
  2. 按一下動作列中的「建立」,即可開始建立新的防火牆規則。
  3. 在「防火牆規則詳細資料」頁面上,填寫下列資訊:

    1. 在「Name」(名稱) 欄位中,輸入防火牆規則的有效名稱。
    2. 在「流量方向」專區選取「輸入」,允許來自其他專案工作負載的輸入流量。
    3. 在「目標」部分中,選取下列其中一個選項:
      • 所有使用者工作負載:允許連線至您要設定的專案工作負載。
      • 服務:指出這項防火牆規則的目標是您要設定的專案中的特定服務。
    4. 如果目標是專案服務,請從「服務」下拉式選單的可用服務清單中,選取服務名稱。
    5. 在「從」部分,選取下列其中一個選項:
      • 所有專案:允許來自相同機構所有專案中工作負載的連線。
      • 其他專案所有使用者工作負載:允許來自相同機構中其他專案工作負載的連線。
    6. 如要只轉移其他專案的工作負載,請從「專案 ID」下拉式選單的專案清單中,選取您有權存取的專案。
    7. 如果目標是所有使用者工作負載,請在「通訊協定和通訊埠」部分選取下列任一選項:
      • 允許所有連線:允許使用任何通訊協定或通訊埠連線。
      • 指定的通訊協定和通訊埠:只允許使用您在輸入防火牆規則的對應欄位中指定的通訊協定和通訊埠建立連線。
  4. 在「防火牆規則詳細資料」頁面上,按一下「建立」

您現在已允許來自同一個機構內其他專案工作負載的連線。建立防火牆規則後,該規則會顯示在「Firewall」(防火牆) 頁面的表格中。

API

下列政策可讓 PROJECT_1 專案中的工作負載允許來自 PROJECT_2 專案工作負載的連線,以及相同流程的傳回流量。套用政策:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_1
  name: allow-inbound-traffic-from-PROJECT_2
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT_2
EOF

GLOBAL_API_SERVER 替換為全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果您尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。

上述指令允許 PROJECT_2 前往 PROJECT_1,但不允許從 PROJECT_1 啟動連線前往 PROJECT_2。如要使用後者,您必須在 PROJECT_2 專案中設定互惠政策。套用互惠政策:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_2
  name: allow-inbound-traffic-from-PROJECT_1
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT_1
EOF

現在允許連線至 PROJECT_1PROJECT_2,以及從這兩者連線。

建立跨專案輸出政策

授予跨專案流量政策的連入權限後,一個專案中的工作負載就能允許來自另一個專案中工作負載的連線,這項動作也會授予相同流程的回傳流量。因此,原始專案不需要輸出跨專案流量網路政策。

舉例來說,如果您建立的政策允許流量從 PROJECT_1 流向 PROJECT_2,且資料外洩防護功能已停用,則必須在 PROJECT_2 中建立輸入政策,並在 PROJECT_1 中建立輸出政策。不過,回覆封包不在政策強制執行範圍內,因此不需要任何額外政策。

請按照下列步驟建立新的防火牆規則,並允許專案中工作負載的外送流量:

  1. 在要設定的專案 GDC 控制台中,依序前往導覽選單中的「Networking」(網路) >「Firewall」(防火牆),開啟「Firewall」(防火牆) 頁面。
  2. 按一下動作列中的「建立」,即可開始建立新的防火牆規則。
  3. 在「防火牆規則詳細資料」頁面上,填寫下列資訊:

    1. 在「Name」(名稱) 欄位中,輸入防火牆規則的有效名稱。
    2. 在「流量方向」專區選取「輸出」,表示這項防火牆規則會控管輸出流量。
    3. 在「目標」部分中,選取下列其中一個選項:
      • 所有使用者工作負載:允許來自您要設定專案工作負載的連線。
      • 服務:指出這項防火牆規則的目標是您要設定的專案中的特定服務。
    4. 如果目標是專案服務,請從「服務」下拉式選單的可用服務清單中,選取服務名稱。
    5. 在「收件者」部分,選取下列任一選項:
      • 所有專案:允許連線至相同機構中所有專案的工作負載。
      • 其他專案所有使用者工作負載:允許連線至相同機構中其他專案的工作負載。
    6. 如要將工作負載轉移至其他專案,請從「專案 ID」下拉式選單的專案清單中,選取您有權存取的專案。
    7. 如果目標是所有使用者工作負載,請在「通訊協定和通訊埠」部分選取下列任一選項:
      • 允許所有連線:允許使用任何通訊協定或通訊埠連線。
      • 指定通訊協定和通訊埠:只允許使用您在輸出防火牆規則的對應欄位中指定的通訊協定和通訊埠建立連線。
  4. 在「防火牆規則詳細資料」頁面上,按一下「建立」

您現在已允許連線至同一個機構內的其他專案工作負載。建立防火牆規則後,該規則會顯示在「Firewall」(防火牆) 頁面的表格中。

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

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

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

  • 如要建立專案間的 Ingress 工作負載層級政策,請建立並套用下列自訂資源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
     namespace: PROJECT_1
     name: allow-cross-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_2
           workloads:
             matchLabels:
               TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    更改下列內容:

    • GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
    • PROJECT_1:接收流量的專案名稱。
    • PROJECT_2:流量來源專案的名稱。
    • 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_1
      name: allow-cross-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_2
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    更改下列內容:

    • GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
    • PROJECT_1:傳送流量的專案名稱。
    • PROJECT_2:接收流量的專案名稱。
    • 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 工作負載層級跨專案政策

  1. 如要建立單一可用區的 Ingress 工作負載層級跨專案政策,請建立並套用下列自訂資源:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT_1
      name: allow-single-zone-cross-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_2
            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_1:接收流量的專案名稱。
    • PROJECT_2:流量來源專案的名稱。
    • 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_1
      name: allow-single-zone-cross-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_2
            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_1:傳送流量的專案名稱。
    • PROJECT_2:接收流量的專案名稱。
    • 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 相關聯的值。指定允許流量的目的地區域。