【swarm】Docker swarm 的跨主機(jī)通訊

一蒸辆、跨主機(jī)網(wǎng)絡(luò)解決方案


我們知道治拿,Docker 的幾種網(wǎng)絡(luò)方案:none、host捷绑、bridge 和 joined 容器韩脑,它們解決了單個(gè) Docker Host 內(nèi)容器通信的問題。

那么跨主機(jī)容器間通信的方案又有哪些呢粹污?

跨主機(jī)網(wǎng)絡(luò)方案包括:

1. docker 原生的 overlay 和 macvlan段多。

2. 第三方方案:常用的包括 flannel、weave 和 calico壮吩。

Docker 網(wǎng)絡(luò)是一個(gè)非辰裕活躍的技術(shù)領(lǐng)域,不斷有新的方案開發(fā)出來鸭叙,那么要問個(gè)非常重要的問題了: 如此眾多的方案是如何與 docker 集成在一起的觉啊?答案是:libnetwork 以及 CNM。

libnetwork 是 docker 容器網(wǎng)絡(luò)庫沈贝,最核心的內(nèi)容是其定義的 Container Network Model (CNM)杠人,這個(gè)模型對(duì)容器網(wǎng)絡(luò)進(jìn)行了抽象,由以下三類組件組成:

1.Sandbox:Sandbox 是容器的網(wǎng)絡(luò)棧宋下,包含容器的 interface嗡善、路由表和 DNS 設(shè)置。 Linux Network Namespace 是 Sandbox 的標(biāo)準(zhǔn)實(shí)現(xiàn)学歧。Sandbox 可以包含來自不同 Network 的 Endpoint滤奈。

2.Endpoint:Endpoint 的作用是將 Sandbox 接入 Network。Endpoint 的典型實(shí)現(xiàn)是 veth pair撩满,后面我們會(huì)舉例蜒程。一個(gè) Endpoint 只能屬于一個(gè)網(wǎng)絡(luò),也只能屬于一個(gè) Sandbox伺帘。

3.Network:Network 包含一組 Endpoint昭躺,同一 Network 的 Endpoint 可以直接通信。Network 的實(shí)現(xiàn)可以是 Linux Bridge伪嫁、VLAN 等领炫。


如圖所示兩個(gè)容器,一個(gè)容器一個(gè) Sandbox张咳,每個(gè) Sandbox 都有一個(gè) Endpoint 連接到 Network 1帝洪,第二個(gè) Sandbox 還有一個(gè) Endpoint 將其接入 Network 2.



libnetwork CNM 定義了 docker 容器的網(wǎng)絡(luò)模型似舵,按照該模型開發(fā)出的 driver 就能與 docker daemon 協(xié)同工作,實(shí)現(xiàn)容器網(wǎng)絡(luò)葱峡。

docker 原生的 driver 包括 none皇型、bridge哑舒、overlay 和 macvlan琼稻,第三方 driver 包括 flannel燎含、weave、calico 等军援。




Docker Swarm 內(nèi)置的跨主機(jī)容器通信方案是overlay網(wǎng)絡(luò)仅淑,這是一個(gè)基于vxlan協(xié)議的網(wǎng)絡(luò)實(shí)現(xiàn)。

VxLAN 可將二層數(shù)據(jù)封裝到 UDP 進(jìn)行傳輸胸哥,VxLAN 提供與 VLAN 相同的以太網(wǎng)二層服務(wù)涯竟,但是擁有更強(qiáng)的擴(kuò)展性和靈活性。

?overlay 通過虛擬出一個(gè)子網(wǎng)空厌,讓處于不同主機(jī)的容器能透明地使用這個(gè)子網(wǎng)昆禽。所以跨主機(jī)的容器通信就變成了在同一個(gè)子網(wǎng)下的容器通信,看上去就像是同一主機(jī)下的bridge網(wǎng)絡(luò)通信蝇庭。


根據(jù)vxlan的作用知道,它是要在三層網(wǎng)絡(luò)中虛擬出二層網(wǎng)絡(luò)捡硅,即跨網(wǎng)段建立虛擬子網(wǎng)哮内。

簡單的理解就是把發(fā)送到虛擬子網(wǎng)地址10.0.0.3的報(bào)文封裝為發(fā)送到真實(shí)IP192.168.1.3的報(bào)文。這必然會(huì)有更大的數(shù)據(jù)開銷壮韭,但卻簡化了集群的網(wǎng)絡(luò)連接北发,讓分布在不同主機(jī)的容器好像都在同一個(gè)主機(jī)上一樣 。


overlay網(wǎng)絡(luò)會(huì)創(chuàng)建多個(gè)Docker主機(jī)之間的分布式網(wǎng)絡(luò)喷屋。該網(wǎng)絡(luò)位于(覆蓋)特定于主機(jī)的網(wǎng)絡(luò)之上琳拨,允許連接到它的容器(包括群集服務(wù)容器)安全地進(jìn)行通信。Docker透明地處理每個(gè)數(shù)據(jù)包與正確的Docker守護(hù)程序主機(jī)和正確的目標(biāo)容器的路由屯曹。


初始化swarm或?qū)ocker主機(jī)加入現(xiàn)有swarm時(shí)狱庇,會(huì)在該Docker主機(jī)上創(chuàng)建兩個(gè)新網(wǎng)絡(luò):

1. ingress overlay 網(wǎng)絡(luò),處理與swarm集群服務(wù)相關(guān)的控制和數(shù)據(jù)流量恶耽。創(chuàng)建群組服務(wù)并且不將其連接到用戶定義的覆蓋網(wǎng)絡(luò)時(shí)密任,服務(wù)將默認(rèn)連接到ingress overlay網(wǎng)絡(luò)。集群中只能有一個(gè)ingress overlay 網(wǎng)絡(luò)偷俭。

2. docker_gwbridge 橋接網(wǎng)絡(luò)浪讳,它將各個(gè)Docker守護(hù)程序連接到參與該群集的其他Docker守護(hù)進(jìn)程。同時(shí)該docker_gwbridge 網(wǎng)絡(luò)將為主機(jī)上的容器提供訪問外網(wǎng)的能力涌萤。


# docker network ls

# docker network inspect docker_gwbridge

# docker network inspect ingress


服務(wù)或容器一次可以連接到多個(gè)網(wǎng)絡(luò)淹遵。服務(wù)或容器只能通過它們各自連接的網(wǎng)絡(luò)進(jìn)行通信口猜。


二、創(chuàng)建overlay網(wǎng)絡(luò)


三透揣、加密overlay網(wǎng)絡(luò)



四济炎、overlay 網(wǎng)絡(luò)實(shí)現(xiàn)原理


docker 會(huì)為每個(gè) overlay 網(wǎng)絡(luò)創(chuàng)建一個(gè)獨(dú)立的 network namespace,其中會(huì)有一個(gè) linux bridge br0淌实,endpoint 還是由 veth pair 實(shí)現(xiàn)冻辩,一端連接到容器中(即 eth0),另一端連接到 namespace 的 br0 上拆祈。

br0 除了連接所有的 endpoint恨闪,還會(huì)連接一個(gè) vxlan 設(shè)備,用于與其他 host 建立 vxlan tunnel放坏。容器之間的數(shù)據(jù)就是通過這個(gè) tunnel 通信的咙咽。


邏輯網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖


五、參考


從docker單機(jī)到swarm模式的網(wǎng)絡(luò)變化

http://www.reibang.com/p/26e13631d625


Docker Swarm管理節(jié)點(diǎn)高可用分析

https://zhoujinl.github.io/2018/10/19/docker-swarm-manager-ha


Docker Swarm服務(wù)調(diào)度分析

https://zhoujinl.github.io/2018/09/20/docker-swarm-scheduler

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淤年,一起剝皮案震驚了整個(gè)濱河市钧敞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麸粮,老刑警劉巖溉苛,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弄诲,居然都是意外死亡愚战,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門齐遵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寂玲,“玉大人,你說我怎么就攤上這事梗摇⊥赜矗” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵伶授,是天一觀的道長断序。 經(jīng)常有香客問我,道長糜烹,這世上最難降的妖魔是什么逢倍? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮景图,結(jié)果婚禮上较雕,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好亮蒋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布扣典。 她就那樣靜靜地躺著,像睡著了一般慎玖。 火紅的嫁衣襯著肌膚如雪贮尖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天趁怔,我揣著相機(jī)與錄音湿硝,去河邊找鬼。 笑死润努,一個(gè)胖子當(dāng)著我的面吹牛关斜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铺浇,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痢畜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鳍侣?” 一聲冷哼從身側(cè)響起丁稀,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倚聚,沒想到半個(gè)月后线衫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惑折,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年授账,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唬复。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖全肮,靈堂內(nèi)的尸體忽然破棺而出敞咧,到底是詐尸還是另有隱情,我是刑警寧澤辜腺,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布休建,位于F島的核電站,受9級(jí)特大地震影響评疗,放射性物質(zhì)發(fā)生泄漏测砂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一百匆、第九天 我趴在偏房一處隱蔽的房頂上張望砌些。 院中可真熱鬧,春花似錦、人聲如沸存璃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵东。三九已至粘招,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間偎球,已是汗流浹背洒扎。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衰絮,地道東北人袍冷。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像岂傲,于是被迫代替她去往敵國和親难裆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355