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 等信息。
下面开始准备实验环境,实验需要3台虚拟机,一台虚拟机用作配置etcd,另外两台虚拟机host1和host2用作测试主机间通信。
etcd虚拟机为centos7.6,可以通过yum install -y etcd,在安装etcd之前需要先安装epel-release.noarch。
yum -y install epel-release.noarch
yum -y install etcd
安装etcd后修改etcd.conf配置文件
/etc/etcd/etcd.conf
![](https://img-blog.csdnimg.cn/direct/81339fbe73cc4d19a64411d282655f54.png)
systemctl daemon-reload
systemctl restart etcd.service
配置etcd的网络信息,IP地址池,子网信息,后端backend
验证并查看etcd的网络信息
到这里etcd环境配置完成,接下来配置host1和host2的flannl环境
在host1和host2虚拟机上安装flannel软件包
yum -y install epel-release.noarch
yum install -y flannel
在host1和host2上配置flanneld文件
/etc/sysconfig/flanneld
根据/run/flannel/subnet.env信息配置docker.service中bip和mtu
配置完成后重启docker服务
systemctl daemon-reload
systemctl restart docker.service
在host1和host2上查看网卡信息,发现增加了flannel网卡
查看flannel的vxlan信息
在host1和host2上分别创建容器并测试跨主机间通信