上一節咱們部署了 etcd,本節安裝和配置 flannel。git
flannel 沒有現成的執行文件可用,必須本身 build,最可靠的方法是在 Docker 容器中 build。不過用於作 build 的 docker 鏡像託管在 gcr.io,國內可能沒法直接訪問,爲方便你們,我把它 mirror 到了 docker hub,構建步驟以下:github
下載並重命名 image。docker
docker pull cloudman6/kube-cross:v1.6.2-2json
docker tag cloudman6/kube-cross:v1.6.2-2 gcr.io/google_containers/kube-cross:v1.6.2-2網絡
下載 flannel 源碼。ui
git clone https://github.com/coreos/flannel.gitgoogle
開始構建。url
cd flannelspa
make dist/flanneld-amd64code
將 flanneld 執行文件拷貝到 host1 和 host2。
scp dist/flanneld-amd64 192.168.56.104:/usr/local/bin/flanneld
scp dist/flanneld-amd64 192.168.56.105:/usr/local/bin/flanneld
先將配置信息寫到文件 flannel-config.json 中,內容爲:
{
"Network": "10.2.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan"
}
}
Network
定義該網絡的 IP 池爲 10.2.0.0/16
。
SubnetLen
指定每一個主機分配到的 subnet 大小爲 24 位,即10.2.X.0/24
。
Backend
爲 vxlan
,即主機間經過 vxlan 通訊,後面咱們還會討論host-gw
。
將配置存入 etcd:
etcdctl --endpoints=192.168.56.101:2379 set /docker-test/network/config < flannel-config.json
/docker-test/network/config
是此 etcd 數據項的 key,其 value 爲 flannel-config.json 的內容。key 能夠任意指定,這個 key 後面會做爲 flanneld 的一個啓動參數。執行 etcdctl get
確保設置成功。
啓動 flannel
在 host1 和 host2 上執行以下命令:
flanneld -etcd-endpoints=http://192.168.56.101:2379 -iface=enp0s8 -etcd-prefix=/docker-test/network
-etcd-endpoints
指定 etcd url。
-iface
指定主機間數據傳輸使用的 interface。
-etcd-prefix
指定 etcd 存放 flannel 網絡配置信息的 key。
host1 上輸出以下:
① enp0s8 被選做與外部主機通訊的 interface。
② 識別 flannel 網絡池 10.2.0.0/16。
③ 分配的 subnet 爲 10.2.40.0/24。
flanneld 啓動後,host1 內部網絡會發生一些變化:
一個新的 interface flannel.1
被建立,並且配置上 subnet 的第一個 IP 10.2.40.0。
host1 添加了一條路由:目的地址爲 flannel 網絡 10.2.0.0/16 的數據包都由 flannel.1 轉發。
host2 輸出相似,主要區別是 host2 的 subnet 爲 10.2.17.0/24:
當前環境網絡拓撲如圖所示:
flannel 已經就緒,下一節演示如何在 Docker 中使用 flannel 網絡。