Kubernetes 預設服務 CIDR 重配置
Kubernetes v1.33 [stable]
(預設啟用:true)本文件介紹瞭如何重新配置分配給叢集的預設服務 IP 範圍。
準備工作
你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不充當控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立,或者使用這些 Kubernetes 遊樂場之一
你的 Kubernetes 伺服器版本必須是 v1.33 或更高版本。要檢查版本,請輸入 kubectl version
。
Kubernetes 預設服務 CIDR 重配置
本文件解釋瞭如何在 Kubernetes 叢集中管理服務 IP 地址範圍,這也會影響叢集服務支援的 IP 族。
服務 ClusterIP 可用的 IP 族由 kube-apiserver 的 `--service-cluster-ip-range` 標誌決定。為了更好地理解服務 IP 地址分配,請參閱 服務 IP 地址分配跟蹤 文件。
自 Kubernetes 1.33 起,為叢集配置的服務 IP 族由名為 `kubernetes` 的 `ServiceCIDR` 物件反映。`kubernetes` `ServiceCIDR` 物件由第一個啟動的 kube-apiserver 例項根據其配置的 `--service-cluster-ip-range` 標誌建立。為了確保一致的叢集行為,所有 kube-apiserver 例項都必須配置相同的 `--service-cluster-ip-range` 值,並且這些值必須與預設的 kubernetes ServiceCIDR 物件匹配。
Kubernetes 服務 CIDR 重新配置類別
我們可以將服務 CIDR 重新配置分為以下幾種場景:
擴充套件現有服務 CIDR:這可以透過新增新的 ServiceCIDR 物件動態完成,無需重新配置 kube-apiserver。請參閱關於 擴充套件服務 IP 範圍 的專門文件。
單棧到雙棧轉換並保留主服務 CIDR:這涉及引入輔助 IP 族(將 IPv6 引入僅支援 IPv4 的叢集,或將 IPv4 引入僅支援 IPv6 的叢集),同時保留原始 IP 族作為主 IP 族。這需要更新 kube-apiserver 配置以及對需要處理此附加 IP 族的各種叢集元件進行相應修改。這些元件包括但不限於 kube-proxy、CNI 或網路外掛、服務網格實現和 DNS 服務。
雙棧到單棧轉換並保留主服務 CIDR:這涉及從雙棧叢集中移除輔助 IP 族,恢復為單 IP 族,同時保留原始主 IP 族。除了重新配置元件以匹配新的 IP 族外,你可能還需要處理明確配置為使用已移除 IP 族的服務。
任何導致主服務 CIDR 更改的操作:完全替換預設 ServiceCIDR 是一項複雜的操作。如果新的 ServiceCIDR 與現有 ServiceCIDR 不重疊,它將需要重新編號所有現有服務並更改 `kubernetes.default` 服務。如果主 IP 族也發生變化,情況會更加複雜,可能需要更改多個叢集元件(kubelet、網路外掛等)以匹配新的主 IP 族。
替換預設服務 CIDR 的手動操作
重新配置預設服務 CIDR 需要叢集操作員、管理員或管理叢集生命週期的軟體執行手動步驟。這些步驟通常包括:
- 更新 kube-apiserver 配置:使用新的 IP 範圍修改 `—service-cluster-ip-range` 標誌。
- 重新配置網路元件:這是一個關鍵步驟,具體過程取決於所使用的不同網路元件。它可能涉及更新配置檔案、重啟代理 Pod,或更新元件以管理新的 Service CIDR 和 Pod 所需的 IP 族配置。典型的元件可以是 Kubernetes 服務的實現,例如 kube-proxy 和配置的網路外掛,以及可能存在的其他網路元件,如服務網格控制器和 DNS 伺服器,以確保它們能夠正確處理流量並使用新的 IP 族配置執行服務發現。
- 管理現有服務:如果來自舊 CIDR 的 IP 不在新配置的範圍內,則需要處理這些服務。選項包括重新建立(導致停機和新的 IP 分配)或可能更復雜的重新配置策略。
- 重新建立內部 Kubernetes 服務:如果主 IP 族更改或被其他網路替換,則必須刪除並重新建立 `kubernetes.default` 服務,以從新的服務 CIDR 獲取 IP 地址。
重新配置示例步驟
以下步驟描述了控制下重新配置,重點是完全替換預設 Service CIDR 和重新建立 `kubernetes.default` Service。
- 使用初始的 `—service-cluster-ip-range` 啟動 kube-apiserver。
- 建立從該範圍獲取 IP 的初始服務。
- 引入一個新的 Service CIDR 作為重新配置的臨時目標。
- 將 `kubernetes` 預設 Service CIDR 標記為刪除(由於現有 IP 和 finalizers,它將保持待定狀態)。這可以防止從舊範圍進行新的分配。
- 重新建立現有服務。它們現在應該從新的臨時 Service CIDR 中分配 IP。
- 使用新的 Service CIDR 配置並關閉舊例項後,重新啟動 kube-apiserver。
- 刪除 `kubernetes.default` 服務。新的 kube-apiserver 將在新的 Service CIDR 中重新建立它。
下一步
- Kubernetes 網路概念: https://kubernetes.club.tw/docs/concepts/cluster-administration/networking/
- Kubernetes 雙棧服務: https://kubernetes.club.tw/docs/concepts/services-networking/dual-stack/
- 擴充套件 Kubernetes 服務 IP 範圍: https://kubernetes.club.tw/docs/tasks/network/extend-service-ip-ranges/