建立內部負載平衡的全球子網路

本頁面將逐步說明如何在 Google Distributed Cloud (GDC) 氣隙環境中建立全域子網路,並將該子網路用於內部負載平衡器 (ILB)。

全域子網路可讓您在 GDC 機構的多個區域中,設定內部負載平衡作業。負載平衡機制可將網路流量分配到多個伺服器,藉此提高應用程式和服務的效能、可靠性和可用性。如要進一步瞭解負載平衡的全域子網路,請參閱負載平衡子網路簡介

本文適用於應用程式運算子群組的開發人員,他們負責管理所屬機構的負載平衡。詳情請參閱 GDC air-gapped 的目標對象說明文件

事前準備

如要建立全域子網路並為 ILB 設定,您必須具備下列條件:

  • 擁有要設定負載平衡器的專案。詳情請參閱「建立專案」一文。
  • 必要的身分與存取權角色:

    • 請要求機構 IAM 管理員授予您「負載平衡器管理員」(load-balancer-admin) 角色。
    • 請機構 IAM 管理員授予您「全域負載平衡器管理員」(global-load-balancer-admin) 角色。
    • 請要求機構 IAM 管理員授予您子網路機構管理員 (subnet-org-admin) 角色。
    • 請組織 IAM 管理員授予您子網路專案管理員 (subnet-project-admin) 角色。

    詳情請參閱預先定義的角色說明

建立上層全域子網路

您在本節中建立的父項全域子網路,會做為 ILB IP 位址的 IP 位址集區。您可以使用 spec.parentReference.name 欄位指定子網路父項。您可以透過下列兩種方式,為這個父項子網路設定 CIDR:

如要進一步瞭解靜態和動態 CIDR 設定的差異,請參閱「靜態和動態 CIDR 設定」。

使用靜態 CIDR 設定建立子網路

如要精確控管 IP 位址空間,請使用靜態 CIDR 設定。這個子網路的類型為 Branch。如要進一步瞭解根、分支和葉子子網路類型,請參閱子網路階層

如要建立具有靜態 CIDR 設定的全域父項子網路,請將所選 CIDR 區塊新增至 spec.ipv4Request.cidr 欄位:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
    ipam.gdc.goog/vpc: default-vpc
  name: ILB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    cidr: STATIC_CIDR
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

更改下列內容:

  • GLOBAL_API_SERVER:全域管理 API 伺服器的 kubeconfig 路徑。詳情請參閱全球和區域 API 伺服器。如果您尚未為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。
  • ILB_PARENT_SUBNET_NAME:ILB 全域父項子網路的所選名稱。
  • STATIC_CIDR:要為這個父項子網路分配的特定 CIDR 區塊,例如 10.0.10.0/27
  • PARENT_NAME:現有父項子網路的名稱,這個新子網路是從該子網路建立。

如要設定這個子網路以搭配 ILB 使用,請為 ILB 建立葉子子網路

使用動態 CIDR 設定建立子網路

動態 CIDR 設定會從父項子網路自動分配指定大小的可用 CIDR 區塊。這項功能可簡化 IP 位址管理作業,尤其是在大型環境中。這個子網路的類型為 Branch。如要進一步瞭解根、分支和葉子子網路類型,請參閱子網路階層

如要建立具有動態 CIDR 的全域父項子網路,請使用所選前置字串長度設定 spec.ipv4Request.prefixLength 欄位:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
    ipam.gdc.goog/vpc: default-vpc
  name: ILB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    prefixLength: PREFIX_LENGTH
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch

EOF

更改下列內容:

  • ILB_PARENT_SUBNET_NAME:您為 ILB 父項子網路選擇的名稱,例如 lb-global-lancer-ilb-subnet
  • STATIC_CIDR:您要使用的特定 CIDR 區塊,例如 10.0.10.0/27。這個變數僅適用於靜態 CIDR 設定。
  • PARENT_NAME:現有父項子網路的名稱,新子網路是從該子網路建立,例如 default-vpc-workload-cidr
  • PREFIX_LENGTH:動態分配 CIDR 的所選前置字串長度,例如 27。這個變數僅適用於動態 CIDR 設定。

如要設定這個子網路以搭配 ILB 使用,請為 ILB 建立葉子子網路

為 ILB 建立葉子子網路

設定全域父項子網路後,您必須建立葉子子網路,為全域 ILB 服務分配單一 IP 位址。這個葉子子網路的 type 欄位值必須為 Leaf,且必須與負載平衡器資源 (例如 ForwardingRuleBackendServiceBackend) 位於同一個專案命名空間。

如要建立葉子子網路並連結至 ILB,請按照下列步驟操作:

  1. 建立 prefixLength 值為 32 的葉子子網路,因為這個子網路會分配單一 IP 位址。parentReference 值會參照先前建立的父項全域子網路

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/allocation-preference: default
        ipam.gdc.goog/vpc: default-vpc
      name: ILB_IP_SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_REF
        namespace: platform
      type: Leaf
    EOF
    

    更改下列內容:

    • ILB_IP_SUBNET_NAME:您為葉子子網路選擇的名稱,例如 lb-project-ilb-ip
    • PROJECT_NAMESPACE:與專案對應的 Kubernetes 命名空間,ILB 物件位於該專案中,例如 lb-project
    • PARENT_REF:這個葉子子網路的 IP 位址來源父項子網路名稱,例如您先前建立的父項全域子網路
  2. 將新建立的葉子子網路 (內含已分配的 IP 位址) 連接至 ILB 的 ForwardingRuleInternal 資源。在 ForwardingRuleInternal 資源中,更新 spec.cidrRef.name 欄位,參照您在上一步建立的葉子子網路名稱:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleInternal
    metadata:
      name: FRI_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ports:
        - port: PORT
          protocol: PROTOCOL
      backendServiceRef:
        name: BES_NAME
      cidrRef:
        name: LEAF_SUBNET_NAME
    EOF
    

    更改下列內容:

    • FRI_NAME:您為 ForwardingRuleInternal 物件選擇的名稱,例如 nginx-ilb-static-fr
    • PORT:ILB 監聽傳入流量的通訊埠號碼,例如 80
    • PROTOCOL:ILB 使用的網路通訊協定,例如 TCPUDP
    • BES_NAME:與這個 ForwardingRuleInternal 資源相關聯的 BackendService 名稱,例如 nginx-bes
    • LEAF_SUBNET_NAME:您在上一個步驟中建立的葉子子網路名稱,例如 lb-project-ilb-ip