中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用overlay怎么實現docker容器間跨宿主機通信

發布時間:2021-02-20 15:56:33 來源:億速云 閱讀:329 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關利用overlay怎么實現docker容器間跨宿主機通信,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

overlay網絡解析

內置跨主機的網絡通信一直是Docker備受期待的功能,在1.9版本之前,社區中就已經有許多第三方的工具或方法嘗試解決這個問題,例如Macvlan、Pipework、Flannel、Weave等。

雖然這些方案在實現細節上存在很多差異,但其思路無非分為兩種: 二層VLAN網絡和Overlay網絡

簡單來說,二層VLAN網絡解決跨主機通信的思路是把原先的網絡架構改造為互通的大二層網絡,通過特定網絡設備直接路由,實現容器點到點的之間通信。這種方案在傳輸效率上比Overlay網絡占優,然而它也存在一些固有的問題。

這種方法需要二層網絡設備支持,通用性和靈活性不如后者。

由于通常交換機可用的VLAN數量都在4000個左右,這會對容器集群規模造成限制,遠遠不能滿足公有云或大型私有云的部署需求; 大型數據中心部署VLAN,會導致任何一個VLAN的廣播數據會在整個數據中心內泛濫,大量消耗網絡帶寬,帶來維護的困難。

相比之下,Overlay網絡是指在不改變現有網絡基礎設施的前提下,通過某種約定通信協議,把二層報文封裝在IP報文之上的新的數據格式。這樣不但能夠充分利用成熟的IP路由協議進程數據分發;而且在Overlay技術中采用擴展的隔離標識位數,能夠突破VLAN的4000數量限制支持高達16M的用戶,并在必要時可將廣播流量轉化為組播流量,避免廣播數據泛濫。

因此,Overlay網絡實際上是目前最主流的容器跨節點數據傳輸和路由方案。

容器在兩個跨主機進行通信的時候,是使用overlay network這個網絡模式進行通信;如果使用host也可以實現跨主機進行通信,直接使用這個物理的ip地址就可以進行通信。overlay它會虛擬出一個網絡比如10.0.2.3這個ip地址。在這個overlay網絡模式里面,有類似于服務網關的地址,然后把這個包轉發到物理服務器這個地址,最終通過路由和交換,到達另一個服務器的ip地址。

利用overlay怎么實現docker容器間跨宿主機通信

環境介紹


hostnameip系統版本
cdh210.30.10.111centos7
cdh310.30.10.112centos7

consul安裝配置

要實現overlay網絡,我們會有一個服務發現。比如說consul,會定義一個ip地址池,比如10.0.2.0/24之類的。上面會有容器,容器的ip地址會從上面去獲取。獲取完了后,會通過ens33來進行通信,這樣就可以實現跨主機的通信。

利用overlay怎么實現docker容器間跨宿主機通信

consul通過docker部署在cdh2,首先需要修改cdh2中的docker配置并重啟

[root@cdh2 /]# vim /etc/docker/daemon.json
//添加以下配置
"live-restore":true
[root@cdh2 /]# systemctl restart docker

“live-restore”:true 此配置的作用為在docker守護程序停止或重啟的時候,容器依然可以保持運行

在cdh2下載consul鏡像并啟動

[root@cdh2 /]# docker pull consul
[root@cdh2 /]# docker run -d -p 8500:8500 -h consul --name consul consul

修改cdh2中的docker配置并重啟

[root@cdh2 /]# vim /etc/docker/daemon.json
# 添加以下兩行配置
"cluster-store": "consul://10.30.10.111:8500"
"cluster-advertise": "10.30.10.111:2375"
[root@cdh2 /]# systemctl restart docker

修改cdh3中的docker配置并重啟

[root@cdh3 /]# vim /etc/docker/daemon.json
# 添加以下兩行配置
"cluster-store": "consul://10.30.10.111:8500"
"cluster-advertise": "10.30.10.112:2375"
[root@cdh3 /]# systemctl restart docker

cluster-store指定的是consul服務地址,因為consul服務運行在cdh2的8500端口,所以兩臺機器的cluster-store值均為consul://10.30.10.111:8500
cluster-advertise指定本機與consul的通信端口,所以指定為本機的2375端口

此時可以通過http://10.30.10.111:8500/訪問consul地址
Key/Value菜單中的docker-nodes目錄中可以看到cdh2和cdh3兩個docker節點,代表consul配置成功。

利用overlay怎么實現docker容器間跨宿主機通信

創建overlay網絡

此時我們可以創建overlay網絡,首先查看目前節點中已有的網絡類型

[root@cdh2 /]# docker network ls
NETWORK ID   NAME    DRIVER    SCOPE
ab0f335423a1  bridge    bridge    local
b12e70a8c4e3  host    host    local
0dd357f3ecae  none    null    local

然后在cdh2的docker節點創建overlay網絡,因為此時consul服務發現已經正常運行,且cdh2和cdh3的docker服務已經接入,所以此時overlay網絡是全局創建的,在任何一臺宿主機創建一次即可。

[root@cdh2 /]# docker network create -d overlay my_overlay
cafa97c5cf9d30dd6cef08a5e9710074c828cea3fdd72edb45315fb4b1bfd84c
[root@cdh2 /]# docker network ls
NETWORK ID   NAME    DRIVER    SCOPE
ab0f335423a1  bridge    bridge    local
b12e70a8c4e3  host    host    local
cafa97c5cf9d  my_overlay   overlay    global
0dd357f3ecae  none    null    local

此時可以看到,創建的overlay網絡,標識為golbal。我們可以查看cdh3的網絡,可以發現overlay網絡也已經創建完畢。

[root@cdh3 ~]# docker network ls
NETWORK ID   NAME    DRIVER    SCOPE
90d99658ee8f  bridge    bridge    local
19f844200737  host    host    local
cafa97c5cf9d  my_overlay   overlay    global
3986fe51b271  none    null    local

網絡測試

創建完成后,我們可以在cdh2和cdh3中指定overlay網絡創建docker容器,并進行測試,查看是否可以跨宿主機通信。

在cdh2中創建名稱為master的容器,并查看其IP

[root@cdh2 /]# docker run -itd -h master --name master --network my_overlay centos7_update /bin/bash
[root@cdh2 /]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" master
10.0.0.2

在cdh2中創建名稱為slaver的容器,并查看其IP

[root@cdh3 ~]# docker run -itd -h slaver --name slaver --network my_overlay centos7_update /bin/bash
[root@cdh3 ~]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" slaver
10.0.0.3

此時進入兩臺容器中,互相ping對方的IP,查看是否成功通信

[root@cdh2 ~]# docker exec -it master /bin/bash
[root@master /]# ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.587 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.511 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.431 ms
64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.551 ms
64 bytes from 10.0.0.3: icmp_seq=5 ttl=64 time=0.424 ms
^C
--- 10.0.0.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.424/0.500/0.587/0.070 ms
[root@cdh3 ~]# docker exec -it slaver /bin/bash
[root@slaver /]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.499 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.500 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.410 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.370 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.370/0.444/0.500/0.062 ms

上述就是小編為大家分享的利用overlay怎么實現docker容器間跨宿主機通信了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南充市| 五台县| 新余市| 治多县| 营山县| 沐川县| 安徽省| 云龙县| 葫芦岛市| 淮南市| 盐城市| 白城市| 唐河县| 长宁区| 灌阳县| 棋牌| 资讯| 留坝县| 水城县| 仙桃市| 云浮市| 洛隆县| 酒泉市| 塘沽区| 沛县| 五原县| 固安县| 武清区| 昌平区| 博野县| 宕昌县| 遂溪县| 怀化市| 安陆市| 阿拉善左旗| 吴江市| 灵寿县| 宾阳县| 乾安县| 宝兴县| 公安县|