资讯专栏INFORMATION COLUMN

Flannel解读

lemanli / 2053人阅读

摘要:在上面这一大段话中,我们可以了解到是一个基于服务发现的系统。服务发现可理解为在一个集群内记录各信息的数据库,其他可通过该数据库获取该集群内各的信息。

概念

由我上篇博文Docker网络解读可知,flannel主要用来解决容器的跨主机通信问题,同时也是kubernetes主要实现网络互通的方式,那么flannel是如何实现容器间跨主机通信的呢,下面我们引入flannel github上的一张原理图来解读:

要完整解读此图,在此之前,我们首先要了解下flannel关联的一个重要组件"Etcd”的概念。

什么是Etcd?

我们引用下Etcd的基本概念:etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。

在上面这一大段话中,我们可以了解到etcd是一个基于服务发现的系统。服务发现可理解为在一个Cluster集群内记录各node信息的数据库,其他node可通过该数据库获取该Cluster集群内各node的信息。

Flannel实现原理

了解了以上概念之后,我们就能说明flannel的实现原理了,为了解释清楚,我们把实现原理分为以下几个步骤:

数据从Web App Frontend1这个容器发出经veth0网桥转发到宿主机的docker0网桥上

docker0网桥根据数据包的目的地址进行转发,若为非本机容器地址则转发给Flannel0网卡处理

Flannel0网卡交给flanneld这个进程处理,flanneld通过查询etcd,找到目的容器地址,并进行转发

数据包到达目的主机,经flanneld解包,最后由docker0转发到目的容器

这样整个数据包发送过程就解释完成了。

当然仅仅是这样还不够,flannel为每个在它管理下的容器赋予了一个独立的不会重复的ip地址,这样跨主机容器的ip地址就不会重复了,在这个前提下才能实现以上步骤的精确转发。

总结

flannel为集群内每个容器分配一个独立的ip地址,通过etcd的服务发现功能存储各node容器的ip信息,实现数据包的精确转发,解决了各容器间的跨主机通信问题。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27586.html

相关文章

  • k8s与网络--Flannel解读

    摘要:是一个专为定制的三层网络解决方案,主要用于解决容器的跨主机通信问题。收到的数据包被转发到进程。查询路由表,解封包,并将数据包发送到。然后在网络层的源和目的均是容器的,虚拟。默认也是使用容器网络方案,其官网也清晰的画出了的。 前言 我们知道docker官方并没有提供多主机的容器通信方案,单机网络的模式主要有host,container,brige,none。none这种模式,顾名思义就是...

    laznrbfe 评论0 收藏0
  • k8s与网络--Flannel解读

    摘要:是一个专为定制的三层网络解决方案,主要用于解决容器的跨主机通信问题。收到的数据包被转发到进程。查询路由表,解封包,并将数据包发送到。然后在网络层的源和目的均是容器的,虚拟。默认也是使用容器网络方案,其官网也清晰的画出了的。 前言 我们知道docker官方并没有提供多主机的容器通信方案,单机网络的模式主要有host,container,brige,none。none这种模式,顾名思义就是...

    Pink 评论0 收藏0
  • k8s与网络--Flannel源码分析

    摘要:今天主要针对版本进行源码分析。外部接口的定义如下创建子网管理器负责子网的创建更新添加删除监听等,主要和打交道定义续约。在到期之前,子网管理器调用该方法进行续约。 前言 之前在k8s与网络--Flannel解读一文中,我们主要讲了Flannel整体的工作原理。今天主要针对Flannel v0.10.0版本进行源码分析。首先需要理解三个比较重要的概念: 网络(Network):整个集群中...

    wpw 评论0 收藏0
  • k8s与网络--Flannel源码分析

    摘要:今天主要针对版本进行源码分析。外部接口的定义如下创建子网管理器负责子网的创建更新添加删除监听等,主要和打交道定义续约。在到期之前,子网管理器调用该方法进行续约。 前言 之前在k8s与网络--Flannel解读一文中,我们主要讲了Flannel整体的工作原理。今天主要针对Flannel v0.10.0版本进行源码分析。首先需要理解三个比较重要的概念: 网络(Network):整个集群中...

    hoohack 评论0 收藏0
  • k8s与网络--Flannel源码分析

    摘要:今天主要针对版本进行源码分析。外部接口的定义如下创建子网管理器负责子网的创建更新添加删除监听等,主要和打交道定义续约。在到期之前,子网管理器调用该方法进行续约。 前言 之前在k8s与网络--Flannel解读一文中,我们主要讲了Flannel整体的工作原理。今天主要针对Flannel v0.10.0版本进行源码分析。首先需要理解三个比较重要的概念: 网络(Network):整个集群中...

    Jeffrrey 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<