docker跨主机集群之Flannel

本文详细介绍了Flannel,一种用于Docker集群跨主机通信的覆盖网络工具,强调其工作原理、安装配置步骤以及如何实现容器间的跨主机通信。Flannel使用etcd存储配置数据,通过UDP或VxLAN进行报文封装转发,推荐使用VxLAN以获得更好的性能。
摘要由CSDN通过智能技术生成

Docker跨主机容器间网络配置

方式有:Pipework、Flannel、Weave、Open vSwitch(虚拟交换机)、Calico, 其中
Pipework、Weave、Flannel是使用的最多。

本文介绍的是Flannel

Flannel是什么

1.Flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。
它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN等进行报文的封装和转发。

2.Flannel实质上是一种覆盖网络(overlay network),即表示运行在一个网上的网(应用层网络),并不依靠ip地址来传递消息,而是采用一种映射机制,把ip地址和identifiers做映射来资源定位。
也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,
目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式

  • 注1:Flannel支持多种Backend协议,但是不支持运行时修改Backend。官方推荐使用以下Backend:
    VXLAN,性能损耗大概在20~30%;
  • host-gw, 性能损耗大概10%,要求Host之间二层直连,因此只适用于小集群;
  • UDP, 建议只用于debug,因为性能烂到家了,如果网卡支持 enable udp
    offload,直接由网卡进行拆包解包,性能还是很棒的。
  • AliVPC。

3.Flannel使用etcd存储配置数据和子网分配信息。flannel 启动之后,后台进程首先检索配置和正在使用的子网列表
然后选择一个可用的子网,然后尝试去注册它。etcd也存储这个每个主机对应的ip。flannel使用etcd的watch机制
监视/coreos.com/network/subnets下面所有元素的变化信息,并且根据它来维护一个路由表。

  • 1:etcd可以理解成springcloud中的注册中心,用于服务注册和发现,这里是节点(即宿主机)注册和发现
  • 小结:Flannel是一种覆盖网络(overlay network),
  • 使用etcd存储配置数据和子网分配信息 通过UDP/VxLAN等进行报文的封装和转发,建议使用VxLAN性能更好

情景描述

某公司有一个简单的集群网络,在该集群内,有两台服务器甲和乙,每台服务器上都有两张网卡,分别连接公网和私网,
两台服务器可以通过私网互联,在两个服务器节点上分别安装了Docker,并且运行了A/B/C/D 4个容器。
每台服务器节点上都有一个docker0网桥,这是docker启动后初始化的虚拟设备,每个容器都与docker0网桥连接,
并且,容器的IP由docker自动分配

问题分析

1.images/01 跨主机容器互联-A.png
默认情况下此网络设置不支持跨主机的容器互联,原因有两方面:

  • 1.1.跨主机访问容器,没有有效路由
  • 1.2.多个节点上的容器网段冲突,docker启动后初始化docker0网桥时,会随机分配一个IP段,那么,如果不加以协调,
  • 1.3多个节点内的容器网络有可能会冲突,容器C和D的IP都是“192.168.1.3”

2.images/01 跨主机容器互联-B.png

在这里插入图片描述

Flannel实现的容器的跨主机通信通过如下过程实现

1.每个主机上安装并运行etcd和flannel;

2.在etcd中规划配置所有主机的docker0子网范围

3.每个主机上的flanneld根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,
并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入etcd库中,这样etcd库中就保存了所有主机
上的docker子网信息和本主机IP的对应关系;

4.当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP);

5.将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;

6.由于目的IP是宿主机IP,因此路由是可达的;

7.VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。

注1:flannel默认使用8285端口作为UDP封装报文的端口,VxLan使用8472端口
注2:Flannel工作流程可参考“images/02 Flannel模式.png”

在这里插入图片描述

Flannel的工作原理

1.数据从源容器中发出后,经由所在主机的docker0虚拟网卡转

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值