建立組織外部網路政策

本頁面提供相關操作說明,說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中,設定機構外部流量網路政策。

機構外部流量是指不同機構的服務和工作負載,以及外部端點之間的通訊。

事前準備

如要設定機構外部流量網路政策,您必須具備下列條件:

建立機構外部政策

您可以定義輸入或輸出機構外部流量政策,管理不同機構的服務和工作負載與外部端點之間的通訊。

您可以建立全域機構外部流量專案網路政策,套用至機構中所有區域的流量。如要進一步瞭解 GDC 宇宙中的全域資源,請參閱多區域總覽

如要將服務和工作負載連線至不同機構的專案外部目的地,必須明確核准。您必須停用資料竊取防護,才能允許機構外部流量。

為機構外部流量建立全域輸入防火牆規則

使用外部負載平衡器公開專案中的工作負載時,您也必須建立 ProjectNetworkPolicy Ingress 政策,允許外部用戶端 IP 位址存取工作負載。

這項全域連入政策會套用至貴機構的所有區域。

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

主控台

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

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

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

API

設定及套用自訂的 ProjectNetworkPolicy 輸入政策:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-inbound-traffic-from-external
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - ipBlock:
        cidr: CIDR
EOF

更改下列內容:

  • GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果您尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
  • PROJECT:GDC 專案的名稱。
  • CIDR:另一個機構的 CIDR 區塊。

由於外部負載平衡器使用直接伺服器回傳 (DSR),會保留來源外部 IP 位址,並在回傳路徑上略過負載平衡器,因此必須採用這項政策。

為機構外部流量建立通用輸出防火牆規則

如要將資料轉移至機構外部服務,請先停用資料外洩防護功能。接著,您必須設定輸出防火牆規則,允許專案工作負載或服務的輸出流量。

本節說明在專案層級啟用輸出流量的程序。如要瞭解如何管理工作負載層級的出站連線,請參閱 NAT 總覽

這項通用輸出防火牆規則會套用至貴機構的所有區域。

請按照下列步驟建立新的防火牆規則,允許專案工作負載或服務的輸出流量傳送至其他機構的工作負載:

主控台

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

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

您現在已允許連線至其他機構。建立防火牆規則後,該規則會顯示在「Firewall」(防火牆) 頁面的表格中。

API

如要啟用傳送至機構外部服務的輸出流量,請自訂 ProjectNetworkPolicy 資源。不過,由於資料竊取防範功能預設為啟用,自訂的ProjectNetworkPolicy輸出政策會在狀態欄位中顯示驗證錯誤,資料平面也會忽略該政策。這是正常的。

允許該專案的資料外洩後,即可從指定專案轉移工作負載。您允許的外送流量是來源網路位址轉譯 (NAT),使用為專案分配的已知 IP 位址。

如要啟用自訂輸出政策,請按照下列步驟操作:

  1. 在專案中所有使用者工作負載上,設定及套用您自己的自訂 ProjectNetworkPolicy 輸出政策。

    請參考下列範例:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-outbound-traffic-to-external
    spec:
      subject:
        subjectType: UserWorkload
      egress:
      - to:
        - ipBlock:
            cidr: CIDR
    EOF
    

    這項政策允許傳出流量傳送至 CIDR 區塊中的所有主機,這些主機位於貴機構外部。第一次嘗試時,必須導致預期且必要的狀態錯誤。

  2. 確認狀態是否顯示驗證錯誤。

  3. 請組織 IAM 管理員停用資料竊取防護功能。這項動作會啟用設定,同時禁止所有其他輸出流量。

  4. 檢查您建立的 ProjectNetworkPolicy,確認驗證狀態欄位中的錯誤已消失,且狀態 ReadyTrue,表示政策已生效:

    kubectl --kubeconfig GLOBAL_API_SERVER \
        get projectnetworkpolicy allow-outbound-traffic-to-external \
        -n PROJECT -o yaml
    

    更改下列內容:

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

    • PROJECT:GDC 專案的名稱。

套用這項政策後,如果沒有定義其他輸出政策,PROJECT 就會拒絕所有其他輸出流量。

為標準叢集建立機構外部政策

標準叢集是專案範圍的 Kubernetes 叢集,可提供更完善的控制、彈性和叢集管理員權限。

為標準叢集建立輸入機構外部政策

  1. 如要為標準叢集建立 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-external-endpoint-to-standard-cluster-pod
    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: EXTERNAL_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    更改下列內容:

    • GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
    • STANDARD_CLUSTER_PROJECT:標準叢集專案的名稱。
    • STANDARD_CLUSTER_NAME:標準叢集的名稱。
    • SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如 apptierrole
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。舉例來說,如果 SUBJECT_LABEL_KEYapp,而 SUBJECT_LABEL_VALUEbackend,則標籤為 app: backend 的工作負載會接收流量。
    • EXTERNAL_IP:外部端點的 IP 位址。
    • PORT:允許流量的主體工作負載通訊埠。

為標準叢集建立輸出機構外部政策

  1. 如要為標準叢集建立機構外部輸出政策,請建立並套用下列自訂資源:

    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-standard-cluster-pod-to-external-endpoint
    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: EXTERNAL_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    更改下列內容:

    • GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全球和區域 API 伺服器」。 如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
    • STANDARD_CLUSTER_PROJECT:標準叢集專案的名稱。
    • STANDARD_CLUSTER_NAME:標準叢集的名稱。
    • SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如 apptierrole
    • SUBJECT_LABEL_VALUE:與 SUBJECT_LABEL_KEY 相關聯的值。舉例來說,如果 SUBJECT_LABEL_KEYapp,且 SUBJECT_LABEL_VALUEbackend,則具有 app: backend 標籤的工作負載會傳送流量。
    • EXTERNAL_IP:外部端點的 IP 位址。
    • PORT:允許流量傳輸的外部端點通訊埠。