在阿里雲上建立 Kubernetes 叢集時,通常情況下,可以選擇自動建立專用網路,使用預設的網路地址即可。在某些複雜的情境下,需要您自主規劃 ECS 地址、Kubernetes Pod 地址和 Service 地址。本文將介紹阿里雲 VPC 環境下 Kubernetes 裡各種地址的作用,以及位址區段該如何規劃。

Kubernetes 網段基本概念

首先來看幾個和 IP 位址有關的概念。

VPC 網段

您在建立 VPC 選擇的位址區段。只能從 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 三者當中選擇一個。

交換器網段

在 VPC 裡建立交換器時指定的網段,必須是當前 VPC 網段的子集(可以跟 VPC 網段地址一樣,但不能超過)。交換器下面的 ECS 所分配到的地址,就是從這個交換器位址區段內擷取的。一個 VPC 下,可以建立多個交換器,但交換器網段不能重疊。

VPC 網段結構如下圖。

Pod 位址區段

Pod 是 Kubernetes 內的概念,每個 Pod 具有一個 IP 位址。在阿里雲Container Service上建立 Kubernetes 叢集時,可以指定Pod 的位址區段,不能和 VPC 網段重疊。比如 VPC 網段用的是 172.16.0.0/12,Kubernetes 的 Pod 網段就不能使用 172.16.0.0/16,不能使用 172.17.0.0/16…,這些地址都涵蓋在 172.16.0.0/12 裡了。

Service 位址區段

Service 也是 Kubernetes 內的概念,每個 Service 有自己的地址。同樣,Service 位址區段也不能和 VPC 位址區段重合,而且 Service 位址區段也不能和 Pod 位址區段重合。Service 地址只在 Kubernetes 叢集內使用,不能在叢集外使用。

Kubernetes 網段和 VPC 網段關係如下圖。

如何選擇位址區段

單 VPC+單 Kubernetes 叢集情境

這是最簡單的情形。VPC 地址在建立 VPC 的時候就已經確定,建立 Kubernetes 叢集時,選擇和當前 VPC 不一樣的位址區段就可以了。

單 VPC+多 Kubernetes 叢集情境

一個 VPC 下建立多個 Kubernetes 叢集。在預設的網路模式下(Flannel),Pod 的報文需要通過 VPC 路由轉寄,Container Service會自動在 VPC 路由上配置到每個 Pod 位址區段的路由表。所有 Kubernetes 叢集的 Pod 位址區段不能重疊,但 Service 位址區段可以重疊。

VPC 地址還是建立 VPC 的時候確定的,建立 Kubernetes 的時候,為每個 Kubernetes 叢集選擇一個不重疊的位址區段,不僅不能和 VPC 地址重疊,也不和其他 Kubernetes Pod 段重疊。

需要注意的是,這種情況下 Kubernetes 叢集部分互連,一個叢集的 Pod 可以直接存取另外一個叢集的 Pod 和 ECS,但不能訪問另外一個叢集的 Service。

VPC 互聯情境

兩個 VPC 網路互聯的情況下,可以通過路由表配置哪些報文要發送到對端 VPC 裡。以下面的情境為例,VPC 1 使用位址區段 192.168.0.0/16,VPC 2 使用位址區段 172.16.0.0/12,我們可以通過路由表,指定在 VPC 1 裡把 目的地址為 172.16.0.0/12 的報文都發送到 VPC 2。

在這種情況下,VPC 1 裡建立的 Kubernetes 叢集,首先不能和 VPC 1 的位址區段重疊,同時其位址區段也不能和 VPC 2 的位址區段重疊。在 VPC 2 上建立 Kubernetes 叢集也類似。這個例子中,Kubernetes 叢集 Pod 位址區段可以選擇 10.0.0.0/8 下的某個子段。

说明 這裡要特別關注“路由到 VPC 2” 的位址區段,可以把這部分地址理解成已經佔用的地址,Kubernetes叢集不能和已經佔用的地址重疊。

如果 VPC 2 裡要訪問 VPC 1 的 Kubernetes Pod,則需要在 VPC 2 裡配置到 VPC1 Kubernetes叢集pod地址的路由。

VPC 網路到 IDC 的情境

和 VPC 互聯情境類似,同樣存在 VPC 裡部分位址區段路由到 IDC ,Kubernetes 叢集的 Pod 地址就不能和這部分地址重疊。IDC 裡如果需要訪問 Kubernetes 裡的 Pod 地址,同樣需要在 IDC 端配置到專線 VBR 的路由表。