1. 程式人生 > >Docker容器的跨主機連線

Docker容器的跨主機連線

Docker容器的跨主機連線

使用網橋實現跨主機容器連線

1.網橋方式需要安裝網橋管理工具:

apt-get install bridge-utils

2.修改主機的/etc/network/interfaces檔案

auto lo
iface lo inet loopback
 
auto br0
iface br0 inet static
address 10.211.55.3 #這裡具體需要填寫你自己主機的IP地址
netmask 255.255.255.0
gateway 10.211.55.1 #需要你填寫具體的網管
bridge_ports eth0

3.修改/etc/default/docker

檔案,新增如下內容

DOCKER_OPTS="-b=br0 --fixed-cidr='10.211.55.64/26'"

 

解釋一下:

-b:指定使用自定義網橋,-b=br0

--fixed-cidr:限制ip地址的分配範圍

IP地址劃分為:

Host1:10.211.55.64/26

地址範圍:10.211.55.65~10.211.55.126

Host2:10.211.55.128/26

地址範圍:10.211.55.129~10.211.55.190

怎麼算的?

設定完畢以後使用ifconfig,ps -fe | grep docker來檢視一下.在其他的主機上也做同樣的地址配置就可以是選不同物理主機之間的

docker容器互聯了.

樓主鼓搗了半天,沒配置好還是算了吧,因為這種方式實現跨主機容器連線的方式缺點很多一般不使用.

所以咱們直接學第二種方式來實現跨主機的容器連線.

使用Open vSwitch(ovs)實現跨主機的容器連線.

先看官方的定義:它是一個高質量的,多層的虛擬交換機,使用開源Apache2.0許可協議,主要實現程式碼是可移植的C程式碼.目的是讓大規模網路自動化可以通過程式設計擴充套件,同時仍然支援標準的管理介面和協議.

再來看民間的:一個虛擬交換機.交換機有啥作用,OVS就啥作用.

先看一下實現這種方式的連線所具備的條件:

1.雙網絡卡,Host-Only & NAT

2.安裝Open vSwitch:apt-get install openvswitch-switch

操作步驟:

1.在虛擬機器中建立ovs網橋

2.新增gre連線

3.配置docker容器虛擬網橋

4.為虛擬網橋新增ovs介面

5.新增不同Docker容器網段路由

具體執行的一些命令如下:

sudo ovs-vsctl show
sudo ovs-vsctl add-br obr0
sudo ovs-vsctl add-port obr0 gre0
sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.59.104
sudo ovs-vsctl show
 
sudo brctl addbr br0
sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0
sudo brctl addif br0 obr0
sudo brctl show
 
route
sudo ip route add 192.168.2.0/24 via 192.168.59.104 dev eth0

 
使用weave實現跨主機容器連線

建立一個虛擬的網路,用於將執行在不同主機的Docker容器連線起來.

要實現這種方式所需要的條件如下:

雙網絡卡,Host-Only & NAT

host1:10.0.2.6

host2:10.0.2.8

host1上應用容器1:192.168.0.2/24 host1上應用容器2:192.168.1.2/24

host2上應用容器1:192.168.0.3/24

兩臺機器上均安裝Docker以及weave,並均啟動好weave路由容器

在兩臺機器上均啟動一個應用容器.可以直接使用weave run命令,也可以先使用docker run啟動好容器,然後使用weave attach命令給容器繫結IP地址.

weave run 192.168.0.2/24


或者

docker run -itd ubuntu bash
weave attach 192.168.0.2/24 &ID


這個時候發現兩個容器之間不通的,需要使用weave connect命令在兩臺weave的路由器之間建立連線.

weave connect 10.0.2.8


會發現,此時位於兩臺不同主機上的容器之間可以相互ping通了。但是處於不同子網的兩個容器是不能互聯的,這樣我們就可以使用不同子網進行容器間的網路隔離了。

我們會發現,如果不使用Docker的原生網路,在容器內部是不能訪問宿主機以及外部網路的。此時我們可以使用weave expose 192.168.0.1/24來給weave網橋新增IP,以實現容器與宿主機網路連通。但是,此時在容器內部依然不能訪問外部網路。


我們可以同時使用Docker的原生網路和weave網路來實現容器互聯及容器訪問外網和埠對映。使用外部網路及埠對映的時候就使用docker0網橋,需要容器互聯的時候就使用weave網橋。每個容器分配兩個網絡卡。

操作步驟:

1.安裝weave

# sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
# sudo chmod a+x /usr/local/bin/weave


2.啟動weave

weave launch

以上內容純屬樓主聽別人說的,沒有經過樓主的親自試驗,所以不保證正確性,因為樓主的Docker虛擬機器被樓主搞壞了,樓主這幾天正在裝虛擬機器.