docker+flannel+etcd

    xiaoxiao2021-03-25  116

    kubernetes的部署 http://blog.csdn.net/landai2011/article/details/59587896

    docker如何借助flannel 实现集群通讯

    在etcd中配置flannel的ip地址短,一般 172.16.0.0/16形式,ip的16-24位 标志集群主机号

    配置flannel etcd的client addr,启动flannel,flannel会从etcd取出之前配置的ip段172.16.21.0/24 并向etcd注册自己的ip段。如下图所示:

    注册信息

    flannel 启动完,生成一个/run/flannel/subnet.env

    $ cat /run/flannel/subnet.env FLANNEL_NETWORK=172.16.0.0/16 FLANNEL_SUBNET=172.16.52.1/24 FLANNEL_MTU=1450 FLANNEL_IPMASQ=true $ source /run/flannel/subnet.env

    4.启动docker

    nohup docker daemon -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock \ --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} &

    在docker启动完之后,docker0 网桥的ip地址段被改为flannel配置的,创建的容器会默认分配一个flannel网段中的一个ip地址。ifconfig 查看到的flannel.0或.1 并不是网桥,而是一个interface。

    flannel 是如何实现集群通讯的

    $ route -n Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.16.15.253 0.0.0.0 UG 0 0 0 eth0 172.16.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel.1 172.16.52.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0

    简单讲原理类似于混合网络的通信,IPv4和IPv6同时存在主机间的通信。flannel 顾名思义就是隧道的意思,穿过这层隧道的数据包会在头部包装一层udp协议在外网通信,收到请求时再解包,然后定位到个别容器。

    它又是如何知道自己的目标内网地址的外网地址的呢? 它通过外配置的数据库服务查询,得到dest地址(目标地址)所在的外网ip,正如上面第三副图,所列出来的publicIP,就是外网ip。

    可以参考:http://dockone.io/article/618

    转载请注明原文地址: https://ju.6miu.com/read-3349.html

    最新回复(0)