c4rt1y

Docker 之网络Flannel介绍

0x01 Flannel介绍

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

0x02 环境介绍

#一共2台服务器
master.com 10.10.10.20
node01.com 10.10.10.30

#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#两种方法设置host(每台对应每台的host地址)
echo "master.com" > /etc/hostname
hostname master.com

#下载第三方依赖环境包
yum -y install epel-release

#设置host
cat >>/etc/hosts <<EOF 
10.10.10.20 master.com 
10.10.10.30 node01.com
EOF	

#关闭selinux,需要重启
sed -i 's:SELINUX=enforcing:SELINUX=disabled:g' /etc/selinux/config

#临时关闭seLinux
setenforce 0

#docker安装
yum -y install docker

#重启
reboot

0x03 环境安装

##master
#安装flannel etcd
yum install flannel etcd -y

#重启etcd
systemctl start etcd

#定义网络
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

#定义一个变量,方便自动化脚本处理
masterip="master"

#备份需要修改的文件
cp  /etc/sysconfig/flanneld  /etc/sysconfig/flanneld.bak

#设置网络连接
cat >  /etc/sysconfig/flanneld << EOF
FLANNEL_ETCD_ENDPOINTS="http://$masterip:2379"
FLANNEL_ETCD_KEY="/atomic.io/network"
EOF

#启动flannel
systemctl start flanneld


#node01
##master
#安装flannel
yum install flannel -y

#定义一个变量,方便自动化脚本处理
masterip="master"

#备份需要修改的文件
cp  /etc/sysconfig/flanneld  /etc/sysconfig/flanneld.bak

#设置网络连接
cat >  /etc/sysconfig/flanneld << EOF
FLANNEL_ETCD_ENDPOINTS="http://$masterip:2379"
FLANNEL_ETCD_KEY="/atomic.io/network"
EOF

#启动flannel
systemctl start flanneld

0x04 验证

#在master和node上分别下拉一个镜像
docker pull centos:7

#进入容器,进行访问,在master上的容器节点内可以ping通node节点ip,但是ping不通node节点的容器节点ip。同理node上的容器节点ping通master节点,但是无法ping通master上的容器节点ip。

原因与解决方案:
经测试发现,网络无法直连,发现由于flannel基于iptables方案,可能是没安装iptables,
yum -y install -y iptables
#重启
systemctl restart flanneld
发现失败,然后在master节点和node节点添加iptables规则
iptables -A FORWARD -s  172.16.0.0/16 -j ACCEPT
#测试通过,相互间可以访问

0x05 资料来源

https://www.cnblogs.com/kevingrace/p/6859114.html
http://www.cnblogs.com/ericnie/p/8028681.html
https://github.com/opsnull/follow-me-install-kubernetes-cluster/issues/141
https://github.com/opsnull/follow-me-install-kubernetes-cluster/issues/45
http://dockone.io/question/563
https://tonybai.com/2017/01/17/understanding-flannel-network-for-kubernetes/
GoTop