溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

發(fā)布時間:2021-12-24 15:11:52 來源:億速云 閱讀:134 作者:小新 欄目:云計算

這篇文章將為大家詳細(xì)講解有關(guān)如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò),小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

OpenContrail概述

OpenContrail是一個開源SDN&NFV解決方案,從Havana開始,跟OpenStack有著些許的聯(lián)系。它和Nicira(現(xiàn)在的VMware NSX-VH)是第一個產(chǎn)品Neutron插件,上一屆峰會調(diào)查顯示,它也是最常被配置的解決方案,排名僅在OpenVwitch之后,是第一個基于Vendor的解決方案。

OpenContrail已經(jīng)整合到OpenStack、VMware、Docker和Kubernetes上了。Kubernetes 網(wǎng)絡(luò)插件 kube-network-manager早在去年于溫哥華舉辦的OpenStack峰會的時候已經(jīng)在開發(fā)當(dāng)中了,于去年年底首次發(fā)布。

架構(gòu)

我們從兩個獨立的Contrail配置開始測試,然后安裝BGP聯(lián)盟。聯(lián)盟的原因是kube-network-manager的重點驗證。當(dāng)啟用contrail-neutron-plugin開啟的時候,contrail API啟用keystone驗證的時候,contrail API用keystone驗證,這個功能還沒有在Kubernetes插件實施。Contrail聯(lián)盟等下會詳細(xì)描述。

下面的這個架構(gòu)是一個高水平架構(gòu)圖,圖中左邊是OpenStack集群,右邊是Kubernetes集群。OpenStack和OpenContrail被部署在高可得性的最佳實踐設(shè)計中,這個設(shè)計可以被擴(kuò)容成成百上千個計算節(jié)點。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

下圖展示了兩個Contrail集群的聯(lián)盟??傮w上,這個功能在不需要物理網(wǎng)關(guān)的情況下可以連接Contrail controllers與多站點數(shù)據(jù)中心的站點。每個站點的控制節(jié)點和其它使用BGP的站點一樣。有可能的話,可以用這種方法延伸到L2和L3網(wǎng)絡(luò)在多個數(shù)據(jù)中心上面。

通常,兩個獨立的OpenStack云端或者兩個OpenStack區(qū)域會用到這個設(shè)計。所有的Contrail的組件(包括vRouter)是一樣的。Kube-network-manager和neutron-contrail-plugin為不同的平臺轉(zhuǎn)換API請求。網(wǎng)絡(luò)解決方案的核心功能還是沒有改變。這不僅帶來強(qiáng)大的網(wǎng)絡(luò)引擎,還帶來了分析。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

應(yīng)用程序堆棧

概述

讓我們來看看典型的場景。我們的開發(fā)人員給了我們docker compose.yml(https://github.com/django-leonardo/django-leonardo/blob/master/contrib/haproxy/docker-compose.yml),這也是為在筆記本上的開發(fā)和本地測試所用。這個方法更加輕松,但是我們的開發(fā)者已經(jīng)了解過docker和應(yīng)用程序工作負(fù)載。這個應(yīng)用程序堆棧包括以下組件:

  • 數(shù)據(jù)庫——PostgreSQL或者MySQL數(shù)據(jù)庫集群

  • 下載并安裝——為內(nèi)容緩存

  • Django 應(yīng)用 Leonardo——Django CMS Leonardo被用于應(yīng)用程序堆棧測試

  • Nginx——網(wǎng)絡(luò)代理

  • 負(fù)載均衡——容器縮放的HAProxy負(fù)載均衡器

當(dāng)我們想將之運用到產(chǎn)品中的時候,我們可以將所有東西和service一起轉(zhuǎn)移到Kubernetes RC上面,但是就如我們在一開始提到的,不是所有的東西都適用于容器。因此,我們將數(shù)據(jù)庫集群分開到OpenStack虛擬機(jī),然后將剩下的部分重寫到Kubernetes密鑰清單。

應(yīng)用程序部署

這個部分描述了在OpenStack和Kubernetes上的應(yīng)用程序供應(yīng)的工作流程。

OpenStack方面

第一步,我們已經(jīng)在OpenStack上正式推出數(shù)據(jù)庫堆棧。這就用PostgreSQL和數(shù)據(jù)庫網(wǎng)絡(luò)創(chuàng)建了3個虛擬機(jī)。數(shù)據(jù)庫網(wǎng)絡(luò)是私人租戶隔離網(wǎng)絡(luò)。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

Kubernetes方面

在Kubernetes這邊,我們不得不用Leonardo和Nginx services發(fā)布表明。點擊這里查看:https://github.com/pupapaik/scripts/tree/master/kubernetes/leonardo

為了使之順利在網(wǎng)絡(luò)隔離情況下運行,來看以下部分。

leonardo-rc.yaml-Leonardo應(yīng)用的RC,replicas3,和虛擬網(wǎng)絡(luò)leonardo

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

leonardo-svc.yaml-leonardo service 用虛擬IP在端口8000從集群網(wǎng)絡(luò)掛載應(yīng)用程序pods。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

nginx-rc.yaml-3個副本的NGINX RC,虛擬網(wǎng)絡(luò)nginx和策略,這三者允許與leonardo-svc 網(wǎng)絡(luò)通信。這個例子不使用SSL。(NGINX replication controller with 3 replicas and virtual networknginx and policy allowing traffic to leonardo-svc network. This sample does notuse SSL.)

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

nginx-svc.yaml-用集群vip IP和虛擬IP創(chuàng)建service,從網(wǎng)絡(luò)上訪問應(yīng)用程序

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

我們來調(diào)用kubecl來運行所有的密鑰清單。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

在Kubernetes里創(chuàng)建了以下的pods和services。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

只有Nginx service有Public IP 185.22.97.188,這是一個負(fù)載均衡的浮動IP。所有的流量現(xiàn)在已經(jīng)在Juniper MX上面被ECMP平衡。

為了讓集群完全運行起來,就必須在OpenStack上的數(shù)據(jù)庫虛擬網(wǎng)絡(luò)和Kubernetes Contrail上的leonardo 虛擬網(wǎng)絡(luò)。進(jìn)入這兩個Contrail UI,然后為這兩個網(wǎng)絡(luò)設(shè)置一樣的Route Target。這也可以通過contrail 資源(heat resource)來進(jìn)行自動化。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

下面的這張圖展示了應(yīng)該怎樣查看產(chǎn)品應(yīng)用程序堆棧。在最上面是兩個有Public VRF的Juniper MXs,就是浮動IP傳播的地方。流量通過ECMP到MPLSoverGRE隧道傳播到3個nginx pods。Nginx代理請求到Leonardo應(yīng)用程序服務(wù)器,它將會議和內(nèi)容存儲到運行在OpenStack 虛擬機(jī)上的PostgreSQL數(shù)據(jù)庫集群。

pods和虛擬機(jī)間的連接是直接的,沒有任何路由中心點的。Juniper MXs只運用于外向連接到互聯(lián)網(wǎng)。多虧存儲應(yīng)用程序會話到數(shù)據(jù)庫(通常來說是下載安裝或者是redis),我們不需要特定的L7負(fù)載均衡器,ECMP運行完全沒有問題。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

其它的輸出

這個部分展示的是其它從應(yīng)用堆棧的有趣輸出。用負(fù)載均衡器描述的Nginx service展示了浮動IP和私有集群IP。然后是nginx pods的3個IP地址。流量通過vRouter ECMP分布。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

Nginx路由表展示了pods和route10.254.98.15/32間的內(nèi)部路由,指向leonardo service。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

之前的route10.254.98.15/32是leonardo service里面的描述。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

Leonardo路由表跟nginx十分相似,除了routes 10.0.100.X/32,他在不同的Contrail里指向OpenStack 虛擬機(jī)。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

最近的輸出是從Juniper MXs VRF出來的,展示了多個到nginx pods的路徑。

如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

關(guān)于“如何實現(xiàn)Kubernetes和OpenStack的多云端網(wǎng)絡(luò)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI