天天看點

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

Underlay 網絡是底層基礎網絡,具有低延遲、可靠、安全等特性。這些特性能滿足一些延時敏感的應用業務需求、提供優質的使用者體驗以及有效管理和保護網絡資源,通常應用在延時敏感、防火牆安全管控中:

  • 延時敏感的應用:某些特定行業或應用(如金融交易、實時視訊傳輸等)對網絡延遲非常敏感。在這種情況下,Underlay 網絡可以提供更低的延遲,通過直接控制實體和鍊路層的連接配接來減少資料傳輸的時間。這種低延遲的特性使得 Underlay 網絡成為滿足這些應用需求的理想選擇。
  • 防火牆安全管控:在叢集中,防火牆通常用于管理南北向通信,即叢集内部和外部網絡之間的通信。為了實作安全管控,防火牆需要對通信流量進行檢查和過濾,并對出口通信進行限制。在這種情況下,通過 Underlay 網絡的 IPAM 對應用固定出口 IP 位址,可以更好地管理和控制叢集與外部網絡之間的通信,提高網絡的安全性。

随着資料中心私有雲的不斷普及,Underlay 網絡作為資料中心網絡架構的重要組成部分,已經被廣泛應用于資料中心的網絡架構中,以提供更高效的網絡傳輸和更好的網絡拓撲管理能力。

01跨網絡區域的 IP 位址配置設定需求

筆者最近在使用 Underlay 網絡時,遇到了這樣的場景:有一個叢集,但叢集的節點分布在不同地區或資料中心,一些節點的區域隻能使用子網 10.6.1.0/24,一些節點的區域隻能使用子網 172.16.2.0/24, 在此背景下,當一個應用跨子網部署副本時,要求 IPAM 能夠在不同的節點上,為同一個應用下的不同 Pod 配置設定出與子網比對的 IP 位址,且能正确運作。對此,希望能通過 IP 位址管理(IPAM)實作跨網絡區域的 IP 配置設定,為應用程式提供靈活的部署和擴充性。

該場景的網絡拓撲圖如下:

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

通過上述場景,在 Underlay 網絡下,同一應用的不同副本之間實作跨域網絡的 IP 位址配置設定是生産場景中常見且需要去解決的需求。開源社群中的一個 Kubernetes 的 IPAM 插件項目:Spiderpool,帶來一種全新的解決方案,它可以靈活而智能地實作跨網絡區域的 IP 配置設定,一起來了解一下。

02全新解決方案:Spiderpool

Spiderpool (https://github.com/spidernet-io/spiderpool) 是一個 Kubernetes 的 IPAM 插件項目,其主要針對于 Underlay 網絡的 IP 位址管理需求而設計,能夠為任何相容第三方 IPAM 插件的 CNI 項目所使用。而基于跨越網絡區域的 IP 配置設定是 Spiderpool 的一個重要功能支援,同時它還包括應用 IP 位址固定、IP 位址自動彈性擴縮容、多網卡、雙棧支援等特點。更多說明參考 Spiderpool 功能 (https://github.com/spidernet-io/spiderpool/blob/main/README-zh_CN.md) 介紹。

03環境

為示範 Spiderpool 的跨網絡區域配置設定 IP 的能力,筆者準備了一套跨網絡區域的叢集,并為節點打上可用的子網标簽,以下是所使用的叢集資訊:

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

以下是筆者叢集的網絡拓撲圖:

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

04安裝

根據 Spiderpool 的官方文檔: https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/get-started-macvlan-zh_CN.md 搭建了一套 Multus 、Macvlan、Veth 、Spiderpool 的環境,以下是根據自身環境已建立的 SpiderSubnet 執行個體:

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

以下示例中将會建立 Multus 的 network-attachment-definition 配置: macvlan-conf,其中:

  • master:在此示例用接口 ens192 作為 master 的參數,注意的是跨網絡區的不同節點的接口名稱需一緻,此參數應與叢集節點上的接口名稱比對。
雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

05建立 IPPools

Spiderpool 的 CRD:SpiderIPPool 提供了 nodeAffinity 字段,當 Pod 在某個節點上啟動,嘗試從 SpiderIPPool 配置設定 IP 時,若 Pod 所在節點符合該 nodeAffinity 設定,則能從該 SpiderIPPool 中成功配置設定出 IP,否則無法從該 SpiderIPPool 中配置設定出IP。

依據如上所述,使用如下的 Yaml,建立 2 個 SpiderIPPool,它們将為不同節點上的 Pod 提供 IP 位址。

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

06建立應用

以下的示例 Yaml 中, 會建立一個 daemonSet 應用,其中:

  • ipam.spidernet.io/ippool:用于指定 Spiderpool 的 IP 池,可以設定多個 IP 池用作備選池,Spiderpool 會按照 "IP 池數組" 中元素的順序依次嘗試配置設定 IP 位址,在節點跨網絡區域的場景配置設定 IP 時,如果應用副本被排程到的節點,符合第一個 IP 池的 _**IPPool.spec.nodeAffinity**_ 注解, Pod 會從該池中獲得 IP 配置設定,如果不滿足,Spiderpool 會嘗試從備選池中選擇 IP 池繼續為 Pod 配置設定 IP ,直到所有備選池全部篩選失敗。可以通過[備選池](https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/ippool-multi.md) 了解更多用法。
  • v1.multus-cni.io/default-network:用于指定 Multus 的 NetworkAttachmentDefinition 配置,會為應用建立一張預設網卡。
雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

完成建立後,可以發現 Pod 的 IP 屬于 Pod 所在節點的子網内,所對應的 IP 池為應用的不同副本配置設定了 IP 位址。

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

跨網絡區域的 Pod 與 Pod 之間的通訊情況:

雲原生 Spiderpool:基于跨越網絡區域的 IP 配置設定

07 結論

經過測試:不同網絡區域的 Pod 能夠通過 Pod IP、clusterIP、nodePort 等方式通信,Spiderpool 可以很好地實作基于跨越網絡區域的 IP 配置設定需求。

本文作者 :楊濤

現任「DaoCloud 道客」雲原生網絡測試工程師

繼續閱讀