Flannel:
flannel是coreos开发专门用于docker多机互联的一个工具,让集群中的不同节点主机创建的容器都具有全集群唯一的虚拟ip地址,flannel使用go语言编写。
Flannel的设计目的:为集群中的所有节点重新规划IP地址的使用规则,使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
工作原理:
Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。
简单来说就是,将配置存在etcd上面,然后客户端使用flannel获取到一个可用的网段,然后将该网段修改docker0的网段,使得每个主机的docker IP段不同,但是又同在一个大网段中。
原理图:
安装配置:
1.安装etcd
curl -L https://github.com/coreos/etcd/releases/download/v2.2.2/etcd-v2.2.2-linux-amd64.tar.gz -o etcd-v2.2.2-linux-amd64.tar.gz tar xzvf etcd-v2.2.2-linux-amd64.tar.gz cd etcd-v2.2.2-linux-amd64 cp etcd* /bin/ etcd --listen-client-urls ‘http://0.0.0.0:2379‘ --advertise-client-urls="http://0.0.0.0:2379" &
2.配置网络
etcdctl -C 192.168.229.128:2379 set /data/etcdctl/config ‘{"network":"192.168.0.0/16"}‘ UDP转发,使用端口暂不确定 etcdctl -C 192.168.229.128:2379 set /data/etcdctl/config ‘{"network":"192.168.0.0/16", "Backend": {"Type": "vxlan"}}‘ VXLAN模式 说明: VXLAN模式性能比UDP高,但是都相对于正常网络有损失
3.安装flannel(运行docker机器上面)
flanneld通过etcd获取到一些配置。然后通过 mk-docker-opts.sh生成参数列表 ,需要自己加到/etc/default/docker中。重启docker,最主要的就是docker0的IP段
wget https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz
该包中有两下文件
mk-docker-opts.sh: 可不用,主要是用于生成docker启动的一些参数
flanneld: 二进制文件
4. 启动flanneld
flanneld -etcd-endpoints="http://192.168.229.128:2379" -etcd-prefix="/data/etcdctl" & cd flannel-0.5.5 && ./mk-docker-opts.sh -i source /run/flannel/subnet.env ifconfig docker0 ${FLANNEL_SUBNET} service docker restart docker run -it -d --name ubuntu01 ubuntu #正常run一个容器,内网关互通 [email protected]:/# ping 192.168.88.2 PING 192.168.88.2 (192.168.88.2) 56(84) bytes of data. 64 bytes from 192.168.88.2: icmp_seq=1 ttl=60 time=1.89 ms 64 bytes from 192.168.88.2: icmp_seq=2 ttl=60 time=1.32 ms 64 bytes from 192.168.88.2: icmp_seq=3 ttl=60 time=1.84 ms
原理参考链接:
http://www.open-open.com/news/view/1aa473a