0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

docker跨主機(jī)通信的方法

汽車玩家 ? 來源:Devops部落 ? 作者:Devops部落 ? 2020-01-21 17:14 ? 次閱讀

概述

flannel是CoreOS提供用于解決Dokcer集群跨主機(jī)通訊的覆蓋網(wǎng)絡(luò)工具。它的主要思路是:預(yù)先留出一個(gè)網(wǎng)段,每個(gè)主機(jī)使用其中一部分,然后每個(gè)容器被分配不同的ip;讓所有的容器認(rèn)為大家在同一個(gè)直連的網(wǎng)絡(luò),底層通過UDP/VxLAN等進(jìn)行報(bào)文的封裝和轉(zhuǎn)發(fā)。

架構(gòu)圖

docker跨主機(jī)通信的方法

跨主機(jī)容器通信

這里涉及到一個(gè)知識點(diǎn),就是底層通過UDP/VxLAN設(shè)備進(jìn)行報(bào)文的封裝和轉(zhuǎn)發(fā),以下來敘述一下這個(gè)過程,當(dāng)報(bào)文從Pod1:10.1.15.2/24要去往Pod4: 10.1.20.2/24這個(gè)容器的時(shí)候,要分別經(jīng)過以下步驟。

因?yàn)镻od1的veth0和docker0的一段網(wǎng)卡相連,所以數(shù)據(jù)包會先發(fā)往docker0網(wǎng)橋,此時(shí)docker0會查詢自己所維護(hù)的路由表,沒有發(fā)現(xiàn)有10.1.20.2/24這個(gè)地址,所以會把數(shù)據(jù)包發(fā)送給默認(rèn)路由,這里的默認(rèn)路由即flannel網(wǎng)橋。

docker跨主機(jī)通信的方法

flannel網(wǎng)橋是一個(gè)VxLAN設(shè)備,它收到數(shù)據(jù)包后,檢查到包中的目的地址并不是自己的地址,所以他本應(yīng)該這把這個(gè)數(shù)據(jù)包重新發(fā)送出去,因?yàn)樗南乱粚右呀?jīng)是數(shù)據(jù)鏈路層,所以即將進(jìn)行二層封包,即通過ARP協(xié)議來對以太網(wǎng)進(jìn)行廣播誰是10.1.20.2/24,接受并記錄目的的MAC地址。但是由于它是一個(gè)VxLAN設(shè)備,其特殊性就是并沒有真正在二層發(fā)出這個(gè) arp 包,而是由 linux kernel 引發(fā)一個(gè)”L3 MISS”事件并將 arp 請求發(fā)到用戶空間的 Flannel 程序中。

docker跨主機(jī)通信的方法

flannel程序接收到”L3 MISS”事件以及 arp 請求 (who is10.1.20.2/24 ) 后,并不會像以太網(wǎng)發(fā)送ARP請求,而是在etcd中匹配10.1.20.2/24的信息,從而找到Node2的MAC地址。Flannel 將查詢到的信息放入 Node1 host 的 arp cache 表中,flannel0 完成這項(xiàng)工作后,Linux kernel 就可以在 arp table 中找到 10.1.20.2/24對應(yīng)的 MAC 地址并封裝二層以太包了。

Node 上 2 的 eth0 接收到上述 VXLAN 包,內(nèi)核也識別出這是一個(gè) VXLAN 包,于是通過相反的步驟解包出來,最后傳達(dá)到POD4上去。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5450

    瀏覽量

    172177
  • 集群
    +關(guān)注

    關(guān)注

    0

    文章

    88

    瀏覽量

    17188
收藏 人收藏

    評論

    相關(guān)推薦

    全面介紹docker的使用方法

    docker使用方法
    發(fā)表于 07-25 14:22

    Docker容器管理命令(一)

    1、Docker容器管理命令的使用方法查看當(dāng)前主機(jī)本地docker鏡像:啟動容器必須依賴鏡像,所以要獲取到鏡像的唯一標(biāo)識docker容器管理
    發(fā)表于 04-20 17:55

    Docker容器管理命令(二)

    1、Docker容器管理命令的使用方法批量刪除docker 容器docker cp命令docker cp :用于容器與
    發(fā)表于 04-21 11:31

    docker基礎(chǔ)知識和使用bmnnsdk時(shí)的docker常用命令

    安裝docker并下載bmnnsdk2 解壓bmnnsdk壓縮包(以下簡成bmnnsdk為SDK) 進(jìn)入SDK解壓后文件夾,文件名如bmnnsdk2_bm1684_vx.x.x ,此為宿主機(jī)根目錄; 從
    發(fā)表于 09-18 07:59

    如何在docker容器內(nèi)使用宿主機(jī)上的顯示設(shè)備顯示圖像?

    主機(jī)名:端口』共享給docker,docker 就可以通過端口找到顯示輸出的地方,和linux系統(tǒng)共用顯示設(shè)備: 宿主機(jī)安裝x11-server: sudo apt-get ins
    發(fā)表于 09-19 08:16

    如何判斷是否在docker鏡像中?

    則簡潔很多 3. 一個(gè)有些土的方法:大部分 docker 容器中都不會在安裝 docker,至少算能SDK 的docker是這樣的,所以在云主機(jī)
    發(fā)表于 09-20 07:42

    網(wǎng)段獲取遠(yuǎn)程主機(jī)MAC地址的方法與java實(shí)現(xiàn)

    本文分析了利用SendARP 方法(基于ARP 協(xié)議)來獲取遠(yuǎn)程主機(jī)MAC 地址的缺陷,提出了一種新思路——研究并利用SNMP 協(xié)議來快速獲取遠(yuǎn)程主機(jī)MAC 地址的方法,并給出了其在J
    發(fā)表于 09-18 11:01 ?61次下載

    基于Docker的云資源彈性調(diào)度策略

    針對云資源彈性調(diào)度問題,結(jié)合Ceph數(shù)據(jù)存儲的特點(diǎn),提出一種基于Docker容器的云資源彈性調(diào)度策略。首先,指出Docker容器數(shù)據(jù)卷不能主機(jī)的特性給應(yīng)用在線遷移帶來了困難,并對Ce
    發(fā)表于 03-29 10:11 ?0次下載
    基于<b class='flag-5'>Docker</b>的云資源彈性調(diào)度策略

    容器主機(jī)存儲教程說明

    REX-Ray 容器主機(jī)存儲坑實(shí)在是太多,百度搜索出來的各種解決方案很少有實(shí)際意義,跟風(fēng)粘貼復(fù)制者眾,大家在學(xué)習(xí)這些前沿技術(shù)時(shí),學(xué)會去國外官方論壇上查詢問題。rex-ray作為docker
    的頭像 發(fā)表于 09-22 17:46 ?3407次閱讀

    docker的4種網(wǎng)絡(luò)模式

    Docker 使用 Linux 橋接,在宿主機(jī)虛擬一個(gè) Docker 容器網(wǎng)橋(docker0),Docker 啟動一個(gè)容器時(shí)會根據(jù)
    的頭像 發(fā)表于 08-14 11:50 ?1863次閱讀

    docker的4種網(wǎng)絡(luò)模式配置

    Docker 使用 Linux 橋接,在宿主機(jī)虛擬一個(gè) Docker 容器網(wǎng)橋(docker0),Docker 啟動一個(gè)容器時(shí)會根據(jù)
    的頭像 發(fā)表于 10-10 10:37 ?1474次閱讀

    Docker容器網(wǎng)絡(luò)的數(shù)據(jù)鏈路是什么

    主機(jī)容器網(wǎng)絡(luò)可能存在多個(gè)docker,分屬于不同的bridge,它們之間有通信的需求。
    的頭像 發(fā)表于 02-15 09:56 ?926次閱讀
    <b class='flag-5'>Docker</b>容器網(wǎng)絡(luò)的數(shù)據(jù)鏈路是什么

    docker exec命令的使用方法

    有用的命令,用于在正在運(yùn)行的容器中執(zhí)行命令。 在本文中,我將詳細(xì)介紹Docker exec命令的使用方法,包括命令格式、參數(shù)選項(xiàng)、使用示例等。 Docker exec命令格式 Docker
    的頭像 發(fā)表于 11-23 09:33 ?1664次閱讀

    docker容器與容器之間通信

    Docker是一種輕量級容器化技術(shù),能夠?qū)?yīng)用程序及其依賴項(xiàng)封裝在一個(gè)獨(dú)立、可移植的容器中。而容器化的應(yīng)用程序通常是以分布式方式設(shè)計(jì)的,因此實(shí)現(xiàn)容器與容器之間的通信至關(guān)重要。 本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-23 09:36 ?1592次閱讀

    docker進(jìn)入容器的方法有哪些

    Docker是一種流行的容器化平臺,它能夠快速構(gòu)建、交付和運(yùn)行應(yīng)用程序。在使用Docker時(shí),我們經(jīng)常需要進(jìn)入容器進(jìn)行調(diào)試、管理和運(yùn)行命令等操作。本文將詳細(xì)介紹Docker進(jìn)入容器的各種方法
    的頭像 發(fā)表于 11-23 09:45 ?1.1w次閱讀