Docker flannel网络搭建(跨主机通信)
前置:服务器准备
1)开启内核ipv4转发功能
编辑/etc/sysctl.conf,添加一行
net.ipv4.ip_forward=1
重启服务器后失效,需要重新执行开启转发
sysctl -p
2)清除iptables底层默认规则,并开启允许转发功能
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
关闭防火墙,如果开启防火墙,则最好打开2379和4001端口
# systemctl disable firewalld.service
# systemctl stop firewalld.service
第一步:安装etcd(此步骤为单机)
安装etcd
# yum install etcd -y
# cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak
修改etcd配置文件
修改ETCD_LISTEN_CLIENT_URLS和ETCD_ADVERTISE_CLIENT_URLS
vi /etc/etcd/etcd.conf
[Member]
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
#[Clustering]
ETCD_ADVERTISE_CLIENT_URLS="http://10.3.9.206:2379,http://10.3.9.206:4001"
启动etcd
# systemctl start etcd
# systemctl enable etcd
# systemctl status etcd
设置etcd的网络
# etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16", "SubnetMin": "172.17.1.0", "SubnetMax": "172.17.254.0"}'
查看etcd网络配置
# etcdctl get /atomic.io/network/config
{"Network":"172.17.0.0/16", "SubnetMin": "172.17.1.0", "SubnetMax": "172.17.254.0"}
备注:
1)需要在etcd上进行如下配置(’/http://atomic.io/network/config’这个key与上面的/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错)
2)该ip网段可以任意设定,随便设定一个网段都可以。容器的ip就是根据这个网段进行自动分配的,ip分配后,容器一般是可以对外联网的(网桥模式,只要宿主机能上网就可以)
查看etcd状态
# etcdctl -C http://10.3.9.206:4001 cluster-health
# etcdctl -C http://10.3.9.206:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://10.3.9.206:2379
cluster is healthy
# 查看下etcd集群成员列表
etcdctl member list
第二步:安装flannel(所有主机)
安装步骤
# yum install -y flannel
# cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak
# vi /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.3.9.206:2379"
# systemctl enable flanneld.service
# systemctl start flanneld.service
# systemctl restart docker
第三步:设置DOCKER默认网络,(所有主机,每台的子网不一样,分别设置)
cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.17.0.0/16
FLANNEL_SUBNET=172.17.82.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
第四步:配置docker
配置docker的bip网段,需要跟flannel设置的网段一致
主机10.3.9.206
vi /etc/systemd/system/docker.service 修改dockerd 后台进程的bip和mut,放到启动命令后面
ExecStart=/usr/bin/dockerd --bip=172.17.23.1/24 --mtu=1472
主机10.3.9.207
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --bip=172.17.19.1/24 --mtu=1472
重启docker服务
systemctl daemon-reload
systemctl restart docker
第五步:验证
启动centos79容器
# docker run -it --name centos79 centos:centos7.9.2009 /bin/bash
进入容器
1)安装net-tools
# yum install net-tools -y
2)查看ip地址
# ifconfig
- 在两台主机上,ping不同的容器的ip地址
验证结论:可以看出,在不同的服务器上,不同的主机上,两个容器间实现跨主机访问通信
注意事项:
- 向etcd集群写入子网的时候务必要建立的子文件夹和flannel的配置文件一致
- flannel的配置,etcd集群地址要写正确,子文件夹信息要和etcd写入一致
- 系统iptables默认规则一定要清除,并开启允许转发功能
- 确定下docker的网络是否要被flannel接管,查看下docker的进程确认
- 操作系统建议centos7