1. 程式人生 > 實用技巧 >容器網路(八)安裝配置 flannel【54】

容器網路(八)安裝配置 flannel【54】

(十二)安裝配置 flannel

上一節我們部署了 etcd,本節安裝和配置 flannel。

(1)build flannel

​ flannel 沒有現成的執行檔案可用,必須自己 build,最可靠的方法是在 Docker 容器中 build。不過用於做 build 的 docker 映象託管在 gcr.io,國內可能無法直接訪問,為方便大家,我把它 mirror 到了 docker hub,構建步驟如下:

①下載並重命名 image。

docker pull cloudman6/kube-cross:v1.6.2-2

docker tag cloudman6/kube-cross:v1.6.2-2 gcr.io/google_containers/kube-cross:v1.6.2-2

②下載 flannel 原始碼。

git clone https://github.com/coreos/flannel.git

③開始構建。

cd flannel
apt-getp install make -y
make dist/flanneld-amd64

④將 flanneld 執行檔案拷貝到 host1 和 host2。

scp dist/flanneld-amd64 10.0.0.21:/usr/local/bin/flanneld

scp dist/flanneld-amd64 10.0.0.22:/usr/local/bin/flanneld

將 flannel 網路的配置資訊儲存到 etcd。

先將配置資訊寫到檔案 flannel-config.json 中,內容為:

{

  "Network": "10.2.0.0/16",

  "SubnetLen": 24,

  "Backend": {

    "Type": "vxlan"

  }

}

  1. Network 定義該網路的 IP 池為 10.2.0.0/16
  2. SubnetLen 指定每個主機分配到的 subnet 大小為 24 位,即10.2.X.0/24
  3. Backendvxlan,即主機間通過 vxlan 通訊,後面我們還會討論host-gw

將配置存入 etcd:

etcdctl --endpoints=10.0.0.20:2379 set /docker-test/network/config < flannel-config.json

/docker-test/network/config是此 etcd 資料項的 key,其 value 為 flannel-config.json 的內容。key 可以任意指定,這個 key 後面會作為 flanneld 的一個啟動引數。執行etcdctl get確保設定成功。

(2)啟動 flannel

在 host1 和 host2 上執行如下命令:

flanneld -etcd-endpoints=http://10.0.0.20:2379 -iface=ens33 -etcd-prefix=/docker-test/network

root@host2:~# flanneld -etcd-endpoints=http://10.0.0.20:2379 -iface=ens33 -etcd-prefix=/docker-test/network
I1111 01:40:17.088705    4345 main.go:531] Using interface with name ens33 and address 10.0.0.22
I1111 01:40:17.088757    4345 main.go:548] Defaulting external address to interface address (10.0.0.22)
I1111 01:40:17.088814    4345 main.go:246] Created subnet manager: Etcd Local Manager with Previous Subnet: None
I1111 01:40:17.088835    4345 main.go:249] Installing signal handlers
I1111 01:40:17.093353    4345 main.go:390] Found network config - Backend type: vxlan
I1111 01:40:17.093427    4345 vxlan.go:123] VXLAN config: VNI=1 Port=0 GBP=false Learning=false DirectRouting=false
I1111 01:40:17.210075    4345 local_manager.go:234] Picking subnet in range 10.2.1.0 ... 10.2.255.0
I1111 01:40:17.221419    4345 local_manager.go:220] Allocated lease (10.2.2.0/24) to current node (10.0.0.22) 
I1111 01:40:17.222192    4345 main.go:313] Changing default FORWARD chain policy to ACCEPT
I1111 01:40:17.222320    4345 main.go:321] Wrote subnet file to /run/flannel/subnet.env
I1111 01:40:17.222347    4345 main.go:325] Running backend.
I1111 01:40:17.222589    4345 vxlan_network.go:60] watching for new subnet leases
I1111 01:40:17.226075    4345 iptables.go:150] Some iptables rules are missing; deleting and recreating rules
I1111 01:40:17.226119    4345 iptables.go:174] Deleting iptables rule: -s 10.2.0.0/16 -j ACCEPT
I1111 01:40:17.227113    4345 iptables.go:174] Deleting iptables rule: -d 10.2.0.0/16 -j ACCEPT
I1111 01:40:17.228307    4345 iptables.go:162] Adding iptables rule: -s 10.2.0.0/16 -j ACCEPT
I1111 01:40:17.232472    4345 iptables.go:162] Adding iptables rule: -d 10.2.0.0/16 -j ACCEPT
I1111 01:40:17.233198    4345 main.go:433] Waiting for 23h0m0.025590569s to renew lease


-etcd-endpoints 指定 etcd url。

-iface 指定主機間資料傳輸使用的 interface。

-etcd-prefix 指定 etcd 存放 flannel 網路配置資訊的 key。

① ens33被選作與外部主機通訊的 interface。

② 識別 flannel 網路池 10.2.0.0/16。

③ 分配的 subnet 為 10.2.40.0/24。

flanneld 啟動後,host1 內部網路會發生一些變化:

1.一個新的 interfaceflannel.1被建立,而且配置上 subnet 的第一個 IP 10.2.50.0。

ip addr show interface flannel.1
root@host1:~# ip addr show flannel.1 
13: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether da:44:3b:16:ff:2e brd ff:ff:ff:ff:ff:ff
    inet 10.2.50.0/32 brd 10.2.50.0 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::d844:3bff:fe16:ff2e/64 scope link 
       valid_lft forever preferred_lft forever
root@host1:~# 

2.host1 添加了一條路由:目的地址為 flannel 網路 10.2.0.0/16 的資料包都由 flannel.1 轉發。

root@host1:~# ip route 
default via 10.0.0.254 dev ens33 proto static 
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.21 
10.2.2.0/24 via 10.2.2.0 dev flannel.1 onlink 
root@host1:~# 

host2 輸出類似,主要區別是 host2 的 subnet 為 10.2.17.0/24: