Docker跨主机通信解决方案探讨

发表于:2018-5-24 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:IT解忧知识库

分享:
  Weave实现原理
  Weave会在主机上创建一个bridge,每一个容器通过veth pair连接到该bridge上,同时bridge上有个Weave router的容器与之连接,该router会通过连接在bridge上的接口来抓取网络包(该接口工作在Promiscuous模式),使用的工具为pcap。
  模块间的关系:
  数据通道:
  它在每个容器会起两个网卡,一个网卡连着自己起的可以跟其他宿主机联通的网桥;另一个网卡绑在原生Docker的一个网桥上,并在这个网桥上监听一个DNS的服务,这个DNS实际上嵌在Router里面,即它可以从Router里学习到一些服务的后端的一些配置。所以这时容器如果发起DNS查询,实际上会被路由导到宿主机上,DNS Server上,然后DNS server做一些响应。
  Weave的隔离是子网级的隔离,比如说有两个容器都处在10.0.1-24网段,那么它会在所有的容器里面加一条路由说该网段会走左边的网桥出去,但是所有非此网段的流量会走Docker0,这个时候Docker0和其他是不联通的,所以它就达到一个隔离的效果。
  Weave优点
  1)支持主机间通信加密;
  2)支持container动态加入或者剥离网络;
  3)支持跨主机多子网通信。
  缺点
  1)不支持服务发现,主机不能动态加入节点网络;
  2)只能通过weave launch或者weave connect加入weave网络。
  新推出的weave plugin可以对接libnetwork remote driver,可以与docker更好的整合。
  注意事项:需要确保内部的MTU比外部MTU小76。
  四、flannel
  Flannel之前的名字是Rudder,它是由CoreOS团队针对Kubernetes设计的一个重载网络工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。
  类似于weave、vxlan,提供了一个可配置的虚拟承载网络。Flannel以一个daemon形式运行,负责子网的分配,flannel使用etcd存储、交换网络配置、状态等信息。
  集群的拓扑图示例如下:
  部署模块之间的关系如下(控制平面):
  基本原理
  每台主机运行在一个子网内,多台主机共同归属于一个大的子网,主机间通过udp或者vxlan实现跨主机间的通信。
  每个机器上面的Flannel进程会监听ETCD,向ETCD申请每个节点可用的IP地址段,并且从ETCD拿到其他所有宿主机的网段信息,这样它就可以做一些路由。对于它的转发平面——转发平面主要表现数据流的流向——它在Docker进来的网桥基础之上,又创建了一个新的叫VXLAN的设备,VXLAN是一个隧道的方案,它可以把一个二层的包,前面加一个包头,然后再把整个包作为物理网络的一个包,去物理网络里面去路由,流转。
  特点
  1)非常适合在Kuberntes中使用;
  2)由于每个主机一个子网,灵活性不足。
  五、Kuryr
  Kuryr是一个Docker网络插件,其通过Neutron为Docker容器提供网络服务。Kuryr可以单独或以容器化的方式使用,这使得它们可以使用通用Neutron插件将容器接入到Neutron网络中。
  Kuryr主要实现通过将libnetwork映射到neutron api。逻辑图如下:
  原理图如下:
  Kuryr工作流程:
  1)Dockers引擎的操作转换成对Libnetwork的Remote驱动的操作;
  2)对Remote驱动的操作,通过Kuryr转换成对Neutron API的操作;
  3)对Neutron API的操作,通过Neutron插件的机制转换成对具体网络方案驱动的操作
  六、对比
  Calico方案因为没有隧道封装的网络开销,会带来相对较高的网络性能,但是不支持多租户,由于没有封装,所有的容器只能通过真实的IP来区分自己,这就要求所有租户的容器统一分配一个地址空间。
  Flannel和overlay方案均使用承载网络,承载网络的优势和劣势都是非常明显。
  优势有:对底层网络依赖较少,不管底层是物理网络还是虚拟网络,对层叠网络的配置管理影响较少;配置简单,逻辑清晰,易于理解和学习,非常适用于开发测试等对网络性能要求不高的场景。
  劣势主要包括:网络封装是一种传输开销,对网络性能会有影响,不适用于对网络性能要求高的生产场景;由于对底层网络结构缺乏了解,无法做到真正有效的流量工程控制,也会对网络性能产生影响;某些情况下也不能完全做到与下层网络无关,例如隧道封装会对网络的MTU限制产生影响。
  weave可以穿透防火墙,安全性较高,流量是被加密的,允许主机连接通过一个不被信任的网络,同样会有承载网络的带来的优缺点,不过可以通过Fast datapath来提高性能。
  Kuryr项目主要用来建立Docker与neutron的连接,本身不提供网络控制功能,而只是提供下面一层网络控制功能到容器网络的管理接口封装,是作为libnetwork的一个插件,基于neutron模块工作,比较适用于openstack与容器集成的环境。


22/2<12
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号