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

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

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

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

背景知識(shí)

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

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

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

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

Overview of current common IP scale-out fabric architectures

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

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

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

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

BGP-only interconnect fabrics

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

兩種變體如下:?

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

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

每種方案都包含一個(gè)2層或者3層變體。

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

另一種架構(gòu)下(3層),每個(gè)?spine switch?看做是一個(gè)隔離的 AS,TOR 交換機(jī)和?spine switch?BGP對(duì)等。在這兩種情況下, TOR 交換機(jī)使用 ECMP 實(shí)現(xiàn)所有可用?spine switch?的負(fù)載均衡。

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

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

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

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

ECMP: 等價(jià)路由

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

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

但是實(shí)際情況是,各路徑的帶寬、時(shí)延和可靠性等不一樣,把Cost認(rèn)可成一樣,不能很好地利用帶寬,尤其在路徑間差異大時(shí),效果會(huì)非常不理想。例如,路由器兩個(gè)出口,兩路徑,一個(gè)帶寬是100M,一個(gè)是2M,如果部署是ECMP,則網(wǎng)絡(luò)總帶寬只能達(dá)到4M的利用率。

Some BGP network design considerations

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

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

注意事項(xiàng):

AS 連續(xù)性

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

下一跳行為

默認(rèn)情況下,對(duì)于位于同一AS下的對(duì)等實(shí)體,BGP路由器不會(huì)改變下一跳路由。反之也成立, 對(duì)等實(shí)體處于其它AS,BGP路由器會(huì)重設(shè)自己的下一跳路由。

路由反射?

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

路由反射器

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

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

端點(diǎn)

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

每個(gè)機(jī)架作為一個(gè)AS

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

正如之前所提到的,這種方案有兩個(gè)變種,一個(gè)使用一組二層平面,平面間節(jié)點(diǎn)通過 TOR 交換機(jī)通信,另外一種則使用三層平面,通過Spine switch?通信。


上圖展示了每機(jī)架作為一個(gè)AS模型,這里ToR交換機(jī)通過以太網(wǎng)交換平面形成了一個(gè)物理網(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.

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

如果使用了2層的方式,結(jié)果就是每個(gè)Tor 交換機(jī)之間必須彼此對(duì)等(可能有上百個(gè)對(duì)等),可能會(huì)造成負(fù)載過重。

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

兩者的配置基本相同,只是在TOR 交換機(jī)的北向配置上有些差異。

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

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.

每臺(tái)服務(wù)器作為一個(gè)AS

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

因此,順著架構(gòu)往下分析,計(jì)算節(jié)點(diǎn)會(huì)作為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?模式中一樣。真正的不同在于,計(jì)算節(jié)點(diǎn)和TOR處于不同的AS中。為了擴(kuò)展集群,需要使用4字節(jié)的AS編號(hào)(RFC 4893). 如果不使用4字節(jié)的AS編號(hào)(默認(rèn)2字節(jié)),那么calico 平面中的TOR 和計(jì)算節(jié)點(diǎn)大約只有5000左右的私有AS編號(hào)可使用。如果采用了4字節(jié),則會(huì)有接近92,000000私有AS編號(hào)可用。

4字節(jié)AS*

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

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

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

The Downward Default model

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

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).

不會(huì)翻 ╮(╯▽╰)╭

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使用一個(gè)AS,結(jié)算節(jié)點(diǎn)使用另一個(gè)AS的做法簡化了部署(使用標(biāo)準(zhǔn)配置即可),帶來的好處就是簡化了TOR中的路由表。

這種模式下,每個(gè) Router 都向上級(jí)節(jié)點(diǎn)匯報(bào)自己的路由信息(vRouter?–> TOR –>?spine switch)。however, 作為回應(yīng),上級(jí)節(jié)點(diǎn)僅僅返回一條默認(rèn)路由。在這種情況下,vRouter?只有本機(jī)Endpoint的路由以及到TOR的默認(rèn)路由。同樣,對(duì)于TOR來說只有到直連vRouter和spine switch的路由。即使我們一個(gè)機(jī)架下有80臺(tái)計(jì)算節(jié)點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)上有200個(gè)Endpoint, 那在TOR上也就16000條記錄左右。(大多數(shù)交換機(jī)都能達(dá)到這個(gè)數(shù)目)

由于路由下發(fā)默認(rèn)是由 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.

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

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

Recommendation

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

如果擔(dān)心TOR交換機(jī)路由表大小,Calico 團(tuán)隊(duì)建議使用?Downward default?模式。

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

如果Calico用戶對(duì)每個(gè)計(jì)算節(jié)點(diǎn)一個(gè)AS的模式感興趣,則Project Calico團(tuán)隊(duì)將非常有興趣討論該模型的部署。

Appendix

Other Options

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容