每個 Google Distributed Cloud (GDC) 氣隙區域都會指派全域根子網路,並搭配 IP 位址管理 (IPAM) 公開 API 子網路。全域根子網路會代管根 IP 位址範圍 (CIDR) 集區,並分割至各個區域,以啟動租戶機構中的所有叢集,包括機構基礎架構叢集和工作負載 VM。IP 位址範圍的一小部分也會提供給根子網路,做為任播 IP 位址集區。
建立機構後,您就可以為 GDC 宇宙中的子網路完成下列作業:
為新區域建立根範圍全域子網路
每個區域都必須有根範圍的全域子網路。在 GDC 宇宙的初始機構組織啟動階段,每個區域都會自動產生全域子網路。不過,如果在初始安裝後新增區域,您必須手動為新區域建立根範圍全域子網路。
為新區域的網路根範圍子網路定義 CIDR 範圍
與定義 CIDR 範圍的機構安裝指南類似,CIDR 範圍不得重疊,也不得與 zone-infra-cidr 和現有的根層級全域子網路重疊。這些子網路在自訂資源規格中帶有 ipam.gdc.goog/usage: network-root-range 標籤。
zone-infra-cidr 存在於每個區域,如果客戶已定義,則可從客戶資訊問卷 (CIQ) 中擷取。
如要擷取
zone-infra-cidr,請執行:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system zone-infra-cidr請記下 CIDR 範圍。
您必須擁有與機構名稱相符的命名空間。確認這個命名空間是否存在:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespace ORG_NAME擷取現有的根層級全域子網路:
如果是全域根管理員叢集,請執行:
kubectl –kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet \ -n ORG_NAME -l ipam.gdc.goog/usage=network-root-range如要使用全域機構管理員 API 伺服器,請執行下列指令:
kubectl –kubeconfig GLOBAL_ORG_API_SERVER_KUBECONFIG get subnet \ -n platform -l ipam.gdc.goog/usage=network-root-range請記下輸出內容中的所有 CIDR 範圍。
確認新的 CIDR 範圍不會與任何先前的 CIDR 範圍重疊。
確認新的 CIDR 範圍適用於新區域後,請確認 CIDR 範圍符合下列規則:
| CIDR 範圍欄位。 | 大小下限 | VPC/VRF | 全球 API 伺服器 |
|---|---|---|---|
zoneInfraVPCCIDR |
17 | 基礎架構虛擬私有雲 | 全域根目錄 |
zoneDefaultVPCCIDR |
18 | 預設虛擬私有雲 | 全球機構 |
zoneOrgAdminExternalCIDR |
23 | 管理網路區隔 | 全域根目錄 |
zoneOrgDataExternalCIDR |
23 | 資料網路區隔 | 全域根目錄 |
在全域根管理 API 伺服器中建立子網路
如要在全域根管理 API 伺服器中建立子網路,請完成下列步驟:
列出宇宙中的可用區,並找出新的可用區名稱:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -A為機構的新區域建立區域網路根範圍
infra-vpc子網路:kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc ipam.gdc.goog/usage: zone-network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-NEW_ZONE_NAME-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: zoneInfraVPCCIDR zone: NEW_ZONE_NAME propagationStrategy: SingleZone type: Root EOF為機構的新區域建立區域網路根範圍資料網路區隔子網路:
kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: zone-network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: data-external-NEW_ZONE_NAME-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: zoneOrgDataExternalCIDR zone: NEW_ZONE_NAME propagationStrategy: SingleZone type: Root EOF為機構的新區域建立區域網路根範圍管理網路區隔子網路:
kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: admin ipam.gdc.goog/usage: zone-network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: admin-external-NEW_ZONE_NAME-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: zoneOrgAdminExternalCIDR zone: NEW_ZONE_NAME propagationStrategy: SingleZone type: Root EOF
在全域機構管理 API 伺服器中建立子網路
API 伺服器執行後,您必須在機構的全球機構管理 API 伺服器中,於 platform 命名空間內建立預設 VPC 子網路。
建立及套用下列 Subnet 自訂資源:
kubectl apply -f --kubeconfig=GLOBAL_ORG_API_SERVER_KUBECONFIG - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: default-vpc
ipam.gdc.goog/usage: zone-network-root-range
name: default-vpc-NEW_ZONE_NAME-root-cidr
namespace: platform
spec:
type: Root
ipv4Request:
cidr: zoneDefaultVPCCIDR
zone: NEW_ZONE_NAME
propagationStrategy: SingleZone
EOF
升級子網路
公開 Subnet 資源不支援自動升級。如要將更多 CIDR 範圍新增至客戶管理的虛擬私有雲或網路區隔,您必須建立新的子網路,並將這些子網路與特定標籤分組。由於需要存取根管理員叢集,客戶無法自行擴充子網路。
子網路分組規則
子網路會依標籤分組為不同類別:
| 類別 | 標籤 |
|---|---|
| 預設虛擬私有雲 | ipam.gdc.goog/vpc: default-vpc |
| 基礎架構虛擬私有雲 | ipam.gdc.goog/vpc: infra-vpc |
| 管理網路區隔 | ipam.gdc.goog/network-segment: admin |
| 資料網路區隔 | ipam.gdc.goog/network-segment: data |
在初始啟動期間,組織攝取問卷 (OIQ) 中指定了四個 CIDR 範圍。這四個全域子網路是在建立客戶機構時,於全域 API 伺服器中建立。這些全域子網路是機構中所有可用區各類別的根層級 CIDR 範圍。所有根層級的全球子網路都有 ipam.gdc.goog/usage: network-root-range 標籤。
系統會從根層級子網路中劃出每個可用區的子網路,並在全域 API 伺服器中建立子網路。每個子項全域子網路都會代管特定區域中某個類別的 CIDR 範圍,並具有 ipam.gdc.goog/usage: zone-network-root-range 標籤。系統會自動將可用區的子項全域子網路傳播至特定可用區。
常見的升頻用途
如要為現有子網路擴充功能,以最有效率的方式分配額外子網路,請考慮各子網路類別的建議用途。開始升級程序前,請先決定要升級的類別。
預設虛擬私有雲
default-vpc 中的子網路主要用於為共用服務叢集、使用者叢集和default-vpc-default-node-subnet分配 Pod 和服務 CIDR,以及機構的叢集節點 IP 位址和工作負載 IP 位址。
無法建立使用者叢集是常見情況,這時可能需要擴充子網路。
如果找不到 Pod 或使用者叢集服務 CIDR 的父項子網路,建立使用者叢集可能會失敗。這類失敗的訊息範例如下:
could not find parent for subnet platform/user-vm-1-service-cidr
這個問題可能是由多種原因所致,直接與子網路升級需求有關。請按照下列步驟確認:
檢查
Cluster自訂資源的.spec.clusterNetwork區段中的podCIDRSize和serviceCIDRSize欄位:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get cluster \ -n platform USER_CLUSTER_NAME -oyaml輸出看起來類似以下內容:
Example: spec: clusterNetwork: podCIDRSize: 20 serviceCIDRSize: 20找出現有子網路的父項子網路:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform -l \ ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=zone-network-root-range輸出看起來類似以下內容:
Example: NAME PARENT READY IPV4 CIDR IPV6 CIDR default-vpc-zone0-cidr True 198.51.100.0/18找出父項子網路分配的所有子網路:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform -l \ ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage!=zone-network-root-range輸出看起來類似以下內容:
Example: default-vpc-default-node-subnet {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.100.0/23 g-org-1-shared-service-pod-cidr {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.16.0/20 g-org-1-shared-service-service-cidr {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.2.0/23 user-vm-1-pod-cidr {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.8.0/21 user-vm-1-service-cidr {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.4.0/23 user-vm-2-pod-cidr {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.32.0/21 user-vm-2-service-cidr {"name":"default-vpc-zone0-cidr","namespace":"platform"} True 198.51.6.0/23
在這個範例中,/18 父項 CIDR 分配了四個 /23 CIDR、一個 /20 CIDR 和兩個 /21 CIDR,而新使用者叢集要求 podCIDRSize 的 /20 CIDR 和 serviceCIDRSize 的 /20 CIDR,這並不夠。
在這種情況下,您必須為預設虛擬私有雲新增更多類別的子網路。
基礎架構虛擬私有雲
infra-vpc 中的子網路主要用於為機構基礎架構叢集和周邊叢集分配機構的 Pod 和服務 CIDR,以及周邊叢集的節點 IP 位址。
由於這屬於內部 GDC 基礎架構設定,且每個機構組織只有一個機構組織基礎架構叢集和一個周邊叢集,因此通常 infra-vpc 不需要升級作業。
管理網路區隔
管理網路區隔中的子網路主要用於在機構管理員虛擬轉送和轉送 (VRF) 中分配 IP 位址。在機構中建立預設節點子網路,或含有閘道資訊的子網路。這個預設子網路會為機構基礎架構叢集節點 IP 位址和周邊叢集節點 IP 位址分配 IP 位址。
由於管理員網路區隔屬於內部 GDC 基礎架構設定,且每個機構只能有一個機構基礎架構叢集和一個周邊叢集,因此通常不需要擴充這個子網路。
資料網路區隔
資料網路區隔中的子網路主要用於在機構資料 VRF 中分配 IP 位址。機構中已建立預設節點子網路,或含有閘道資訊的子網路。這個預設子網路會為機構基礎架構叢集節點 IP 位址和周邊叢集節點 IP 位址分配 IP 位址。
由於資料網路區隔屬於內部 GDC 基礎架構設定,且每個機構只能有一個機構基礎架構叢集和一個周邊叢集,因此通常不需要擴充這個子網路。
為類別新增更多子網路
您可以根據子網路類型,為類別新增更多子網路。以下類型可新增更多子網路:
- 基礎架構虛擬私有雲
- 管理網路區隔
- 資料網路區隔
- 預設虛擬私有雲
找出要新增子網路的子網路類型,然後完成該子網路類型的下列步驟:
在全域根管理 API 伺服器中,取得根子網路類型並檢查其 CIDR
maskSize欄位:subnet.status.ipv4Allocation.cidrkubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \ -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=network-root-range更改下列內容:
GLOBAL_ROOT_ADMIN_KUBECONFIG:根管理員叢集的 kubeconfig 檔案路徑。ORG_NAME:機構名稱。SUBNET_TYPE:子網路類型,例如vpc=infra-vpc、network-segment=admin、network-segment=data或vpc=default-vpc。
請記下這個值,也就是 CIDR 總數,稍後會參照這個值。
取得根子網路的所有子項子網路,並檢查
maskSize中的每個 CIDRsubnet.status.ipv4Allocation.cidr欄位:kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \ -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage!=network-root-range請記下每個值做為使用的 CIDR,稍後會參考這些值。
根據總 CIDR 和已用 CIDR,計算子網路的可用 CIDR。如果可用 CIDR 不夠大,無法分配新的子網路,請新增網路根範圍全域子網路。然後繼續執行下一個步驟。
在全域根管理 API 伺服器中建立新的子網路:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/SUBNET_TYPE_LABEL ipam.gdc.goog/usage: zone-network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: SUBNET_NAME namespace: ORG_NAME spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH zone: ZONE_NAME propagationStrategy: SingleZone type: Branch parentReference: name: PARENT_SUBNET_NAME namespace: ORG_NAME EOF更改下列內容:
GLOBAL_ROOT_ADMIN_KUBECONFIG:根管理員叢集的 kubeconfig 檔案路徑。SUBNET_TYPE_LABEL:子網路類型,必須是下列其中一個值:vpc: infra-vpc、network-segment: admin、network-segment: data或vpc: default-vpc。SUBNET_NAME:新子網路的名稱。ORG_NAME:機構名稱。CIDR_PREFIX_LENGTH:新子網路的前置字串長度,例如20。ZONE_NAME:子網路的區域名稱,例如zone1。PARENT_SUBNET_NAME:父項子網路的名稱,例如infra-vpc-root-cidr、admin-external-root-cidr、data-external-root-cidr或default-vpc-root-cidr。
確認子網路已準備就緒,方法是檢查其狀態
Ready類型是否為true。確認機構的全球 API 伺服器中已建立全球子網路,且該子網路已準備就緒:
kubectl --kubeconfig GLOBAL_ORG_ADMIN_KUBECONFIG get subnet -n NAMESPACE -l \ ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range將 NAMESPACE 替換為子網路的命名空間。
infra-network用於infra-vpc子網路,platform用於其他子網路類型。確認區域子網路是在根管理員叢集的機構命名空間中建立,且已準備就緒:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \ -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range確認區域子網路已在
platform命名空間的 Management API 伺服器中建立,且已準備就緒:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n NAMESPACE \ -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
您指定區域的機構子網路升級作業已完成。 管理員可以從新的子網路建立更多子網路。
新增網路根範圍全域子網路
標有 ipam.gdc.goog/usage: network-root-range 標籤的全域子網路會代管這個類別所有區域的 CIDR。如果用完,您必須在全域 API 伺服器中建立新的子網路 network-root-range。您可以視需要建立多個根全域子網路。
如要建立新的 network-root-range 子網路,請完成下列步驟:
為新的網路根範圍全域子網路建立 YAML 檔案,例如
subnet-network-root.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/SUBNET_TYPE ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: SUBNET_NAME namespace: ORG_NAME spec: ipv4Request: cidr: NEW_CIDR type: Root更改下列內容:
SUBNET_TYPE:子網路類型,必須是下列其中一個值:vpc: infra-vpc、network-segment: admin、network-segment: data或vpc: default-vpc。API_SERVER_ANNOTATION:用於識別這個子網路必須轉向另一個 API 伺服器。如果是infra-vpc或管理員和資料網路區隔,請使用ipam.gdc.goog/pivot-destination: global-org。如果您要新增default-vpc根範圍,請勿設定此註解。SUBNET_NAME:新子網路的名稱。ORG_NAME:機構名稱。NEW_CIDR:子網路的新 CIDR。這個 CIDR 不得與所有現有子網路中的任何 CIDR 重疊,且這些子網路在同一個全域根目錄管理 API 伺服器中具有ipam.gdc.goog/usage: network-root-range標籤。