開源的網(wǎng)絡組件Flannel

開源的網(wǎng)絡組件

Kubernetes的網(wǎng)絡模型假定了所有Pod都在一個可以直接連通的扁平網(wǎng)絡空間中志珍。這在GCE里面是現(xiàn)成的網(wǎng)絡模型,Kubernetes假定這個網(wǎng)絡也存在痢虹。而在私有云里搭建Kubernetes集群币呵,就不能假定這種網(wǎng)絡已經(jīng)存在了。我們需要自己實現(xiàn)這個網(wǎng)絡假設紊馏,將不同節(jié)點上的Docker容器之間的相互訪問先打通,然后運行Kubernetes蒲犬。

目前已經(jīng)有多個開源組件支持容器網(wǎng)絡模型朱监。本節(jié)介紹幾個常見的網(wǎng)絡組件及其安裝配置方法,包括Flannel原叮、Open vSwitch赫编、直接路由和Calico。

Flannel

Flannel之所以可以搭建Kubernetes依賴的底層網(wǎng)絡奋隶,是因為它能實現(xiàn)以下兩點擂送。
(1)它能協(xié)助Kubernetes,給每一個Node上的Docker容器都分配互相不沖突的IP地址唯欣。
(2)它能在這些IP地址之間建立一個覆蓋網(wǎng)絡(Overlay Network)嘹吨,通過這個覆蓋網(wǎng)絡,將數(shù)據(jù)包原封不動地傳遞到目標容器內境氢。

現(xiàn)在蟀拷,通過下圖來看看Flannel是如何實現(xiàn)這兩點的碰纬。

image.png

可以看到,F(xiàn)lannel首先創(chuàng)建了一個名為flannel0的網(wǎng)橋问芬,而且這個網(wǎng)橋的一端連接docker0網(wǎng)橋悦析,另一端連接一個叫作flanneld的服務進程。
flanneld進程并不簡單此衅,它上連etcd强戴,利用etcd來管理可分配的IP地址段資源,同時監(jiān)控etcd中每個Pod的實際地址挡鞍,并在內存中建立了一個Pod節(jié)點路由表骑歹;它下連docker0和物理網(wǎng)絡,使用內存中的Pod節(jié)點路由表墨微,將docker0發(fā)給它的數(shù)據(jù)包包裝起來道媚,利用物理網(wǎng)絡的連接將數(shù)據(jù)包投遞到目標flanneld上,從而完成Pod到Pod之間的直接地址通信欢嘿。
Flannel之間的底層通信協(xié)議的可選技術包括UDP衰琐、VxLan也糊、AWS VPC等多種方式炼蹦。通過源flanneld封包、目標flanneld解包狸剃,最終docker0收到的就是原始的數(shù)據(jù)掐隐,對容器應用來說是透明的,感覺不到中間Flannel的存在钞馁。
我們看一下Flannel是如何做到為不同Node上的Pod分配的IP不產(chǎn)生沖突的虑省。其實想到Flannel使用了集中的etcd存儲就很容易理解了。它每次分配的地址段都在同一個公共區(qū)域獲取僧凰,這樣大家自然能夠互相協(xié)調探颈,不產(chǎn)生沖突了。而且在Flannel分配好地址段后训措,后面的事情是由Docker完成的伪节,F(xiàn)lannel通過修改Docker的啟動參數(shù)將分配給它的地址段傳遞進去:

--bip 172.17.18.1/24

通過這些操作,F(xiàn)lannel就控制了每個Node上的docker0地址段的地址绩鸣,也就保障了所有Pod的IP地址在同一個水平網(wǎng)絡中且不產(chǎn)生沖突了怀大。

Flannel完美地實現(xiàn)了對Kubernetes網(wǎng)絡的支持,但是它引入了多個網(wǎng)絡組件呀闻,在網(wǎng)絡通信時需要轉到flannel0網(wǎng)絡接口化借,再轉到用戶態(tài)的flanneld程序,到對端后還需要走這個過程的反過程捡多,所以也會引入一些網(wǎng)絡的時延損耗蓖康。

另外铐炫,F(xiàn)lannel模型默認采用了UDP作為底層傳輸協(xié)議,UDP本身是非可靠協(xié)議钓瞭,雖然兩端的TCP實現(xiàn)了可靠傳輸驳遵,但在大流量、高并發(fā)的應用場景下還需要反復測試山涡,確保沒有問題堤结。

Flannel的安裝和配置如下。

  1. 由于Flannel使用etcd作為數(shù)據(jù)庫鸭丛,所以需要預先安裝好etcd竞穷,此處不在過多描述。

  2. 安裝Flannel

? 需要在每個Node上都安裝Flanel鳞溉。Flannel軟件的下載地址為:

https://github.com/coreos/flannel/releases

? 將下載的壓縮包flannel-<version>-linux-amd64.tar.gz解壓瘾带,將二進制文件flanneld和mk-docker-opts.sh復制到/usr/bin(或其他PATH環(huán)境變量中的目錄)下,即可完成對Flannel的安裝熟菲。

  1. 配置Flannel

此處以使用systemd系統(tǒng)為例對flanneld服務進行配置看政。編輯服務配置文件/usr/lib/systemd/system/flanneld.service:

[Unit]
Description=flanneld overlay address etcd agent
After=network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/flanneld
ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS

[Install]
RequiredBy=docker.service
WantedBy=multi-user.target

編輯配置文件/etc/sysconfig/flannel,設置etcd的URL地址:

FLANNEL_ETCD="http://20.0.40.51:2379"

FLANNEL_ETCD_KEY="/coreos.com/network"

在啟動flanneld服務之前,需要在etcd中添加一條網(wǎng)絡配置記錄抄罕,這個配置將用于flanneld分配給每個Docker的虛擬IP地址段:

etcdctl set /coreos.com/network/config '{"Network": "10.1.0.0/16"}'

由于Flannel將覆蓋docker0網(wǎng)橋允蚣,所以如果Docker服務已啟動,則需要停止Docker服務呆贿。

  1. 啟動flanneld服務
systemctl restart flanneld
  1. 設置docker0網(wǎng)橋的IP地址
mk-docker-opts.sh -i
source /run/flannel/subnet.env
ifconfig docker0 ${FLANNEL_SUBNET}

完成后確認網(wǎng)絡接口docker0的IP地址屬于flannel0的子網(wǎng),重啟docker服務嚷兔。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市做入,隨后出現(xiàn)的幾起案子冒晰,更是在濱河造成了極大的恐慌,老刑警劉巖竟块,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壶运,死亡現(xiàn)場離奇詭異,居然都是意外死亡浪秘,警方通過查閱死者的電腦和手機蒋情,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秫逝,“玉大人恕出,你說我怎么就攤上這事∥シ” “怎么了浙巫?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我的畴,道長渊抄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任丧裁,我火速辦了婚禮护桦,結果婚禮上,老公的妹妹穿的比我還像新娘煎娇。我一直安慰自己二庵,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布缓呛。 她就那樣靜靜地躺著催享,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哟绊。 梳的紋絲不亂的頭發(fā)上因妙,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音票髓,去河邊找鬼攀涵。 笑死,一個胖子當著我的面吹牛洽沟,可吹牛的內容都是我干的以故。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玲躯,長吁一口氣:“原來是場噩夢啊……” “哼据德!你這毒婦竟也來了鳄乏?” 一聲冷哼從身側響起跷车,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎橱野,沒想到半個月后朽缴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡水援,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年密强,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜗元。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡或渤,死狀恐怖,靈堂內的尸體忽然破棺而出奕扣,到底是詐尸還是另有隱情薪鹦,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站池磁,受9級特大地震影響奔害,放射性物質發(fā)生泄漏。R本人自食惡果不足惜地熄,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一华临、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧端考,春花似錦雅潭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至核偿,卻和暖如春诚欠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漾岳。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工轰绵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尼荆。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓左腔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捅儒。 傳聞我的和親對象是個殘疾皇子液样,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354