开发者社区> 云栖号资讯小哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

简单聊聊Calico与Flannel

简介:
+关注继续查看

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


本人在接触k8s的2年多过程中对于flannel和calico都使用过,也查阅资料了解过此两种网络的底层,今天简单聊聊Calico与Flannel两种网络,如有错误之处欢迎指正。

容器虚拟化网络方案,总体分为2种截然不同的发展路线:

  • 基于隧道
  • 基于路由

基于隧道

1、隧道方案最具普适性,在任何网络环境下都可以正常工作,这与它的原理密不可分。

2、最常见的隧道方案是flannel vxlan模式,以及calico的ipip模式,其核心原理包含了2个部分。

分配网段

每台宿主机上都有网络插件的agent进程,它们连接到etcd集中式存储,从虚拟IP池中申请一个IP段占位己有,宿主机上每个容器则从IP段中分配得到1个虚拟IP。

封装/解封

1)、当不同宿主机上的容器互相访问时,数据包的源IP和目标IP都是容器IP。

2)、数据包经过宿主机的agent进程进行封装后,新数据包的源IP和目标IP则变成了两端宿主机的物理IP。

3)、数据包送到目标宿主机后,经过agent解封后得到原始数据包,并将数据包送入容器中处理,这就给两端容器营造了一种互通的感觉。

4)、因为物理IP属于3层网络,可以在互联网中经过中间路由设备互相送达,所以隧道方案对宿主机之间的网络环境没有特殊要求,因此隧道方案具备普适性。

优势/劣势

优势就是对物理网络环境没有特殊要求,只要宿主机IP层可以路由互通即可。

劣势就是性能差,这需要从以下方面看:

  • 封包和解包耗费CPU性能;
  • 额外的封装导致带宽浪费,大约有30%左右的带宽损耗;

flannel vxlan和calico ipip模式都是隧道方案,但是calico的封装协议IPIP的header更小,所以性能比flannel vxlan要好一点点。

基于路由

1、路由方案性能最好,原因是该方案不需要封包和解包,所以没有隧道方案的劣势,网络性能很好。

2、常见的路由方案包括了flannel的host-gw模式,以及calico的bgp模式。

下面以calico bpg模式为例,分析基于路由的方案原理,其包含了3个部分。

分配网段

每台宿主机也有agent,会从etcd中的虚拟IP池分配到一个IP子网段,宿主机上每个容器则从该IP段中分配得到1个虚拟IP。

本地路由

1)、假设我们在宿主机A上新建了一个容器,则该容器分配了一个虚拟IP,我们假设它是值是k。

2)、agent会在本机配置一条路由规则,即:如果数据包的目标地址等于k,那么把数据包送到容器的虚拟网卡上。

3)、另外一台宿主机B上的一个容器,其IP是m,向k容器发数据包,则数据包的目标地址是k,原地址是m。

4)、既然路由方案是不使用隧道封包为物理IP在网络中流通的,那么该数据包又该如何送达到虚拟IP k呢?

广播路由

1)、路由方案会采用如下的手段,搞定m到k的虚拟IP互通问题。

2)、即宿主机A会通过某种方式(比如BGP广播协议)把自己的虚拟IP网段广播给宿主机B。

3)、在宿主机B收到广播后,会给本机配置一条路由规则:如果数据包的目标地址属于宿主机A的虚拟IP网段,则把该数据包发给宿主机A的物理IP。

4)、这条路由规则相当于为宿主机A的虚拟IP网段配置了转发网关,而这个网关就是宿主机A的物理IP。这就要求,宿主机B和宿主机A在2层网络是互通的,也就是它们在一个交换机下面,可以基于MAC地址直接互通。

5)、一旦该数据包被送往宿主机A的物理IP,则宿主机A就可以应用刚才讲过的”本地路由“规则了,即:数据包的目标IP是k,直接送给对应容器的虚拟网卡。

整个过程中从m发往k的数据包采用的都是虚拟容器IP,没有经过任何封装和解封,而仅仅是通过宿主机B收到的广播路由+宿主机A的本地路由,就实现了在2层网络互通环境下的高效通讯。

优势/劣势

优势就是没有封包和解包过程,完全基于两端宿主机的路由表进行转发。

劣势包含2方面:

要求宿主机处于同一个2层网络下,也就是连在一台交换机上,这样才能基于MAC通讯,而不需要在IP上动封包/解包的手脚。

路由表膨胀导致性能降低,因为宿主机上每个容器需要在本机添加一条路由规则,而不同宿主机之间需要广播自己的网段路由规则。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-06-28
本文作者:小小程序员
本文来自:“dockone”,了解相关信息可以关注“dockone”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Kubernetes:Pod 端口映射
Kubernetes:Pod 端口映射
0 0
基于CNI保护Kubernetes集群中的主机
基于CNI保护Kubernetes集群中的主机
0 0
Kubernetes网络分析之Flannel
Flannel是cereos开源的CNI网络插件,flannel支持多种网络模式,在实际的生产环境中,最常用的还是vxlan模式,本文将介绍其工作原理,并通过源码解析实现过程。
3158 0
技术干货|深入理解flannel
1.概况 首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置,其中最主要的内容为设置集群的网络地址空间。例如,设定整个集群内所有容器的IP都取自网段“10.1.0.0/16”。
1033 0
k8s使用calico网络
calico是一个安全的 L3 网络和网络策略提供者。 calico使用bgp的原因:why bgp not ospf 有关BGP rr的介绍 安装方式 标准托管安装(ETCD存储) 需要提前安装etcd集群# 创建calico连接etcd的secret kubectl create secret.
4826 0
k8s与各网络插件集成(flannel calico canal kube-router romana cni-genie)
通用说明 如果多次换不同网络插件实验,每次实验前先把/etc/cni/net.d/目录下文件清空 rm -rf /etc/cni/net.d/* 复制代码 flannel # 创建flannel目录下载相关文件 mkdir flannel && cd flannel wget https://raw.
4896 0
理解Kubernetes网络之Flannel网络
第一次 采用kube-up.sh脚本方式安装 的Kubernetes cluster目前运行良好,master node上的组件状态也始终是“没毛病”: # kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"} 不过在第二次尝试 用kubeadm安装和初始化Kubernetes cluster 时遇到的各种网络问题还是让我“心有余悸”。
1565 0
基于Kubeadm的Flannel分析
Flannel概述 Flannel是将多个不同子网(基于主机Node)通过被Flannel维护的Overlay网络拼接成为一张大网来实现互联的,通过官方的一张网络拓扑图我们可以对其基本原理一目了然: 值得探讨的是,flannel的这个overlay网络支持多种后端实现,除上图中的UDP,还有VXLAN和host-gw等。
2492 0
+关注
云栖号资讯小哥
云栖号小编在此 ^o^
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Kubernetes Helm
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载