使用weave實作docker跨主控端連接配接
docker之于微服務,就好像人體的經脈之于血液。一個人充滿血液但沒有經脈,沖其量就是打腫臉沖胖子。經脈要互通,docker之間要互聯。目前最主流的技術有Weave和Kubernetes兩種,這裡就來介紹weave的使用:
- 安裝docker
- 安裝和使用weave
- 校驗docker是否跨主機連接配接
安裝docker
Linux環境
Ubuntu 16.04(LTS)
簡單方法
$ sudo apt-get update
$ sudo apt-get install docker
是不是輕松,搞定!(太low了。。。有木有。。。)
但是這種方法有一個缺點:安裝的不一定是最新的docker,安裝版本是1.10.2,不過,對于docker使用沒任何什麼問題,如果要後續更新友善,可以使用下面的方法。
另一種方法
1.切換到root權限或者用sudo
su -i
2.更新source清單并保證https和ca證書成功安裝
# apt-get update
# apt-get install apt-transport-https ca-certificates
3.增加新的GPG 密鑰
# sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
4.新增或編輯source清單裡的docker.list檔案
# sudo sh -c “echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list”
5.按照系統版本增加entry(Ubuntu Xenial 16.04 (LTS))
# sudo sh -c “echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list”
6.重新執行更新操作,并删除老的repo
# apt-get purge lxc-docker //沒有安裝的話,跳過,沒有問題的
7.檢視是否有正确的可用版本
# apt-cache policy docker-engine
8.如果上步沒有可用版本,可執行
# apt-get install docker.io
9.從14.04版本以上開始docker推薦安裝linux-image-extra
# apt-get install linux-image-extra-$(uname -r)
10.安裝docker
# apt-get update
# apt-get install docker-engine
# service docker start
# docker run hello-world
到此結束,the end!
[email protected]:~# docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.6.2
Git commit: 092cba3
Built: Thu Nov 2 20:40:23 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.6.2
Git commit: 092cba3
Built: Thu Nov 2 20:40:23 2017
OS/Arch: linux/amd64
Experimental: false
安裝和使用Weave
網上安裝weave的方法有很多,這裡介紹有效的一種方法,樓主親身測試可行:
直接從github下載下傳二進制檔案安裝。
# sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
# sudo chmod a+x /usr/local/bin/weave
啟動weave路由器,這個路由器其實也是以容器的形式運作的。
# weave launch
此時會發現多生成有兩個網橋,一個是Docker預設生成的,另一個是Weave生成的。
[email protected]:~# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242ea343c68 no
weave 8000.5a711493d6dd no vethwe-bridge
[email protected]:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1130690bd6e7 weaveworks/weave:latest “/home/weave/weave…” 4 minutes ago Up 4 minutes weave
接下來就可以運作應用容器,使用weave提供的網絡功能了。
校驗docker是否跨主機連接配接
準備
1. host1: 10.10.2.77
2. host2: 10.10.2.78
3. host1上的應用容器1: 192.168.0.2/24 host1上的應用容器2: 192.168.1.2/24
4. host2上的應用容器1: 192.168.0.3/24
兩台機上均安裝Docker及Weave,并均啟動好Weave路由容器。
在兩台機上均啟動一個應用容器。可以直接使用weave run指令,也可以先使用docker run啟動好容器,然後使用weave attach指令給容器綁定IP位址。
# weave run 192.168.0.2/24 -itd ubuntu bash
(别掙紮了,weave run被幹掉了,不能用了哦。。。)
或者
(來,用這個)
# docker run -itd ubuntu bash
# weave attach 192.168.0.2/24 $ID
此時發現兩個容器之間是不通的,ping不通就對了
ping的通還有weave幹嘛!!!
需要使用weave connect指令在兩台weave的路由器之間建立連接配接。
# weave connect 10.10.2.78
會發現,此時位于兩台不同主機上的容器之間可以互相ping通了。magic哈哈!!!
但是處于不同子網的兩個容器是不能互聯的,這樣我們就可以使用不同子網進行容器間的網絡隔離了。
重點補充
我們會發現,如果不使用Docker的原生網絡,在容器内部是不能通路主控端以及外部網絡的。此時我們可以使用weave expose 192.168.0.1/24來給weave網橋添加IP,以實作容器與主控端網絡連通。但是,此時在容器内部依然不能通路外部網絡。
我們可以同時使用Docker的原生網絡和weave網絡來實作容器互聯及容器通路外網和端口映射。使用外部網絡及端口映射的時候就使用docker0網橋,需要容器互聯的時候就使用weave網橋。每個容器配置設定兩個網卡。
安全性:可以通過weave launch -password Lhola 設定一個密碼用于weave peers之間加密通信
檢視weave路由狀态:weave ps
問題須知
容器重新開機問題
如果使用weave,則就不能再使用docker自帶的auto-restart feature(如docker run –restart=always redis),因為weave是在docker之外為容器配置的網絡,容器重新開機的時候docker本身不會做這些事情。因而,還需額外的工具來管理容器的狀态(比如systemd, upstart等),這些工具要調用weave指令(weave run/start/attach)來啟動容器。
- 使用weave實作docker跨主控端連接配接
- 安裝docker
- 安裝和使用Weave
- 校驗docker是否跨主機連接配接
- 重點補充
- 問題須知
多少人忙得連寫部落格的時間都沒有喲!