本頁面將逐步引導您在 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) 角色。
詳情請參閱「預先定義的角色說明」。
- 請要求 IAM 機構組織管理員授予您負載平衡器管理員 (
建立父項全域子網路
您在本節建立的父項全域子網路,會做為 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,請按照下列步驟操作:
建立葉子網路,並將
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 位址來源的上層子網路名稱,例如先前建立的上層全域子網路。
將新建立的葉子子網路 (包含分配的 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。