07_docker容器跨宿主機通信方法:Openvswitch

拋出問題

??上一節使用pipework配置容器間通信,每次創建新的容器時,都要使用pipework為新容器配置網絡,能不能容器就有網絡并且能互相通信呢?下面使用openvswitch來配置網絡解決此問題

openvswitch安裝

  • 安裝依賴
    yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config
    yum -y install python-devel openssl-devel kernel-devel kernel-debug-devel libtool wget
    安裝2.5.1,有上面這些依賴就行了,但是安裝2.7.0,還需要安裝以下依賴
    yum install -y python-six selinux-policy-devel

  • 預處理

mkdir -p ~/rpmbuild/SOURCES  
wget http://openvswitch.org/releases/openvswitch-2.7.0.tar.gz  
cp openvswitch-2.7.0.tar.gz ~/rpmbuild/SOURCES/  
tar -zxf openvswitch-2.7.0.tar.gz 
sed 's/openvswitch-kmod, //g' openvswitch-2.7.0/rhel/openvswitch.spec > openvswitch-2.7.0/rhel/openvswitch_no_kmod.spec  
  • 構建rpm包
    rpmbuild -bb --nocheck ~/openvswitch-2.7.0/rhel/openvswitch_no_kmod.spec
    這一步可能需要幾分鐘

  • 安裝
    yum localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.7.0-1.x86_64.rpm

  • 啟動openvswitch服務
    setenforce 0
    systemctl start openvswitch.service

環境

  • 兩臺主機
    server1:192.168.175.214
    server1:192.168.175.215

  • 軟件版本:
    centos:7.2
    docker版本:1.12.6
    openvswitch :2.7.0

  • 網絡配置架構


如上面的步驟,分別在server1和server2上安裝openvswitch 。

配置步驟

  • 在server配置ovs bridge 和 路由
    ??在配置bridge之前需要首先規劃好docker ip地址的分配,保證docker容器的ip地址夠用。 此安裝過程中docker地址分配方式為:
    1. server1 docker : 172.17.1.0 / 24
    2. server2 docker : 172.17.2.0 /24 ,在server1和server2中各自可以同時運行253個docker實例。

??server1 和server2中docker容器ip地址掩碼為255.255.255.0 , 因此,server1和server2的ip地址屬于不同的網段,他們之間如果要通信,需要配置gateway 。

  • server1配置
    ??修改/proc/sys/net/ipv4/ip_forward的值為1,運行ip轉發。雖然現在修改了此值,但是后邊啟動服務的時候,ip_forward的值又成了0 或著 這個值不允許通過vim命令直接修改, 可以通過sftp工具,直接替換該文件。

  • 創建網橋kbr0,并刪除docker0網橋。

ovs-vsctl add-br obr0  
ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.175.214  
brctl addbr kbr0  
brctl addif kbr0 obr0  
ip link set dev docker0 down  
ip link del dev docker0  
  • 配置kbr0網卡信息:vi /etc/sysconfig/network-scripts/ifcfg-kbr0
DEVICE=kbr0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.17.1.1
NETMASK=255.255.255.0
GATEWAY=172.17.1.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no
  • 配置路由信息: vi /etc/sysconfig/network-scripts/route-eth0 , 用于轉發到其它宿主機上docker容器,其中eth0為真實的網卡設備名稱,需要根據虛擬機網卡配置(你的機器不一定是eth0)。
172.17.2.0/24 via 192.168.175.215 dev eth0
  1. 在server1上添加路由表,使server1能到達server2定義的172.17.2.0/24網段。
  2. 這個千萬不要配錯了,意思是告訴server1在172.17.2.0/24網段的ip在192.168.175.215的server2上
  • 重啟網絡:systemctl restart network.service

    1. 如果重啟失敗可以通過 cat /var/log/messages | grep network 查看錯誤日志。
    2. 實際中測試,啟動網絡不一定有用,需要重啟主機
  • server2配置
    server2和server1的配置步驟相同,不同的配置為:

    1. ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.175.215
    2. /etc/sysconfig/network-scripts/ifcfg-kbr0IPADDR=172.17.2.1 GATEWAY=172.17.2.0
    3. /etc/sysconfig/network-scripts/route-eth0172.17.1.0/24 via 192.168.175.214 dev eth0
  • 設置docker容器網橋

    1. 直接修改/etc/systemd/system/docker.service ,添加參數 -b kbr0 , 重啟docker服務。
    2. 修改vi /etc/sysconfig/docker文件,在OPTIONS末尾添加-b=kbr0
      我們采用第二種方式如下:
  • 重啟docker服務
    systemctl restart docker.service

  • 在server1和server2上分別創建容器
    docker run -itd --name=mycs6 docker.io/guyton/centos6 /bin/bash

測試網絡情況

  • 在server1的容器中
    查看網絡
[root@c778cae8a2e5 /]# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:01:02  
          inet addr:172.17.1.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::42:acff:fe11:102/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8935 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8790 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:32897635 (31.3 MiB)  TX bytes:480339 (469.0 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@c778cae8a2e5 /]

ping外網

[root@c778cae8a2e5 /]# ping www.baidu.com
PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.
64 bytes from 163.177.151.110: icmp_seq=1 ttl=127 time=9.32 ms
64 bytes from 163.177.151.110: icmp_seq=2 ttl=127 time=9.54 ms
....

ping 宿主機

[root@c778cae8a2e5 /]# ping 192.168.175.214
PING 192.168.175.214 (192.168.175.214) 56(84) bytes of data.
64 bytes from 192.168.175.214: icmp_seq=1 ttl=64 time=0.373 ms
64 bytes from 192.168.175.214: icmp_seq=2 ttl=64 time=0.121 ms
  • 在server2的容器中
    查看網絡
[root@59ce329fee7f /]# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:02:02  
          inet addr:172.17.2.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::42:acff:fe11:202/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8913 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8765 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:32831848 (31.3 MiB)  TX bytes:478809 (467.5 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@59ce329fee7f /]#

ping外網

[root@59ce329fee7f /]# ping www.baidu.com
PING www.a.shifen.com (163.177.151.109) 56(84) bytes of data.
64 bytes from 163.177.151.109: icmp_seq=1 ttl=127 time=8.26 ms
64 bytes from 163.177.151.109: icmp_seq=2 ttl=127 time=8.30 ms
......

ping宿主機

[root@59ce329fee7f /]# ping 192.168.175.215
PING 192.168.175.215 (192.168.175.215) 56(84) bytes of data.
64 bytes from 192.168.175.215: icmp_seq=1 ttl=64 time=0.227 ms
64 bytes from 192.168.175.215: icmp_seq=2 ttl=64 time=0.078 ms
......
  • 容器互ping
    在server1上的容器中ping server2中的容器
[root@c778cae8a2e5 /]# ping 172.17.2.2
PING 172.17.2.2 (172.17.2.2) 56(84) bytes of data.
64 bytes from 172.17.2.2: icmp_seq=1 ttl=62 time=1.15 ms
64 bytes from 172.17.2.2: icmp_seq=2 ttl=62 time=0.633 ms
......

在server2上的容器中ping server1中的容器

[root@59ce329fee7f /]# ping 172.17.1.2
PING 172.17.1.2 (172.17.1.2) 56(84) bytes of data.
64 bytes from 172.17.1.2: icmp_seq=1 ttl=62 time=0.329 ms
64 bytes from 172.17.1.2: icmp_seq=2 ttl=62 time=0.618 ms
......

上述證明:容器與容器之間、容器與宿主機、容器與外網都是通的

參考文檔

基于openvswitch的不同宿主機docker容器網絡互聯
OpenvSwitch實現Docker容器跨宿主機互聯
利用Openvswitch實現不同物理機中的Docker容器互連

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容

  • 很多人可能在項目中已經使用docker很長時間,但是卻很少有人知道docker的網絡是如何實現的。我應該就算是很多...
    水雨田閱讀 1,131評論 0 3
  • 【編者的話】當你在一臺主機上成功運行Docker容器后,信心滿滿地打算將其擴展到多臺主機時,卻發現前面的嘗試只相當...
    SDNLAB閱讀 1,041評論 0 6
  • 剛剛收了兩封拒信,杜克大學的和萊斯大學的。然后和一個朋友閑聊。他說他把我進康奈爾的消息告訴給另外一個同學了,那同學...
    Richardo92閱讀 391評論 1 1
  • 街頭漫步,見林蔭處長者云集,歡聲笑語,笙簫悠揚,其樂融融,不禁感慨良多,攝影以留念,作文以傳情,樂在其中也。 灑...
    曹煥甫閱讀 222評論 1 1
  • ConstraintLayout已經出來有八百多年了,但是因為平時已經習慣了在XML里手寫布局,基本上已經到了不看...
    李汪汪汪俠閱讀 316評論 0 0