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

本頁面將逐步引導您在 Google Distributed Cloud (GDC) 實體隔離方案中建立全域子網路,並將該子網路用於外部負載平衡器 (ELB)。

您可以設定全域子網路,在 GDC 組織的多個可用區中使用外部負載平衡作業。負載平衡可將網路流量分配到多個伺服器,進而提升應用程式和服務的效能、可靠性和可用性。如要進一步瞭解負載平衡的全域子網路,請參閱「關於負載平衡的子網路」。

本頁面適用於應用程式操作員群組中的開發人員,他們希望為組織管理負載平衡。詳情請參閱「GDC 實體隔離方案的目標對象」說明文件。

事前準備

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

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

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

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

建立父項全域子網路

您在本節建立的父項全域子網路,會做為 ELB IP 位址的 IP 位址集區。子網路必須包含 ipam.gdc.goog/network-segment: data 標籤。您可以使用 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/network-segment: data
  name: ELB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    cidr: STATIC_CIDR
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

更改下列內容:

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

如要設定這個子網路,使其與 ELB 搭配運作,您必須為 ELB 建立分葉子網路。

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

動態 CIDR 設定會自動從上層子網路分配指定大小的可用 CIDR 區塊。這項功能可簡化 IP 位址管理作業,在大型環境中特別實用。這個子網路的類型為 Branch。如要進一步瞭解根、分支和葉子子網路類型,請參閱「子網路階層」。如要建立具有動態 CIDR 的全域父項子網路,請使用所選前置碼長度設定 spec.ipv4Request.prefixLength 欄位:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
piVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
  ipam.gdc.goog/network-segment: data
  name: ELB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    prefixLength: PREFIX_LENGTH
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

更改下列內容:

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

如要設定這個子網路,使其與 ELB 搭配運作,您必須為 ELB 建立分葉子網路。

為 ELB 建立葉子網路

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

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

  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/network-segment: data
      name: ELB_IP_SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_REF
        namespace: platform
      type: Leaf
    EOF
    

    更改下列內容:

    • ELB_IP_SUBNET_NAME:您為葉子網路選擇的名稱,例如 lb-project-elb-ip。
    • PROJECT_NAMESPACE:與 ELB 物件所在專案對應的 Kubernetes 命名空間,例如 lb-project。
    • PARENT_REF:這個葉子網路 IP 位址來源的上層子網路名稱,例如先前建立的上層全域子網路。
  2. 將新建立的葉子子網路 (包含分配的 IP 位址) 連結至 ELB 的 ForwardingRuleExternal 資源。在 ForwardingRuleExternal 資源中,更新 spec.cidrRef.name 欄位,參照您在上一步建立的分葉子網路名稱:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleExternal
    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:您為ForwardingRuleExternal物件選擇的名稱,例如 nginx-elb-static-fr。
    • PORT:ELB 監聽傳入流量的通訊埠編號,例如 80。
    • PROTOCOL:ELB 使用的網路通訊協定,例如 TCP 或 UDP。
    • BES_NAME:與這項 ForwardingRuleExternal 資源相關聯的 BackendService 名稱,例如 nginx-bes。
    • LEAF_SUBNET_NAME:您在上一個步驟中建立的分葉子網路名稱,例如 lb-project-elb-ip。