溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

etcd和flannel實現docker多網段通信

發布時間:2020-06-05 09:44:16 來源:億速云 閱讀:485 作者:Leah 欄目:云計算

本文在介紹關于etcd和flannel實現docker多網段通信的基礎上,重點探討了其具體步驟,步驟簡單易上手操作,文章內容步步緊湊,希望大家根據這篇文章可以有所收獲。

一、簡介
flannel是為實現多網段通信的第三方的解決方案, 是 CoreOS 開發的容器網絡解決方案。flannel 為每個 host 分配一個 subnet,容器從此 subnet 中分配 IP,這些 IP 可以在 host 間路由,容器間無需 NAT 和 port mapping 就可以跨主機通信。每個 subnet 都是從一個更大的 IP 池中劃分的,flannel 會在每個主機上運行一個叫 flanneld 的 agent,其職責就是從池子中分配 subnet。為了在各個主機間共享信息,flannel 用 etcd(與 consul 類似的 key-value 分布式數據庫)存放網絡配置、已分配的 subnet、host 的 IP 等信息。數據包如何在主機間轉發是由 backend 實現的。flannel 提供了多種 backend,最常用的有 vxlan 和 host-gw。其他 backend 請參考 https://github.com/coreos/flannel。 flannel支持多種的backend:目前已經支持UDP、VxLAN、AWS VPC和GCE路由等數據轉發方式,默認使用的是udp的方式。
二、準備工作
三臺VM虛擬機
一臺用于etcd的部署
另兩臺用于flannel的部署
系統環境: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服務

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                     #查看文件內容
etcd和flannel實現docker多網段通信
--name :方便理解的節點名稱,默認為 default ,在集群中應該保持唯一,可以使用 hostname。
--data-dir :服務運行數據保存的路徑,默認為 ${name}.etcd。
--listen-client-urls :對外提供服務的地址:比如 http://ip:2379,http://127.0.0.1:2379 ,客戶端會連接到這里和 etcd 交互。
--advertise-client-urls :對外公告的該節點客戶端監聽地址,這個值會告訴集群中其他節點。

1.3 新建etcd.sh文件并添加相應內容
在根目錄創建etcd.sh文件
[root@localhost ~# vim etcd.sh
在etcd.sh文件中添加以下內容:

{"Network":"10.2.0.0/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}

Network:定義host主機的IP地址池為10.2.0.0/16,注:由于etcd并不是動態保存host上flannel網絡的,比如:當有節點被刪除后,etcd中的關于這個節點的subnet網絡并不會被刪除,所以使用10.X.X.X的網絡,保證有足夠的網絡可用
SubnetLen:指定每個主機分配的subnet大小為24位,即10.2.x.0/24
Backend為vxlan,即主機之間通過vxlan通信,backend分為vxlan和host-gw這兩種方式

1.4 新建network/config文件及添加內容
[root@localhost ~]# cd /usr/local/bin/
[root@localhost bin]# mkdir network
[root@localhost ~]# systemctl start etcd                  #啟動etcd服務,不然運行下面命令會報錯
[root@localhost network]# etcdctl --endpoints=http://172.16.41.251:2379 set /usr/local/bin/network/config </root/etcd.sh                 #將etcd.sh的文件內容輸入config中
[root@localhost network]# etcdctl --endpoints=http://172.16.41.251:2379 get /usr/local/bin/network/config    
etcd和flannel實現docker多網段通信
--endpoints=http://192.168.7.222:2379 指定etcd的url
/usr/local/bin/network/config  保存key的地方,flanneld會讀取這個配置,保證自己能獲取到subnet,這個key可以任意指定,當host主機分配到subnet后,key會修改docker的啟動參數
[root@localhost network]# systemctl restart etcd                       #重啟etcd服務

etcd服務配置完成?。。。?!

2、flannel安裝與配置(另一臺執行的操作基本一致)
[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
修改以下內容:
FLANNEL_ETCD_ENDPOINTS="http://172.16.41.251:2379"                     #連接etcd的地址
FLANNEL_ETCD_PREFIX="/usr/local/bin/network"                            #etcd的key的地址
etcd和flannel實現docker多網段通信
[root@localhost sysconfig]# systemctl start flanneld
[root@localhost etc]# ifconfig flannel.1                         #查看flannel.1網絡
在兩臺flannel主機上都安裝啟動完flannel,就可以看見每個主機上起了一個flannel.1的網絡
etcd和flannel實現docker多網段通信
etcd和flannel實現docker多網段通信
兩臺flannel主機都會出現一個flannel.1的路由,路由都是10.2.0.0的
[root@localhost etc]# route
etcd和flannel實現docker多網段通信
etcd和flannel實現docker多網段通信

[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  
添加以下內容:
[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實現docker多網段通信
這個參數要與/run/flannel/subnet.env中保持一致
[root@localhost sysconfig]# cat /run/flannel/subnet.env
etcd和flannel實現docker多網段通信

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

EnvironmentFile=/run/flannel/docker
etcd和flannel實現docker多網段通信
如果不添加這兩條會出現,docker啟動后查看下啟動的docker0不是被flannel托管了
etcd和flannel實現docker多網段通信
注:另一臺同樣的操作。
重啟docker
[root@localhost sysconfig]# systemctl daemon-reload                  
[root@localhost sysconfig]# systemctl restart docker
[root@localhost etc]# ifconfig
etcd和flannel實現docker多網段通信

[root@localhost docker.service.d]# docker run -dit --name b1 busybox
[root@localhost docker.service.d]# docker exec b1 ifconfig
etcd和flannel實現docker多網段通信
[root@localhost sysconfig]# docker run -dit --name b2 busybox
[root@localhost sysconfig]# docker exec b2 ifconfig
etcd和flannel實現docker多網段通信

ping測試

[root@localhost docker.service.d]# docker exec b1 ping -c 2 10.2.67.2
etcd和flannel實現docker多網段通信

[root@localhost sysconfig]# docker exec b2 ping -c 2 10.2.31.2  
etcd和flannel實現docker多網段通信

第三方flannel實現docker多網段通信測試成功

到此為止,etcd和flannel已經實現docker多網段通信,如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女