etcd+flannel實現docker跨主機容器之間通訊

網絡環境:

docker需要開啓防火牆

systemctl restart firewalld.service && systemctl enable firewalld.service

master 安裝:

安裝 etcd 及配置

[root@master ~]# yum install -y etcd
[root@master ~]# systemctl restart etcd

配置開機啓動: [root@master ~]# systemctl enable etcd

配置etcd

[root@master ~]# vim /etc/etcd/etcd.conf 

修改

ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"

ETCD_LISTEN_CLIENT_URLS="http://192.168.10.11:2379,http://127.0.0.1:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.11:2379"

etcd 設置網段(這個網段將會分配給 flannel0 網卡):

[root@master ~]# etcdctl mk /atomic.io/network/config '{"Network":"172.20.0.0/16","SubnetMin":"172.20.1.0","SubnetMax":"172.20.254.0"}'

[root@master ~]# etcdctl get /atomic.io/network/config

[root@master ~]# etcdctl get /

/atomic.io/network/config #此文件對應/etc/sysconfig/flannel中的FLANNEL_ETCD_PREFIX

[root@master ~]# systemctl restart etcd       #創建網段後,需要重啓etcd,否則後面不能啓動flannel

安裝flannel

[root@master ~]# yum install -y flannel

配置flannel:

[root@master ~]# vim /etc/sysconfig/flanneld 

啓動flannel:

[root@master ~]# systemctl restart flanneld

 #修改配置文件後,需要重新加載
systemctl daemon-reload

配置開機啓動

[root@master ~]# systemctl enable flanneld 

#日誌查看
flanneld -alsologtostderr

我們查看網橋,看到了flannel0,而且ip的地址端是我們自己指定的172.20.0.0/16網段中的地址段172.20.75.0/24

而且還生成了配置文件/run/flannel/subnet.env/run/flannel/docker存儲了這個服務器端信息。
啓動flanneld後,會有一張網卡產生:而且此網卡的地址就是使用etcdctl mk定義的網段地址。

–bip=172.20.75.1/24這個參數,它限制了所在節點容器獲得的IP範圍。

這個IP範圍是由flannel自動分配的,由flannel通過保存在etcd服務中的記錄確保它們不會重複

錯誤的解決辦法:

Error:  client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:2379:connect: connection refused

參考:https://www.cnblogs.com/lkun/p/9486156.html

安裝docker

此處不再贅述,可以直接參考此帖:https://blog.csdn.net/qq_39626154/article/details/82753412

啓動docker

[root@master ~]# systemctl start docker

[root@master ~]# systemctl enable docker

查看docker0和flannel0的網段信息,發現目前還不在一個網段:
[root@master ~]# ifconfig docker0 && ifconfig flannel0

我們直接運行ps-ef|grep docker查看我們的網卡信息同docker壓根沒有關聯上。

解決辦法:在/usr/lib/systemd/system/docker.service中的[service]模塊添加修改如下內容:

#set flannel info

EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS

然後重啓docker再次查看,發現docker0和flannel0在同一個網段了:

[root@master ~]# systemctl daemon-reload

[root@master ~]# systemctl restart docker

[root@master ~]# ifconfig docker0 && ifconfig flannel0

查看docker進程,已經綁定上了bip的ip

slave安裝:

安裝flannel

[root@slave01 ~]# yum -y install flannel

配置flannel:

[root@slave01 ~]# vim /etc/sysconfig/flanneld 

啓動flannel:

[root@slave01 ~]# systemctl enable flanneld 

[root@slave01 ~]# systemctl restart flanneld

如果啓動flanneld停頓的時間比較久,並且有日誌報錯,那麼可能是etcd服務器的防火牆問題

查看生成的配置文件:獲取到了etcd配置網段的IP信息

同樣給slave01主機上安裝docker,查看docker0與flannel0網卡信息

查看flannel進程信息:

啓動報如下錯誤,說明和etcd服務器的連接有問題:

解決辦法:master主機etcd開啓防火牆端口2379:firewall-cmd --add-port=2379/tcp

[root@master ~]# firewall-cmd --add-port=2379/tcp
success

同樣修改docker的啓動服務文件:/usr/lib/systemd/system/docker.service

啓動docker:

查看docker進程和ip情況:

測試:在2臺主機上分別運行centos容器

[root@master ~]# docker run -it --name host1.test centos /bin/bash

[root@slave01 ~]# docker run -it --name host2.test centos /bin/bash

 ifconfig查看IP信息,可以看到兩個容器都獲取到相應的flannel0網卡下發的IP地址。

如果沒有該命令需要執行安裝命令:yum install net-tools -y

測試聯通性:正常

先要放開兩臺主機訪問的防火牆:

[root@master ~]# iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT

[root@slave01 ~]# iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章