規劃 IP 位址 (kubeception)

本文說明如何規劃 Google Distributed Cloud 安裝作業的 IP 位址,包括使用 kubeception 的使用者叢集。

什麼是 kubeception?

「kubeception」一詞用來傳達「使用 Kubernetes 叢集建立及管理其他 Kubernetes 叢集」的概念。在 Google Distributed Cloud 的環境中,kubeception 是指使用者叢集的控制層在管理員叢集的一或多個節點上執行的情況。

我們不建議使用 kubeception。建議改用Controlplane V2。啟用 Controlplane V2 後,使用者叢集的控制層節點會位於使用者叢集本身。

事前準備

請參閱 Google Distributed Cloud 總覽安裝總覽

IP 位址分配範例

本節提供範例,說明如何在包含下列元素的安裝作業中分配靜態 IP 位址:

  • 管理員工作站

  • 管理員叢集

  • 一個高可用性 (HA) 使用者叢集,內含五個工作站節點

  • 一個非高可用性使用者叢集,內含四個工作站節點

管理員叢集節點

管理員叢集有七個節點:

  • 一個執行管理員叢集控制層的節點
  • 兩個節點,用於執行管理員叢集的外掛程式
  • 三個節點,用於執行高可用性使用者叢集的控制層
  • 一個節點,用於執行非高可用性使用者叢集的控制層

負載平衡

在本例中,假設叢集使用 MetalLB 負載平衡器。這個負載平衡器會在叢集節點上執行,因此不需要額外的 VM 進行負載平衡。

子網路

以本範例來說,假設每個叢集都位於自己的 VLAN,且叢集位於下列子網路中:

VM 子網路 預設閘道
管理員工作站和管理員叢集 172.16.20.0/24 172.16.20.1
使用者叢集 1 172.16.21.0/24 172.16.21.1
使用者叢集 2 172.16.22.0/24 172.16.22.1

下圖說明瞭三個 VLAN 和子網路。請注意,VIP 不會顯示與叢集中的任何特定節點相關聯。這是因為 MetalLB 負載平衡器可以選擇要由哪個節點發布個別服務的虛擬 IP。舉例來說,在使用者叢集 1 中,一個工作站節點可能會公告 172.16.21.31,另一個工作站節點則可能會公告 172.16.21.32。

管理員叢集和兩個使用者叢集的 IP 位址。
管理員叢集和兩個使用者叢集的 IP 位址 (按一下即可放大)

範例 IP 位址:管理員工作站

在本例中,管理員工作站與管理員叢集位於同一個子網路:172.16.20.0/24。靠近節點位址的位址適合做為管理員工作站。例如 172.16.20.20。

IP 位址範例:管理員叢集節點

如果管理員叢集有七個節點,您需要預留八個 IP 位址。由於叢集升級、更新和自動修復時需要額外位址,因此必須提供。舉例來說,您可以為管理員叢集中的節點預留下列 IP 位址:

管理員叢集節點的 IP 位址
172.16.20.2 - 172.16.20.9

IP 位址範例:管理員叢集子網路中的 VIP

下表舉例說明如何指派 VIP,以便在管理員叢集的負載平衡器上設定。請注意,使用者叢集 Kubernetes API 伺服器的 VIP 位於管理員叢集子網路。這是因為在本範例中,使用者叢集的 Kubernetes API 伺服器是在管理員叢集的節點上執行。請注意,在叢集設定檔中,指定 Kubernetes API 伺服器 VIP 的欄位稱為 controlPlaneVIP

VIP IP 位址
管理員叢集 Kubernetes API 伺服器的 VIP 172.16.20.30
管理員叢集外掛程式 VIP 172.16.20.31
使用者叢集 1 的 Kubernetes API 伺服器 VIP 172.16.20.32
使用者叢集 2 的 Kubernetes API 伺服器 VIP 172.16.20.33

IP 位址範例:使用者叢集 1 節點

如果使用者叢集有五個節點,您需要預留六個 IP 位址。由於叢集升級、更新和自動修復時需要額外位址,因此必須提供。舉例來說,您可以為使用者叢集 1 中的節點預留下列 IP 位址:

使用者叢集 1 中節點的 IP 位址
172.16.21.2 - 172.16.21.7

IP 位址範例:使用者叢集 1 子網路中的虛擬 IP

下表舉例說明如何指派 VIP,以便在使用者叢集 1 的負載平衡器上設定:

VIP 說明 IP 位址
使用者叢集 1 的 Ingress VIP 在使用者叢集 1 的負載平衡器上設定 172.16.21.30
使用者叢集 1 的 Service 虛擬 IP 類型為 LoadBalancer 的 Service 有十個位址。
視需要在使用者叢集 1 的負載平衡器上設定。
請注意,這個範圍包含 Ingress VIP。
這是 MetalLB 負載平衡器的必要條件。
172.16.21.30 - 172.16.21.39

IP 位址範例:使用者叢集 2 個節點

如果使用者叢集有四個節點,您需要預留五個 IP 位址。由於叢集升級、更新和自動修復時需要額外位址,因此必須提供。舉例來說,您可以為使用者叢集 2 中的節點預留下列 IP 位址:

使用者叢集 2 中節點的 IP 位址
172.16.22.2 - 172.16.22.6

IP 位址範例:使用者叢集 2 子網路中的虛擬 IP

下表舉例說明如何指派 VIP,以便在使用者叢集 2 的負載平衡器上設定:

VIP 說明 IP 位址
使用者叢集 2 的 Ingress VIP 在使用者叢集 2 的負載平衡器上設定 172.16.22.30
使用者叢集 2 的 Service VIP 類型為 LoadBalancer 的 Service 有十個位址。
視需要在使用者叢集 2 的負載平衡器上設定。
請注意,這個範圍包含 Ingress VIP。
這是 MetalLB 負載平衡器的必要條件。
172.16.22.30 - 172.16.22.39

IP 位址範例:Pod 和服務

建立叢集前,您必須指定用於 Pod IP 位址的 CIDR 範圍,以及用於 Kubernetes 服務 ClusterIP 位址的另一個 CIDR 範圍。

決定要用於 Pod 和 Service 的 CIDR 範圍。例如:

目的CIDR 範圍
管理員叢集中的 Pod192.168.0.0/16
使用者叢集 1 中的 Pod192.168.0.0/16
使用者叢集 2 中的 Pod192.168.0.0/16
管理員叢集中的服務10.96.232.0/24
使用者叢集 1 中的服務10.96.0.0/20
使用者叢集 2 中的服務10.96.128.0/20

上述範例說明瞭以下幾點:

  • 多個叢集可以共用同一個 Pod CIDR 範圍。

  • 通常您需要的 Pod 數量會多於 Service,因此對於指定叢集,您可能需要比 Service CIDR 範圍更大的 Pod CIDR 範圍。使用者叢集的 Pod 範圍範例為 192.168.0.0/16,其中有 2^(32-16) = 2^16 個位址。但使用者叢集的服務範圍範例為 10.96.0.0/20,只有 2^(32-20) = 2^12 個位址。

避免重疊

您可能想使用非預設的 CIDR 範圍,以免與網路中可連線的 IP 位址重疊。Service 和 Pod 範圍不得與您要從叢集內部連結的任何外部位址重疊。

舉例來說,假設您的服務範圍為 10.96.232.0/24,Pod 範圍為 192.168.0.0/16 (192.168.0.1 - 192.168.255.254)。Pod 傳送至任一範圍內位址的流量,都會視為叢集內流量,不會抵達叢集外的任何目的地。

具體來說,Service 和 Pod 範圍不得與下列項目重疊:

  • 任何叢集內節點的 IP 位址

  • 負載平衡器機器使用的 IP 位址

  • 控制層節點和負載平衡器使用的 VIP

  • vCenter 伺服器、DNS 伺服器和 NTP 伺服器的 IP 位址

建議您將 Service 和 Pod 範圍設在 RFC 1918 私人位址空間中。

建議使用 RFC 1918 位址的原因之一是:假設您的 Pod 或服務範圍包含外部 IP 位址。從 Pod 傳送至其中一個外部位址的任何流量,都會視為叢集內流量,且不會抵達外部目的地。

DNS 伺服器和預設閘道

填寫設定檔之前,您必須先知道管理員工作站和叢集節點可使用的 DNS 伺服器 IP 位址。

您也必須知道每個子網路的預設閘道 IP 位址。在上述範例中,每個子網路的預設閘道都是範圍中的第一個位址。舉例來說,在管理員叢集的子網路中,預設閘道會顯示為 172.16.20.1。

更多資訊

管理節點 IP 位址