etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

本文在介紹關(guān)于etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信的基礎(chǔ)上,重點(diǎn)探討了其具體步驟,步驟簡(jiǎn)單易上手操作,文章內(nèi)容步步緊湊,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)公司秉承專業(yè)、誠(chéng)信、服務(wù)、進(jìn)取的價(jià)值觀,堅(jiān)持以客戶為中心、客戶至上的服務(wù)理念,以“關(guān)注企業(yè)需求,實(shí)現(xiàn)企業(yè)價(jià)值”為導(dǎo)向,努力為企業(yè)提供全面優(yōu)質(zhì)的互聯(lián)網(wǎng)應(yīng)用服務(wù)。服務(wù)包括域名與空間、虛擬空間、企業(yè)郵箱、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)營(yíng)銷解決方案和咨詢服務(wù),以幫助企業(yè)客戶應(yīng)用互聯(lián)網(wǎng)。

一、簡(jiǎn)介
flannel是為實(shí)現(xiàn)多網(wǎng)段通信的第三方的解決方案, 是 CoreOS 開發(fā)的容器網(wǎng)絡(luò)解決方案。flannel 為每個(gè) host 分配一個(gè) subnet,容器從此 subnet 中分配 IP,這些 IP 可以在 host 間路由,容器間無(wú)需 NAT 和 port mapping 就可以跨主機(jī)通信。每個(gè) subnet 都是從一個(gè)更大的 IP 池中劃分的,flannel 會(huì)在每個(gè)主機(jī)上運(yùn)行一個(gè)叫 flanneld 的 agent,其職責(zé)就是從池子中分配 subnet。為了在各個(gè)主機(jī)間共享信息,flannel 用 etcd(與 consul 類似的 key-value 分布式數(shù)據(jù)庫(kù))存放網(wǎng)絡(luò)配置、已分配的 subnet、host 的 IP 等信息。數(shù)據(jù)包如何在主機(jī)間轉(zhuǎn)發(fā)是由 backend 實(shí)現(xiàn)的。flannel 提供了多種 backend,最常用的有 vxlan 和 host-gw。其他 backend 請(qǐng)參考 https://github.com/coreos/flannel。 flannel支持多種的backend:目前已經(jīng)支持UDP、VxLAN、AWS VPC和GCE路由等數(shù)據(jù)轉(zhuǎn)發(fā)方式,默認(rèn)使用的是udp的方式。
二、準(zhǔn)備工作
三臺(tái)VM虛擬機(jī)
一臺(tái)用于etcd的部署
另兩臺(tái)用于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
將以下幾項(xiàng):
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)容
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
--name :方便理解的節(jié)點(diǎn)名稱,默認(rèn)為 default ,在集群中應(yīng)該保持唯一,可以使用 hostname。
--data-dir :服務(wù)運(yùn)行數(shù)據(jù)保存的路徑,默認(rèn)為 ${name}.etcd。
--listen-client-urls :對(duì)外提供服務(wù)的地址:比如 http://ip:2379,http://127.0.0.1:2379 ,客戶端會(huì)連接到這里和 etcd 交互。
--advertise-client-urls :對(duì)外公告的該節(jié)點(diǎn)客戶端監(jiān)聽地址,這個(gè)值會(huì)告訴集群中其他節(jié)點(diǎn)。

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并不是動(dòng)態(tài)保存host上flannel網(wǎng)絡(luò)的,比如:當(dāng)有節(jié)點(diǎn)被刪除后,etcd中的關(guān)于這個(gè)節(jié)點(diǎn)的subnet網(wǎng)絡(luò)并不會(huì)被刪除,所以使用10.X.X.X的網(wǎng)絡(luò),保證有足夠的網(wǎng)絡(luò)可用
SubnetLen:指定每個(gè)主機(jī)分配的subnet大小為24位,即10.2.x.0/24
Backend為vxlan,即主機(jī)之間通過(guò)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                  #啟動(dòng)etcd服務(wù),不然運(yùn)行下面命令會(huì)報(bào)錯(cuò)
[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    
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
--endpoints=http://192.168.7.222:2379 指定etcd的url
/usr/local/bin/network/config  保存key的地方,flanneld會(huì)讀取這個(gè)配置,保證自己能獲取到subnet,這個(gè)key可以任意指定,當(dāng)host主機(jī)分配到subnet后,key會(huì)修改docker的啟動(dòng)參數(shù)
[root@localhost network]# systemctl restart etcd                       #重啟etcd服務(wù)

etcd服務(wù)配置完成?。。。?!

2、flannel安裝與配置(另一臺(tái)執(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的地址
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
[root@localhost sysconfig]# systemctl start flanneld
[root@localhost etc]# ifconfig flannel.1                         #查看flannel.1網(wǎng)絡(luò)
在兩臺(tái)flannel主機(jī)上都安裝啟動(dòng)完flannel,就可以看見每個(gè)主機(jī)上起了一個(gè)flannel.1的網(wǎng)絡(luò)
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
兩臺(tái)flannel主機(jī)都會(huì)出現(xiàn)一個(gè)flannel.1的路由,路由都是10.2.0.0的
[root@localhost etc]# route
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

[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的分配段地址,
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
這個(gè)參數(shù)要與/run/flannel/subnet.env中保持一致
[root@localhost sysconfig]# cat /run/flannel/subnet.env
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

修改/usr/lib/systemd/system/docker.service文件,添加以下內(nèi)容:
在ExecStart=/usr/bin/dockerd后添加$DOCKER_NETWORK_OPTIONS

EnvironmentFile=/run/flannel/docker
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
如果不添加這兩條會(huì)出現(xiàn),docker啟動(dòng)后查看下啟動(dòng)的docker0不是被flannel托管了
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
注:另一臺(tái)同樣的操作。
重啟docker
[root@localhost sysconfig]# systemctl daemon-reload                  
[root@localhost sysconfig]# systemctl restart docker
[root@localhost etc]# ifconfig
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

[root@localhost docker.service.d]# docker run -dit --name b1 busybox
[root@localhost docker.service.d]# docker exec b1 ifconfig
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
[root@localhost sysconfig]# docker run -dit --name b2 busybox
[root@localhost sysconfig]# docker exec b2 ifconfig
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

ping測(cè)試

[root@localhost docker.service.d]# docker exec b1 ping -c 2 10.2.67.2
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

[root@localhost sysconfig]# docker exec b2 ping -c 2 10.2.31.2  
etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信

第三方flannel實(shí)現(xiàn)docker多網(wǎng)段通信測(cè)試成功

到此為止,etcd和flannel已經(jīng)實(shí)現(xiàn)docker多網(wǎng)段通信,如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

網(wǎng)站欄目:etcd和flannel實(shí)現(xiàn)docker多網(wǎng)段通信
文章出自:http://muchs.cn/article10/pdgddo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站收錄、定制開發(fā)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)