規劃 IP 位址

本文提供範例,說明如何為高可用性 (HA) 管理員叢集和兩個 HA 使用者叢集分配 IP 位址。

事前準備

如要瞭解管理員叢集、使用者叢集和高可用性,請參閱選擇部署模型

IP 位址分配範例

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

  • 叢集節點的 IP 位址

  • Pod 的 IP 位址

  • 服務的叢集 IP 位址

  • 控制層和輸入 Proxy 的虛擬 IP 位址 (VIP)

  • 用做服務外部 IP 位址的 VIP

管理員叢集節點

本範例中的管理員叢集有三個節點。每個節點都會執行控制層元件。

使用者叢集節點

在本例中,每個使用者叢集有六個節點:三個控制層節點和三個工作站節點。

負載平衡

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

子網路

以這個範例來說,假設每個叢集都位於自己的第 2 層網域,且叢集位於下列子網路:

叢集 子網路 預設閘道
管理員叢集 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

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

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

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

您需要三個 IP 位址供管理員叢集節點使用,這些節點都會執行控制層元件。舉例來說,您可以為管理員叢集中的節點使用下列 IP 位址。本例中的地址是連續的,但這並非必要條件:

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

範例 IP 位址:管理員叢集的控制層 VIP

您需要為管理員叢集的 Kubernetes API 伺服器預留 VIP。 在叢集設定檔中,這稱為 controlPlaneVIP。舉例來說,您可以預留下列 IP 位址,做為管理員叢集的控制層 VIP:

管理員叢集的控制層 VIP
172.16.20.50

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

舉例來說,您可以為使用者叢集 1 中的三個控制層節點和三個工作站節點使用下列 IP 位址。在這個範例中,地址是連續的,但這並非必要條件:

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

IP 位址範例:使用者叢集 1 的 VIP

下表舉例說明如何指派 VIP,以便在使用者叢集 1 的負載平衡器上設定。在這個範例中,VIP 是連續的,但這並非必要條件:

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

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

例如,您可以為使用者叢集 2 中的節點使用下列 IP 位址。這個範例中的地址是連續的,但這並非必要條件:

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

IP 位址範例:使用者叢集 2 的 VIP

下表舉例說明如何指派 VIP,以便在使用者叢集 2 的負載平衡器上設定。本例中的 VIP 是連續的,但這並非必要條件。

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

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.0.0/20
使用者叢集 1 中的服務10.96.0.0/20
使用者叢集 2 中的服務10.96.0.0/20

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

  • 在預設的孤島模式網路模型中,多個叢集的 Pod CIDR 範圍可以相同。在扁平模式網路中,Pod 在所有叢集中的 IP 位址不得重複。如要進一步瞭解影響 Pod 的網路模型,請參閱「Flat vs island mode network models」(平面與島嶼模式網路模型)。

  • 多個叢集可以共用同一個 Service 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.0.0/20,而 Pod 範圍為 192.168.0.0/16。Pod 傳送至任一範圍內位址的流量,都會視為叢集內流量,不會抵達叢集外的任何目的地。

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

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

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

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

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

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

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

IP 位址分配方式的變化

本文提供的範例說明如何為特定類型的安裝作業分配 IP 位址。不過,您可以透過各種方式安裝 Google Distributed Cloud,而您選擇的變體會影響 IP 位址的規劃方式。

舉例來說,您可能會決定使用非 HA 叢集,或決定讓叢集節點分散在多個第 2 層網域。您可能會決定使用平面模式網路,而非孤島模式網路。

如需在各類安裝項目的叢集設定檔中指定 IP 位址的範例,請參閱叢集設定範例

如要進一步瞭解如何為不同類型的安裝作業規劃 IP 位址,請參閱下列文件: