Weave跨主機實現docker互通,固定ip及dns使用介紹

一.weave介紹
Weave是由weaveworks公司開發的解決Docker跨主機網絡的解決方案,如今就採用它來實現Docker多宿主機互聯的目的,它可以建立一個虛擬網絡,用於鏈接部署在多臺主機上的Docker容器,這樣容器就像被接入了同一個網絡交換機,那些使用網絡的應用程序沒必要去配置端口映射和連接等信息。git

外部設備可以訪問Weave網絡上的應用程序容器所提供的服務,同時已有的內部系統也可以暴露到應用程序容器上。Weave可以穿透防火牆並運行在部分鏈接的網絡上,另外,Weave的通訊支持加密,因此用戶能夠從一個不受信任的網絡鏈接到主機。github

Weave跨主機實現docker互通,固定ip及dns使用介紹

Weave會在主機上建立一個網橋,每個容器經過veth pair鏈接到該網橋上,同時網橋上有個Weave router的容器與之鏈接,該router會經過鏈接在網橋上的接口來抓取網絡包(該接口工做在Promiscuous模式)。docker

在每個部署Docker的主機(多是物理機也多是虛擬機)上都部署有一個W(即Weave router),它自己也能夠以一個容器的形式部署。Weave run的時候就能夠給每一個veth的容器端分配一個ip和相應的掩碼。veth的網橋這端就是Weave router容器,並在Weave launch的時候分配好ip和掩碼。網絡

Weave網絡是由這些weave routers組成的對等端點(peer)構成,每一個對等的一端都有本身的名字,其中包括一個可讀性好的名字用於表示狀態和日誌的輸出,一個惟一標識符用於運行中相互區別,即便重啓Docker主機名字也保持不變,這些名字默認是mac地址。負載均衡

每一個部署了Weave router的主機都須要將TCP和UDP的6783端口的防火牆設置打開,保證Weave router之間控制面流量和數據面流量的經過。控制面由weave routers之間創建的TCP鏈接構成,經過它進行握手和拓撲關係信息的交換通訊。 這個通訊能夠被配置爲加密通訊。而數據面由Weave routers之間創建的UDP鏈接構成,這些鏈接大部分都會加密。這些鏈接都是全雙工的,而且能夠穿越防火牆。ide

Weave優劣勢測試

1.Weave優點加密

支持主機間通訊加密。unix

支持container動態加入或者剝離網絡。日誌

支持跨主機多子網通訊。

2.Weave劣勢

只能經過weave launch或者weave connect加入weave網絡。

二.建立weave網絡
1.環境
安裝docker主機兩臺
主機1:190.168.3.250
主機2:190.168.3.251

2.安裝:
wget -O /usr/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
chmod +x /usr/bin/weave

主機1:
weave launch
也能夠weave launch --ipalloc-range 192.168.0.0/24指定網段
下來就是本身安裝鏡像

主機2:
weave launch 190.168.3.250

3.宿主機使用
weave expose 192.168.0.250/24 能夠給宿主機添加同容器同一網段的地址
weave hide 192.168.0.250/24 能夠刪去給宿主機添加的地址

4.容器使用
第一種添加 --net=weave
docker run -it --net=weave --name=test1 busybox sh
這樣建立會自動生成weave地址

第二種將環境變量寫入配置文件
[root@server1 ~]# weave env
export DOCKER_HOST=unix:///var/run/weave/weave.sock ORIG_DOCKER_HOST=
[root@server1 ~]# export DOCKER_HOST=unix:///var/run/weave/weave.sock
[root@server1 ~]# echo $DOCKER_HOST

將這個環境變量寫進source /etc/profile,讓docker啓動自動鏈接建立weave地址

啓動容器時經過傳值的方式固定ip地址
docker run -it --net=weave --name=test1 -e WEAVE_CIDR=192.168.0.10/24 busybox sh

5.dns使用
weave建立起來自帶dns
例:host1:
[root@server1 ~]# docker run -d --name c1 -it -e WEAVE_CIDR=192.168.0.11 busybox sh

host2:
[root@server2 ~]# docker run -d --name c2 -it -e WEAVE_CIDR=192.168.0.12 busybox sh

在c1裏面 ping c2 是能夠ping通的

在我這邊的實際工做中,這個沒有ping通,先使用weave status 查看dns,並使用如下命令建立能夠dns通訊
docker run -d --hostname=test3.weave.local --name c3 -it -e WEAVE_CIDR=192.168.0.13 busybox sh
只有加了.weave.local的主機以前能夠經過主機名訪問,別的主機能夠經過ping test3 來判斷dns是否正常,但只能容器之間經過dns訪問

注:能夠經過在不一樣主機的docker中建立相同主機名的容器實現負載均衡

目前線上使用weave 測試環境使用pipework,還比較穩定

相關文章
相關標籤/搜索