docker+flannel+etcd

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

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

  1. 在etcd中配置flannel的ip地址短,一般 172.16.0.0/16形式,ip的16-24位 标志集群主机号
  2. 配置flannel etcd的client addr,启动flannel,flannel会从etcd取出之前配置的ip段172.16.21.0/24 并向etcd注册自己的ip段。如下图所示:
    这里写图片描述

    这里写图片描述
    注册信息
    这里写图片描述

  3. 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值