天天看點

使用weave實作docker跨主控端連接配接使用weave實作docker跨主控端連接配接

使用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是否跨主機連接配接
      • 重點補充
      • 問題須知

多少人忙得連寫部落格的時間都沒有喲!