k8s 網(wǎng)絡二 k8s組網(wǎng)與插件

主機內(nèi)組網(wǎng)

k8s主機內(nèi)組網(wǎng)模型是veth pair+bridge的方式。
k8s使用veth pair將容器與主機的網(wǎng)絡協(xié)議棧連接起來凉翻,從而使數(shù)據(jù)包可以進出pod。容器放在主機根network namespace中,veth pair的一端連接到linux網(wǎng)橋泪勒,可以讓同一節(jié)點上的各pod之間相互通信跌前。

跨節(jié)點組網(wǎng)

k8s跨節(jié)點組網(wǎng)模型有bridge棕兼、overlay等。
bridge網(wǎng)絡本身不解決容器的跨節(jié)點通信抵乓,而是添加主機路由表伴挚,映射目標容器網(wǎng)段和主機IP的關(guān)系,集群內(nèi)如果有N個主機灾炭,則需要N-1條路由項茎芋。
overlay網(wǎng)絡構(gòu)建在物理網(wǎng)絡上的虛擬網(wǎng)絡,VXLAN是主流的overlay標準蜈出。VXLAN是用UDP包頭封裝二層幀田弥,即所謂的MAC in UDP。
為了讓多個Pod的網(wǎng)絡命名空間鏈接起來铡原,可以讓veth對的一端鏈接到root網(wǎng)絡命名空間(宿主機的)皱蹦,另一端鏈接到Pod的網(wǎng)絡命名空間煤杀。還需要Linux以太網(wǎng)橋,它是虛擬的二層網(wǎng)絡設備沪哺,把多個以太網(wǎng)段連接起來沈自,它維護轉(zhuǎn)發(fā)表,通過查看每個設備mac地址決定轉(zhuǎn)發(fā)辜妓,還是丟棄數(shù)據(jù)枯途。

跨節(jié)點通信
隧道方案( Overlay Networking )

隧道方案在IaaS層的網(wǎng)絡中應用也比較多,但隨著節(jié)點規(guī)模的增長籍滴,復雜度會提升酪夷,而且跟蹤網(wǎng)絡問題比較麻煩。
Weave:UDP廣播孽惰,本機建立新的BR晚岭,通過PCAP互通。
Open vSwitch(OVS):基于VxLan和GRE協(xié)議勋功,但是性能方面損失比較嚴重坦报。
Flannel:UDP廣播,VxLan狂鞋。

overlay網(wǎng)絡是指在不改變現(xiàn)有網(wǎng)絡基礎設施的前提下片择,通過額外的網(wǎng)絡協(xié)議,把二層報文封裝在IP報文之上的新的數(shù)據(jù)格式骚揍,形成邏輯上的新網(wǎng)絡字管。這樣不但能夠充分利用成熟的ip路由協(xié)議進行數(shù)據(jù)分發(fā),而且在overlay技術(shù)中采用擴展的隔離標識位數(shù)信不,能夠突破vlan的4000數(shù)量限制嘲叔,支持高達16M的用戶,并且在必要時將廣播流量轉(zhuǎn)化為組播流量抽活,避免廣播數(shù)據(jù)泛濫硫戈。

flannel插件
flannel為每個主機的docker deamon分配一個ip段,通過etcd維護一個跨主機的路由表酌壕,容器之間的ip是可以互相連通的掏愁,當兩個跨主機的容器要通信的時候,會在主機上修改數(shù)據(jù)包的header卵牍,修改目的地址和源地址果港,經(jīng)過路由表發(fā)送到目標主機后解封。封包的方式糊昙,支持udp/vxlan/host-gw等辛掠,但是如果一個容器要暴露服務,還是需要映射ip到主機側(cè)。

路由方案

一般是從3層或者2層實現(xiàn)隔離和跨主機容器互通的萝衩,出了問題也容易排查回挽。
Calico:基于BGP協(xié)議的路由方案,支持細粒度的ACL控制猩谊,對混合云親和度比較高千劈。
Macvlan:從邏輯和Kernel層來看隔離性和性能最優(yōu)的方案,基于二層隔離牌捷,所以需要二層路由器支持墙牌,大多數(shù)云服務商不支持,所以混合云上較難實現(xiàn)暗甥。

calico插件
Calico是基于BGP的純?nèi)龑拥木W(wǎng)絡方案喜滨。Calico可以應用在虛擬機,物理機撤防,容器環(huán)境中虽风。在Calico運行的主機上可以看到大量由linux路由組成的路由表,這是calico通過自有組件動態(tài)生成和管理的寄月。但BGP帶給它的好處的同時也帶給他的劣勢辜膝,BGP協(xié)議在企業(yè)內(nèi)部還很少被接受,企業(yè)網(wǎng)管不太愿意在跨網(wǎng)絡的路由器上開啟BGP協(xié)議剥懒。
基于BGP的純?nèi)龑拥木W(wǎng)絡方案内舟。Calico保證所有容器之間的數(shù)據(jù)流量都是通過IP路由的方式完成互聯(lián)互通合敦。Calico節(jié)點組網(wǎng)可以直接利用數(shù)據(jù)中心的網(wǎng)絡結(jié)構(gòu)(L2或L3)初橘,不需要額外的NAT、隧道或者overlay network充岛,沒有額外的封包解包保檐,節(jié)約CPU運算且提高網(wǎng)絡效率。容器的IP可以直接對外部訪問崔梗,可以直接分配到業(yè)務IP夜只,而且如果網(wǎng)絡設備支持BGP的話,可以用它實現(xiàn)大規(guī)模的容器網(wǎng)絡蒜魄。
calico插件可提供pod固定ip的解決方案扔亥。

三層(路由)和隧道的異同

相同之處是都實現(xiàn)了跨主機容器的三層互通,都是通過對目的 MAC 地址的操作來實現(xiàn)的谈为。
不同之處是三層通過配置下一條主機的路由規(guī)則來實現(xiàn)互通旅挤,隧道是通過通過在 IP 包外再封裝一層 MAC 包頭來實現(xiàn)。
三層的優(yōu)點:少了封包和解包的過程伞鲫,性能更高粘茄。
三層的缺點:需要自己維護路由規(guī)則。
隧道的優(yōu)點:簡單,原因是大部分工作都是已由 Linux 內(nèi)核的模塊實現(xiàn)柒瓣,應用層工作量較少儒搭。
隧道的缺點:性能低。

CNI

在k8s平臺上芙贫,通過CNI插件的方式部署容器網(wǎng)絡搂鲫。
Container Networking Interface(CNI)定義的是容器運行環(huán)境與網(wǎng)絡插件之間的接口規(guī)范,僅關(guān)心容器創(chuàng)建時的網(wǎng)絡配置和容器被銷毀時網(wǎng)絡資源的釋放磺平。容器可以通過綁定多個CNI插件加入多個網(wǎng)絡中默穴。
與CRI之于k8s的runtime類似。CNI是pod網(wǎng)絡的標準接口褪秀,通過JSON描述容器網(wǎng)絡配置蓄诽,是k8s與底層網(wǎng)絡插件之間的抽象層。
要使用CNI網(wǎng)絡驅(qū)動則需要配置參數(shù)--network-plugin=cni媒吗。k8s從--cni-conf-dir(默認為/etc/cni/net.d)中讀取文件的CNI配置來配置每個pod網(wǎng)絡仑氛。CNI插件二進制文件的目錄通過kubelet的--cni-bin-dir參數(shù)配置(默認為/otp/cni/bin)。
CNI從v1.11版本開始支持控制pod的帶寬闸英。

網(wǎng)絡互通
  • pod到pod锯岖, 三層網(wǎng)絡的連通。 通過CNI實現(xiàn)甫何。
  • pod到service出吹, 四層負載均衡器。 通過kube-proxy實現(xiàn)辙喂。
  • pod到k8s外捶牢, 通過SNAT實現(xiàn)。
  • 主機到pod巍耗,
IP轉(zhuǎn)發(fā)

內(nèi)核態(tài)設置秋麸,允許將一個接口的流量轉(zhuǎn)發(fā)到另一個接口。該配置是linux內(nèi)核將流量從容器路由到外部所必須的炬太。ipv4 forwarding灸蟆。

橋接

k8s通過bridge-netfilter配置使iptables規(guī)則應用到linux網(wǎng)橋上。該配置對linux內(nèi)核進行宿主機和容器之間數(shù)據(jù)包的地址轉(zhuǎn)換是必須的亲族。否則pod進行外部服務網(wǎng)絡請求時會出現(xiàn)目標主機不可達或者連接拒絕的錯誤炒考。

tips

“單pod單ip”網(wǎng)絡模型。實現(xiàn)k8s扁平化網(wǎng)絡霎迫。容器之間直接通信斋枢,不需要額外NAT。node與容器網(wǎng)絡直連女气,不需要額外NAT杏慰。
扁平化網(wǎng)絡的優(yōu)點:沒有NAT帶來的性能損耗,可以追溯源地址,為網(wǎng)絡策略做鋪墊缘滥,降低網(wǎng)絡排錯難度轰胁。

pod中docker容器和pod在同一個網(wǎng)絡命名空間內(nèi),所以ip和端口等網(wǎng)絡配置都和pod一樣朝扼,是docker的網(wǎng)絡模式是container赃阀,即和已經(jīng)存在的容器(pause容器)共享網(wǎng)絡。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擎颖,一起剝皮案震驚了整個濱河市榛斯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搂捧,老刑警劉巖驮俗,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異允跑,居然都是意外死亡王凑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門聋丝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來索烹,“玉大人,你說我怎么就攤上這事弱睦“傩眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵况木,是天一觀的道長垒拢。 經(jīng)常有香客問我,道長焦读,這世上最難降的妖魔是什么子库? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任舱权,我火速辦了婚禮矗晃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宴倍。我一直安慰自己张症,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布鸵贬。 她就那樣靜靜地躺著俗他,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阔逼。 梳的紋絲不亂的頭發(fā)上兆衅,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼羡亩。 笑死摩疑,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的畏铆。 我是一名探鬼主播雷袋,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辞居!你這毒婦竟也來了楷怒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瓦灶,失蹤者是張志新(化名)和其女友劉穎鸠删,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贼陶,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡冶共,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了每界。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捅僵。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眨层,靈堂內(nèi)的尸體忽然破棺而出庙楚,到底是詐尸還是另有隱情,我是刑警寧澤趴樱,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布馒闷,位于F島的核電站,受9級特大地震影響叁征,放射性物質(zhì)發(fā)生泄漏纳账。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一捺疼、第九天 我趴在偏房一處隱蔽的房頂上張望疏虫。 院中可真熱鬧,春花似錦啤呼、人聲如沸卧秘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翅敌。三九已至,卻和暖如春惕蹄,著一層夾襖步出監(jiān)牢的瞬間蚯涮,已是汗流浹背治专。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遭顶,地道東北人看靠。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像液肌,于是被迫代替她去往敵國和親挟炬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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