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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值