docker容器使用pipework橋接網絡跨主機通信

docker容器的跨主機通信有好多種方案,此處用的是橋接物理網卡的方式實現的;

一、新建網卡,並橋接物理網卡;

在宿主機上新建一個網卡,並橋接物理網卡,可以使用 nm-connection-editor 命令進入圖形化界面進行配置,也可以用 nmcli connection 命令的方式配置,還可以使用 在/etc/sysconfig/network-scripts/下編輯配置文件的方式進行配置;

爲了快速方便,此處使用  nmcli connection 命令的方式進行配置:

1、創建新網卡;

nmcli connection add type bridge con-name bridge1 ifname br_1

#bridge1 和 br_1 是網卡名字,可以隨便寫;

2、修改網卡參數;

nmcli connection modify bridge1 ipv4.addresses 192.168.139.200/24 ipv4.gateway 192.168.139.2 ipv4.method manual

#ipv4.addresses是宿主機網段中的一個ip,可以和宿主機ip相同,爲了搶佔宿主機的網卡使用權;

#ipv4.gateway是宿主機的網關,不知道的可以 route -n 看下;

#ipv4.method 是設置該網卡爲手動,即:不需要自動獲取ip;

3、配置橋接;

nmcli connection add type bridge-slave ifname ens33 con-name br-slave master br_1

#ifname 是宿主機的物理網卡;

#br-slave 是橋接的網卡,可以隨便寫;

#br_1 是上面創建的網卡;

4、執行結果;

5、需要 systemctl restart network 重啓網卡;

重啓後 ssh 192.168.139.200 進行連接;通過 ip a 命令可以看到:

原有的物理網卡 ens33 沒有了ip,創建的 br_1 是我們設定的ip;再通過 brctl show 查看:

br_1橋接到了原有的物理網卡ens33上;但此時如果你ping百度的話應該是不通的,根據錯誤進行排查是路由問題還是dns問題:

6、配置好橋接網絡再進行以下步驟;

二、下載pipework工具,並配置環境變量;

1、pipework工具github鏈接: https://github.com/jpetazzo ;你會發現大神總有與衆不同的地方,膜拜......

2、執行git命令拉取,並配置環境變量:

git clone https://github.com/jpetazzo/pipework
cp ./pipework/pipework /usr/local/bin/

ok,現在可以使用 pipework 這個命令工具了;

三、運行一個容器並使用none網絡模式;

1、大家都知道docker容器有三種網絡模式: bridge、host、none,具體作用此處不再多述;

2、創建一個none網絡的容器:

docker run -it --network none --name pipework_test centos:full /bin/bash

none網絡是隻有lo網卡的;

四、使用pipework進行配置容器 pipework_test 的ip地址;

1、 執行命令給容器配置ip:

pipework bridge0 pipework_test 192.168.139.210/[email protected]

#192.168.139.210是給容器配置的ip,應考慮避免網段中是否已有該ip;

#192.168.139.2是網關,也就是宿主機網關;

五、測試通信;

到容器中查看:

多出來一個eth1的網卡;

ok;再來看一下路由和dns:

正常;

最後ping一下百度:

ok;到此完畢;

 

  • 注: 容器重啓後會導致pipework配置的ip消失;
  • 可以通過shell腳本進行自動化ip的配置,具體看個人應用情況了;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章