您好,登錄后才能下訂單哦!
本文在介紹關(guān)于etcd和flannel實現(xiàn)docker多網(wǎng)段通信的基礎(chǔ)上,重點探討了其具體步驟,步驟簡單易上手操作,文章內(nèi)容步步緊湊,希望大家根據(jù)這篇文章可以有所收獲。
一、簡介
flannel是為實現(xiàn)多網(wǎng)段通信的第三方的解決方案, 是 CoreOS 開發(fā)的容器網(wǎng)絡(luò)解決方案。flannel 為每個 host 分配一個 subnet,容器從此 subnet 中分配 IP,這些 IP 可以在 host 間路由,容器間無需 NAT 和 port mapping 就可以跨主機(jī)通信。每個 subnet 都是從一個更大的 IP 池中劃分的,flannel 會在每個主機(jī)上運行一個叫 flanneld 的 agent,其職責(zé)就是從池子中分配 subnet。為了在各個主機(jī)間共享信息,flannel 用 etcd(與 consul 類似的 key-value 分布式數(shù)據(jù)庫)存放網(wǎng)絡(luò)配置、已分配的 subnet、host 的 IP 等信息。數(shù)據(jù)包如何在主機(jī)間轉(zhuǎn)發(fā)是由 backend 實現(xiàn)的。flannel 提供了多種 backend,最常用的有 vxlan 和 host-gw。其他 backend 請參考 https://github.com/coreos/flannel。 flannel支持多種的backend:目前已經(jīng)支持UDP、VxLAN、AWS VPC和GCE路由等數(shù)據(jù)轉(zhuǎn)發(fā)方式,默認(rèn)使用的是udp的方式。
二、準(zhǔn)備工作
三臺VM虛擬機(jī)
一臺用于etcd的部署
另兩臺用于flannel的部署
系統(tǒng)環(huán)境:centOS7.2
docker版本:docker-ce 19.3.5
etcd版本:etcd-3.3.11-2.el7.centos.x86_64
flannel版本:flannel-0.7.1-4.el7.x86_64
三、安裝與配置及故障處理
1、部署etcd服務(wù)
1.1 安裝
[root@localhost ~]# yum install -y etcd #安裝etcd
1.2 修改etcd.conf文件
[root@localhost ~]# cd /etc/etcd/
[root@localhost etcd]# cp -p etcd.conf etcd.conf.bak #備份配置文件,回退使用。
[root@localhost etcd]# vim etcd.conf
將以下幾項:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
修改為:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://172.16.41.251:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.41.251:2379"
[root@localhost ~]# grep ^[A-Z] /etc/etcd/etcd.conf #查看文件內(nèi)容
--name :方便理解的節(jié)點名稱,默認(rèn)為 default ,在集群中應(yīng)該保持唯一,可以使用 hostname。
--data-dir :服務(wù)運行數(shù)據(jù)保存的路徑,默認(rèn)為 ${name}.etcd。
--listen-client-urls :對外提供服務(wù)的地址:比如 http://ip:2379,http://127.0.0.1:2379 ,客戶端會連接到這里和 etcd 交互。
--advertise-client-urls :對外公告的該節(jié)點客戶端監(jiān)聽地址,這個值會告訴集群中其他節(jié)點。
1.3 新建etcd.sh文件并添加相應(yīng)內(nèi)容
在根目錄創(chuàng)建etcd.sh文件
[root@localhost ~# vim etcd.sh
在etcd.sh文件中添加以下內(nèi)容:
{"Network":"10.2.0.0/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}
Network:定義host主機(jī)的IP地址池為10.2.0.0/16,注:由于etcd并不是動態(tài)保存host上flannel網(wǎng)絡(luò)的,比如:當(dāng)有節(jié)點被刪除后,etcd中的關(guān)于這個節(jié)點的subnet網(wǎng)絡(luò)并不會被刪除,所以使用10.X.X.X的網(wǎng)絡(luò),保證有足夠的網(wǎng)絡(luò)可用
SubnetLen:指定每個主機(jī)分配的subnet大小為24位,即10.2.x.0/24
Backend為vxlan,即主機(jī)之間通過vxlan通信,backend分為vxlan和host-gw這兩種方式
1.4 新建network/config文件及添加內(nèi)容
[root@localhost ~]# cd /usr/local/bin/
[root@localhost bin]# mkdir network
[root@localhost ~]# systemctl start etcd #啟動etcd服務(wù),不然運行下面命令會報錯
[root@localhost network]# etcdctl --endpoints=http://172.16.41.251:2379 set /usr/local/bin/network/config </root/etcd.sh #將etcd.sh的文件內(nèi)容輸入config中
[root@localhost network]# etcdctl --endpoints=http://172.16.41.251:2379 get /usr/local/bin/network/config
--endpoints=http://192.168.7.222:2379 指定etcd的url
/usr/local/bin/network/config 保存key的地方,flanneld會讀取這個配置,保證自己能獲取到subnet,這個key可以任意指定,當(dāng)host主機(jī)分配到subnet后,key會修改docker的啟動參數(shù)
[root@localhost network]# systemctl restart etcd #重啟etcd服務(wù)
etcd服務(wù)配置完成?。。。?!
2、flannel安裝與配置(另一臺執(zhí)行的操作基本一致)
[root@localhost ~]# yum install -y flannel #安裝flannel
[root@localhost ~]# cd /etc/sysconfig/
[root@localhost sysconfig]# cp -p flanneld flanneld.bak #備份flanneld文件
[root@localhost sysconfig]# vim flanneld
修改以下內(nèi)容:
FLANNEL_ETCD_ENDPOINTS="http://172.16.41.251:2379" #連接etcd的地址
FLANNEL_ETCD_PREFIX="/usr/local/bin/network" #etcd的key的地址
[root@localhost sysconfig]# systemctl start flanneld
[root@localhost etc]# ifconfig flannel.1 #查看flannel.1網(wǎng)絡(luò)
在兩臺flannel主機(jī)上都安裝啟動完flannel,就可以看見每個主機(jī)上起了一個flannel.1的網(wǎng)絡(luò)
兩臺flannel主機(jī)都會出現(xiàn)一個flannel.1的路由,路由都是10.2.0.0的
[root@localhost etc]# route
[root@localhost /]# cd /etc/systemd/system/
[root@localhost system]# mkdir docker.service.d
[root@localhost system]# cd docker.service.d/
[root@localhost docker.service.d]# vim 10-machine.conf
添加以下內(nèi)容:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pe --tlskey /etc/docker/server-key.pem --label provider=generic --bip=10.2.31.1/24 --mtu=1450
Environment=
注:--bip為flannel.1的分配段地址,
這個參數(shù)要與/run/flannel/subnet.env中保持一致
[root@localhost sysconfig]# cat /run/flannel/subnet.env
修改/usr/lib/systemd/system/docker.service文件,添加以下內(nèi)容:
在ExecStart=/usr/bin/dockerd后添加$DOCKER_NETWORK_OPTIONS
和
EnvironmentFile=/run/flannel/docker
如果不添加這兩條會出現(xiàn),docker啟動后查看下啟動的docker0不是被flannel托管了
注:另一臺同樣的操作。
重啟docker
[root@localhost sysconfig]# systemctl daemon-reload
[root@localhost sysconfig]# systemctl restart docker
[root@localhost etc]# ifconfig
[root@localhost docker.service.d]# docker run -dit --name b1 busybox
[root@localhost docker.service.d]# docker exec b1 ifconfig
[root@localhost sysconfig]# docker run -dit --name b2 busybox
[root@localhost sysconfig]# docker exec b2 ifconfig
ping測試
[root@localhost docker.service.d]# docker exec b1 ping -c 2 10.2.67.2
[root@localhost sysconfig]# docker exec b2 ping -c 2 10.2.31.2
第三方flannel實現(xiàn)docker多網(wǎng)段通信測試成功
到此為止,etcd和flannel已經(jīng)實現(xiàn)docker多網(wǎng)段通信,如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。