Calico 網(wǎng)絡(luò)互連架構(gòu)

Calico 為大規(guī)模集群以及云環(huán)境的節(jié)點提供了 end-to-end 的網(wǎng)絡(luò)互聯(lián)累提。為此,calico 需要一個物理層的互聯(lián)架構(gòu)倦踢。?

大多數(shù)情況下送滞, 以太網(wǎng)架構(gòu)是最合適的。但是對于已有的三層架構(gòu)辱挥,可能會對 calico 造成影響犁嗅。?

由于Calico本身就是路由基礎(chǔ)設(shè)施,因此在運行Calico時使用IP路由互連結(jié)構(gòu)需要考慮更多的工程晤碘,架構(gòu)和操作注意事項褂微。 我們將簡要介紹這篇文章的其余部分。 也就是說园爷,Calico可同時在以太網(wǎng)或IP互連架構(gòu)上保持良好運行宠蚂。

背景知識

Calico架構(gòu)基本概覽

有關(guān)calico 架構(gòu)的詳述可以在?architectural overview?中找到。?

在 calico 中童社,計算節(jié)點充當(dāng)了路由器的角色求厕。它們?yōu)檫\行在本機上的容器或是虛擬機提供路由。因此我們稱之為?vRouter扰楼。Linux Kernel 負責(zé)數(shù)據(jù)數(shù)據(jù)包路由呀癣, 通過BPG協(xié)議來控制路由分發(fā), calico agent?Flelix?來管理路由信息弦赖。

處于節(jié)點上的 Endpoint 只能同本節(jié)點?vRouter?通信项栏, calico 中,數(shù)據(jù)包的第一條和最后一條都是通過?vRouter?中路由規(guī)則來實現(xiàn)腾节。vRouter?間通過BGP協(xié)議來同步節(jié)點上的 Endpoint 信息

Overview of current common IP scale-out fabric architectures

對于可橫向擴展的集群忘嫉,有兩種方式構(gòu)建IP架構(gòu)。然而案腺, 迄今為止庆冕,這兩種方案需要當(dāng)邊界路由器同時負責(zé)機架間上行數(shù)據(jù)交換的時候才ok。在 calico 中劈榨,計算節(jié)點本身已經(jīng)集成了該功能访递。

此外,在絕大多數(shù)虛擬化場景中同辣,都會采用 overlay 或者 Nat 的方式來封裝 vm 或者 容器間通信的報文拷姿。例如 weave 和 docker 自帶的網(wǎng)絡(luò)惭载。

路由架構(gòu)基于某種形式的IGP。由于IGP網(wǎng)絡(luò)的擴展限制(see the?why BGP post?for discussion of this topin), calico 工程小組認為使用IGP協(xié)議可能導(dǎo)致 Endpoint 路由無法全部分發(fā)到所有節(jié)點响巢。但同時使用 IGP 和 BGP 是可行的描滔。其中 IGP 傳遞?vRouter?下一跳路由信息(在 calico 中對應(yīng)目的計算節(jié)點),BGP 用于分發(fā) endpoint 的下一跳路由信息踪古。實際上含长,這是廣泛分布的IP網(wǎng)絡(luò)(比如運營商的骨干網(wǎng)絡(luò))中最常見的做法。由于其設(shè)計較為復(fù)雜伏穆,本文不做詳述拘泞。

路由架構(gòu)完全使用BGP協(xié)議。在這種模式下枕扫,IP 網(wǎng)絡(luò)需要足夠的緊湊才能保障 BGP 協(xié)議用于 endpoint 路由信息的分發(fā)(如果集群太大陪腌,會導(dǎo)致同步時間過長)。同時?vRouter?間的路由也會被所有節(jié)點所掌握烟瞧。本文將會重點介紹這個方案诗鸭。

BGP-only interconnect fabrics

構(gòu)建一個 BGP-only 的通信架構(gòu)有多種方案。主要關(guān)注三種實現(xiàn)方案燕刻,其中每個方式又包含2個變體只泼。

兩種變體如下:?

1. 第一種BGP架構(gòu):每個TOR交換機(包括交換機下附屬的服務(wù)器)是一個獨立的?Autonomous System(AS). 各個TOR交換機之間通過 leaf/spine 架構(gòu)中的?spine switch?交換設(shè)備通信(如下圖),或者通過一系列的?spine swtiches剖笙。同樣卵洗,每個?spine switch?是獨立的 AS。 我們將其稱之為每個?AS per rack model?弥咪。 該模型在?IETF working group draft?中有詳細介紹?

2. 第二種BGP架構(gòu):每個計算節(jié)點都是獨立的AS过蹂,TOR 交換機實現(xiàn)AS間通信。我們將其稱之為?AS per server model

每種方案都包含一個2層或者3層變體聚至。

在第一種架構(gòu)下(2層)酷勺,每個?spine switch?提供一個隔離的2層連接平面(個人理解:vlan)來作為 Calico 以太網(wǎng)互聯(lián)結(jié)構(gòu)模型。每個 TOR 交換機和每個?spine switch?互連扳躬。

另一種架構(gòu)下(3層)脆诉,每個?spine switch?看做是一個隔離的 AS,TOR 交換機和?spine switch?BGP對等贷币。在這兩種情況下击胜, TOR 交換機使用 ECMP 實現(xiàn)所有可用?spine switch?的負載均衡。

BGP: Border Gateway Protocol役纹,邊界網(wǎng)管協(xié)議

BGP用于在不通的AS 間交換路由信息偶摔。當(dāng)兩個AS需要交換路由信息時,每個AS都必須指定一個運行BGP的節(jié)點促脉,來代表AS與其他的AS交換路由信息辰斋。這個節(jié)點可以是一個主機策州。但通常是路由器來執(zhí)行BGP。兩個AS鐘利用BGP交換信息的路由器也被稱為邊界網(wǎng)關(guān)(Border Gateway) 或邊界路由器(Border Router)宫仗。

由于可能與不同的AS相連够挂,在一個AS內(nèi)部可能存在多個運行BGP的邊界路由器。同一個AS中的兩個或多個對等實體之間運行的BGP被稱為IBGP(Internal/interior BGP)藕夫。歸屬不同的AS的對等實體之間運行的BGP稱為EBGP(External/Exterior BGP)下硕。在AS邊界上與其他AS交換信息的路由器被稱為邊界路由器(Border/edge router)。在互聯(lián)網(wǎng)操作系統(tǒng)(Cisco IOS)中汁胆,IBGP通告的路由距離為200梭姓, 優(yōu)先級比EBGP和任何內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)通告的路由都低。其他的路由器實現(xiàn)中嫩码,優(yōu)先級順序也是EBGP高于IGP誉尖,而IGP又高于IBGP。

BGP屬于外部網(wǎng)關(guān)路由協(xié)議铸题,可以實現(xiàn)AS間無環(huán)路的域間路由铡恕。BGP是溝通Internet 廣域網(wǎng)的主要路由協(xié)議,例如不同省份丢间、不同國家之間的路由大多要依靠BGP協(xié)議探熔。BGP可分為IBGP和EBGP.BGP的鄰居關(guān)系(或稱為通信對端/對等實體)是通過人工配置實現(xiàn)的,對等實體之間通過TCP(179端口)會話交互數(shù)據(jù)烘挫。BGP路由器會周期地發(fā)送19字節(jié)的?keep-alive?消息來維護連接(默認周期為30s)诀艰。在路由協(xié)議中,只有BGP使用TCP作為傳輸層協(xié)議饮六。

ECMP: 等價路由

ECMP存在多條不同鏈路到達同一目的地址的網(wǎng)絡(luò)環(huán)境中其垄,如果使用傳統(tǒng)的路由技術(shù),發(fā)往該目的地址的數(shù)據(jù)包只能利用其中的一條鏈路卤橄,其它鏈路處于備份狀態(tài)或無效狀態(tài)绿满,并且在動態(tài)路由環(huán)境下相互的切換需要一定時間,而等值多路徑路由協(xié)議可以在該網(wǎng)絡(luò)環(huán)境下同時使用多條鏈路窟扑,不僅增加了傳輸帶寬喇颁,并且可以無時延無丟包地備份失效鏈路的數(shù)據(jù)傳輸。

ECMP最大的特點是實現(xiàn)了等值情況下嚎货,多路徑負載均衡和鏈路備份的目的橘霎,在靜態(tài)路由和OSPF中基本上都支持ECMP功能。

但是實際情況是厂抖,各路徑的帶寬茎毁、時延和可靠性等不一樣,把Cost認可成一樣,不能很好地利用帶寬七蜘,尤其在路徑間差異大時谭溉,效果會非常不理想。例如橡卤,路由器兩個出口扮念,兩路徑,一個帶寬是100M碧库,一個是2M柜与,如果部署是ECMP,則網(wǎng)絡(luò)總帶寬只能達到4M的利用率嵌灰。

Some BGP network design considerations

同主流的意見相比弄匕,BGP 實際上是個相對簡單的協(xié)議。eg. BGP 在 calico 節(jié)點上的配置大約只有6行(除去注釋)沽瞭。只是BGP的使用方式會讓人感覺很復(fù)雜迁匠。許多BGP使用場景都涉及到了復(fù)雜的策略規(guī)則,用來滿足技術(shù)需求(比如商業(yè),金融等)驹溃。Calico 默認不考慮這些復(fù)雜的需求城丧,因此相當(dāng)簡潔。

也就是說豌鹤,在設(shè)計 Calico 節(jié)點網(wǎng)絡(luò)時只需要記住少數(shù)幾條設(shè)計原則即可亡哄。這些設(shè)計要求可以被移植,如果有必要布疙,但是這樣做會使設(shè)計人員脫離標(biāo)準(zhǔn)的BGP封裝蚊惯,只能由一個對高級BGP設(shè)計非常熟悉的實現(xiàn)者來完成。

注意事項:

AS 連續(xù)性

或者叫做AS混拌(pudding)拐辽,在一個AS內(nèi)任何一個路由器都必須能夠直接訪問同一個AS內(nèi)的其他任何路由器而不需過境其他AS系統(tǒng)拣挪。

下一跳行為

默認情況下擦酌,對于位于同一AS下的對等實體俱诸,BGP路由器不會改變下一跳路由。反之也成立赊舶, 對等實體處于其它AS睁搭,BGP路由器會重設(shè)自己的下一跳路由。

路由反射?

位于同一AS下的所有BGP 路由器彼此對等笼平,這種行為又稱為?complete BGP mesh(IBGP全連接)园骆。當(dāng)路由器數(shù)量擴張時,這種全網(wǎng)狀的連接就會產(chǎn)生問題寓调。Router reflection?可以減輕全網(wǎng)連接的負載锌唾。當(dāng)然,?route reflection也需要做擴容考慮。

路由反射器

提供了在大型IBGP實現(xiàn)中IBGP全網(wǎng)狀連接問題的一個簡單解決方案晌涕。為保證IBGP對等體之間的連通性滋捶,需要在IBGP對等體之間建立全連接關(guān)系。假設(shè)在一個AS內(nèi)部有n臺路由器余黎,那么應(yīng)該建立的IBGP連接數(shù)就為n(n-1)/2重窟。當(dāng)IBGP對等體數(shù)目很多時,對網(wǎng)絡(luò)資源和CPU資源的消耗都很大惧财。

利用路由反射可以解決這一問題巡扇。在一個AS內(nèi),其中一臺路由器作為路由反射器RR(Route Reflector)垮衷,其它路由器作為客戶機(Client)與路由反射器之間建立IBGP連接厅翔。路由反射器在客戶機之間傳遞(反射)路由信息,而客戶機之間不需要建立BGP連接搀突。

端點

在 Calico 網(wǎng)絡(luò)中知给,每個Endpoint都對應(yīng)一條路由。 硬件網(wǎng)絡(luò)平臺有學(xué)習(xí)路由數(shù)量的限制描姚,一般在 10,000 ~ 100,000 條之間涩赢。路由聚合是個辦法,但這通常取決于編排軟件(例如OpenStack)使用的調(diào)度程序的功能轩勘。

每個機架作為一個AS

將一個機架看做一個AS(一般TOR交換機和連接該交換機的服務(wù)器位于同一個機架上)筒扒。這種模式最接近?IETF’s Routing Area Working Group draft on BGP use in data centers.?中給出的建議。

正如之前所提到的绊寻,這種方案有兩個變種花墩,一個使用一組二層平面,平面間節(jié)點通過 TOR 交換機通信澄步,另外一種則使用三層平面冰蘑,通過Spine switch?通信。


上圖展示了每機架作為一個AS模型村缸,這里ToR交換機通過以太網(wǎng)交換平面形成了一個物理網(wǎng)格


This diagram shows the?AS per rack model?where the ToR switches are physically meshed via a set of discrete BGP spine routers, each in their own AS.

在這種方案里祠肥,每個Tor 交換機到Tor 交換機或者TOR交換機到?spine switch?的鏈路是EBGP對等的。那就意味著北向 tor 交換機無法使用?RR(Route Reflector)梯皿。

如果使用了2層的方式仇箱,結(jié)果就是每個Tor 交換機之間必須彼此對等(可能有上百個對等),可能會造成負載過重东羹。

如果使用3層的方式剂桥,那么每個TOR 交換機只需要和上級的?spine switch?對等即可。雖然spine switch?下會有許多TOR 交換機属提,可以使用RR(如上圖所示)权逗,而且絕大部分spine switch擁有比TOR交換機更好的平面控制能力,在多數(shù)環(huán)境下更易擴展。

兩者的配置基本相同斟薇,只是在TOR 交換機的北向配置上有些差異火惊。

TOR 交換機,作為EBGP router 會獲取其他TOR switch 以及數(shù)據(jù)中心上的路由奔垦,重新分配到該AS下的每個計算節(jié)點上屹耐。并且會將自身AS內(nèi)的所有路由信息向外通告。這就意味著椿猎,每個計算節(jié)點會將該AS內(nèi)的TOR 交換機視為到外部路由的下一跳惶岭。外部路由到該AS的下一跳則是該AS下的某臺計算節(jié)點

The ToR, as the eBGP router redistributes all of the routes from other ToRs as well as routes external to the data center to the compute servers that are in its AS, and announces all of the routes from within the AS (rack) to the other ToRs and the larger world. This means that each compute server will see the ToR as the next hop for all external routes, and the individual compute servers are the next hop for all routes external to the rack.

每臺服務(wù)器作為一個AS

這種模式的概念同?The AS per rack?類似。在早期的?IETF draft?中犯眠,整個架構(gòu)的路由和匯聚都由TOR發(fā)起按灶。在 Calico 中,那么路由和匯聚的起始點為各計算節(jié)點筐咧。如果TOR為3層的路由器鸯旁,也只能作為2機的路由和匯聚點。

因此量蕊,順著架構(gòu)往下分析铺罢,計算節(jié)點會作為AS的邊界router。同?The AS per rack?的差異可從下面2張圖體現(xiàn)残炮。

This diagram shows the?AS per compute server model?where the ToR switches are physically meshed via a set of Ethernet switching planes.

This diagram shows the?AS per compute server model?where the ToR switches are physically connected to a set of independent routing planes.

從上圖不難發(fā)現(xiàn)韭赘,TOR 和?spine swtich?和?AS per rack?模式中一樣。真正的不同在于势就,計算節(jié)點和TOR處于不同的AS中泉瞻。為了擴展集群,需要使用4字節(jié)的AS編號(RFC 4893). 如果不使用4字節(jié)的AS編號(默認2字節(jié))苞冯,那么calico 平面中的TOR 和計算節(jié)點大約只有5000左右的私有AS編號可使用袖牙。如果采用了4字節(jié),則會有接近92,000000私有AS編號可用舅锄。

4字節(jié)AS*

AS (Autonomous System number鞭达,自治域系統(tǒng)號)是指擁有同一選路策略,在同一技術(shù)管理部門下運行的一組路由器的集合巧娱。BGP的RFC1771里留給AS的范圍是2個字節(jié)碉怔,所以AS的取值范圍為1-65535,其中64512以上的為私有AS禁添。由于BGP在鄰居協(xié)商以及路由發(fā)送接受的時候都需要使用AS屬性, 鑒于IPv4地址空間不夠這個前車之鑒,在RFC4893里定義了一個BGP的新功能——4字節(jié)AS(BGP Support for Four-octet AS Number桨踪,一般用M.N來描述)老翘。

還有個差異,就是在per AS Compute Server?模式中沒有?RR(Router Reflector)。所有設(shè)備都是EBGP對等的铺峭。當(dāng)同一機架下的兩個計算節(jié)點之間需要通信時墓怀,會通過TOR來路由。

可以將這種模式看做The AS per rack?的縮影卫键。

The Downward Default model

最后一種模式會顯得有些不同傀履。在上面介紹的架構(gòu)中,路由器需要收集機構(gòu)中所有的路由表莉炉,并使他們的AS路徑保持原樣钓账。這種模式在路由階段將AS號移除。

This is to prevent routes from other nodes in the network from not being installed due to it coming from the local AS (since they share the source and dest of the route share the same AS).

不會翻 ╮(╯▽╰)╭

In this diagram, we are showing that all Calico nodes share the same AS number, as do all ToR switches. However, those ASs are different (A1 is not the same network as A2, even though the both share the same AS number A ).

所有TOR使用一個AS絮宁,結(jié)算節(jié)點使用另一個AS的做法簡化了部署(使用標(biāo)準(zhǔn)配置即可)梆暮,帶來的好處就是簡化了TOR中的路由表。

這種模式下绍昂,每個 Router 都向上級節(jié)點匯報自己的路由信息(vRouter?–> TOR –>?spine switch)啦粹。however, 作為回應(yīng),上級節(jié)點僅僅返回一條默認路由窘游。在這種情況下唠椭,vRouter?只有本機Endpoint的路由以及到TOR的默認路由。同樣忍饰,對于TOR來說只有到直連vRouter和spine switch的路由泪蔫。即使我們一個機架下有80臺計算節(jié)點,每個計算節(jié)點上有200個Endpoint, 那在TOR上也就16000條記錄左右喘批。(大多數(shù)交換機都能達到這個數(shù)目)

由于路由下發(fā)默認是由 spine 發(fā)起的撩荣,所以下游的AS接受者無法下發(fā)路由,這就避免了AS的干擾問題饶深。

原文:?

Since the default is originatedby the Spine (originally) there is no chance for a downward announced route to originate from the recipient’s AS, preventing the AS puddling problem.

這種模式下餐曹,有個主要的缺點:非法目的地址(eg. 目的地址不存在)的流量都會被送往spine switch。

值得注意的是敌厘,spine switch會收集 calico 網(wǎng)絡(luò)中所有的路由條目台猴。這種模式并不會使spine switch?中的路由條目比原來更多,但卻著實減少了TOR上的路由信息俱两。同時也減少了vRouter上的路由信息饱狂。但這并不是關(guān)注的重點,因為Calico中的完整路由表所消耗的內(nèi)存量是現(xiàn)代計算服務(wù)器上可用總內(nèi)存的一部分宪彩。

Recommendation

如果TOR和SPINE可以容納所產(chǎn)生的路由條目休讳,Calico 團隊建議使用?AS per rack?模式。記得考慮后期擴容問題尿孔。

如果擔(dān)心TOR交換機路由表大小俊柔,Calico 團隊建議使用?Downward default?模式筹麸。

如果對TOR路由表大小不放心,以及希望運行非常簡單的2層架構(gòu)來連接Calico節(jié)點雏婶,則考慮上文介紹的Ethernet fabric(2層平面模式)物赶。

如果Calico用戶對每個計算節(jié)點一個AS的模式感興趣,則Project Calico團隊將非常有興趣討論該模型的部署留晚。

Appendix

Other Options

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酵紫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子错维,更是在濱河造成了極大的恐慌奖地,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件需五,死亡現(xiàn)場離奇詭異鹉动,居然都是意外死亡,警方通過查閱死者的電腦和手機宏邮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門泽示,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜜氨,你說我怎么就攤上這事械筛。” “怎么了飒炎?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵埋哟,是天一觀的道長。 經(jīng)常有香客問我郎汪,道長赤赊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任煞赢,我火速辦了婚禮抛计,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘照筑。我一直安慰自己吹截,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布凝危。 她就那樣靜靜地躺著波俄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛾默。 梳的紋絲不亂的頭發(fā)上懦铺,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音趴生,去河邊找鬼阀趴。 笑死昏翰,一個胖子當(dāng)著我的面吹牛苍匆,可吹牛的內(nèi)容都是我干的刘急。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼浸踩,長吁一口氣:“原來是場噩夢啊……” “哼叔汁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起检碗,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤据块,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后折剃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另假,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年怕犁,在試婚紗的時候發(fā)現(xiàn)自己被綠了边篮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡奏甫,死狀恐怖戈轿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阵子,我是刑警寧澤思杯,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站挠进,受9級特大地震影響色乾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜领突,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一暖璧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攘须,春花似錦漆撞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捞魁,卻和暖如春至会,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谱俭。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工奉件, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宵蛀,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓县貌,卻偏偏與公主長得像术陶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子煤痕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容