35 | 解读Kubernetes三层网络方案
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Kubernetes三层网络方案中的Flannel的host-gw模式和Calico项目。Flannel通过在宿主机上创建路由规则实现容器通信路径中的“网关”功能,而Calico则利用BGP协议自动分发路由信息,实现容器网络的三层网络方案。文章详细解释了这两种网络方案的工作原理和优势,以及它们在Kubernetes集群中的应用。Calico项目通过BGP协议将集群中的所有节点组成一个全连通的网络,但在大规模集群中需要使用Route Reflector模式。此外,文章还介绍了Calico的IPIP模式和解决宿主机网关设置成BGP Peer的两种方案。总的来说,本文为读者提供了Kubernetes三层网络方案的核心概念和技术特点,为深入学习和实践提供了基础知识。 在大规模集群里,三层网络方案在宿主机上的路由规则可能会非常多,这会导致错误排查变得困难。此外,在系统故障的时候,路由规则出现重叠冲突的概率也会变大。基于上述原因,如果是在公有云上,由于宿主机网络本身比较“直白”,我一般会推荐更加简单的Flannel host-gw模式。但不难看到,在私有部署环境里,Calico项目才能够覆盖更多的场景,并为你提供更加可靠的组网方案和架构思路。 三层网络方案和“隧道模式”的异同,以及各自的优缺点,是一个值得思考的问题。三层网络方案更加直接,能够提供更高的性能和更好的可扩展性,但在大规模集群中可能会面临路由规则管理的挑战。而“隧道模式”则可以更好地解决跨主机通信的问题,但可能会带来一定的性能损耗。读者可以根据自身需求和环境特点选择合适的方案。 总的来说,本文为读者提供了深入理解Kubernetes三层网络方案的机会,帮助他们更好地选择和应用适合自己场景的网络方案。
《深入剖析 Kubernetes》,新⼈⾸单¥68
全部留言(66)
- 最新
- 精选
- 羁绊12221老师好,flannel UDP 隧道封装的是IP包,vxlan封装的是 二层帧,Calico IPIP模式封装的也是IP包。。感觉上使用隧道通信封装IP报文就够了吧?封装二层帧有什么考虑吗?
作者回复: 有些网络方案或者硬件,要求必须在二层做一些功能
2019-08-167 - 峰哥老师好,有个1.4的K8S集群,sprincloud的微服务,怎么升级到1.10,是生产环境,有什么好的办法,谢谢
作者回复: 版本差太远了,升级不了。。
2018-12-115 - davad_dee图 1 Flannel host-gw 示意图 第一个路由表中第三条路由 src 192.168.0.2 是否应该是 10.168.0.2
编辑回复: 已修正,感谢反馈~
2019-12-0332 - blackpiglet请问张老师,calico、flannel、Weave、romana 等网络插件,有没有比较权威的性能对比数据?和 bare metal 比起来,性能损耗差距有多大呢?网上搜了一圈,说什么的都有,是不是三层的方案大概都是 10% 左右的 overhead 的呢?
作者回复: 压测最好还是自己做,这个跟环境关系太大。你这里弄明白原理心里有底最重要。
2018-11-122 - .请问,如果是想要静态ip,是不是只能选择calico方案,flannel不行
作者回复: 都可以,都要改
2018-11-151 - 柯察金BGP 这种,会不会导致路由表很大
作者回复: 有可能的
2019-01-19 - swordholder写了两篇文档: Docker单机网络模型动手实验 https://github.com/mz1999/blog/blob/master/docs/docker-network-bridge.md Docker跨主机Overlay网络动手实验 https://github.com/mz1999/blog/blob/master/docs/docker-overlay-networks.md 通过动手实验加深理解容器网络。分享出来希望对小伙伴有所帮助。 看来学完了这篇,可以再写一个Docker跨主机路由方案动手实验2018-11-123160
- blackpiglet三层和隧道的异同: 相同之处是都实现了跨主机容器的三层互通,而且都是通过对目的 MAC 地址的操作来实现的;不同之处是三层通过配置下一条主机的路由规则来实现互通,隧道则是通过通过在 IP 包外再封装一层 MAC 包头来实现。 三层的优点:少了封包和解包的过程,性能肯定是更高的。 三层的缺点:需要自己想办法维护路由规则。 隧道的优点:简单,原因是大部分工作都是由 Linux 内核的模块实现了,应用层面工作量较少。 隧道的缺点:主要的问题就是性能低。2018-11-122123
- ch_ortKubernetes通过一个叫做CNI的接口,维护了一个单独的网桥来代替docker0。这个网桥的名字就叫作:CNI网桥,它在宿主机上的设备名称默认是:cni0。 容器“跨主通信”的三种主流实现方法:UDP、host-gw、VXLAN。 之前介绍了UDP和VXLAN,它们都属于隧道模式,需要封装和解封装。接下来介绍一种纯三层网络方案,host-gw模式和Calico项目 Host-gw模式通过在宿主机上添加一个路由规则: <目的容器IP地址段> via <网关的IP地址> dev eth0 IP包在封装成帧发出去的时候,会使用路由表里的“下一跳”来设置目的MAC地址。这样,它就会通过二层网络到达目的宿主机。 这个三层网络方案得以正常工作的核心,是为每个容器的IP地址,找到它所对应的,“下一跳”的网关。所以说,Flannel host-gw模式必须要求集群宿主机之间是二层连通的,如果宿主机分布在了不同的VLAN里(三层连通),由于需要经过的中间的路由器不一定有相关的路由配置(出于安全考虑,公有云环境下,宿主机之间的网关,肯定不会允许用户进行干预和设置),部分节点就无法找到容器IP的“下一条”网关了,host-gw就无法工作了。 Calico项目提供的网络解决方案,与Flannel的host-gw模式几乎一样,也会在宿主机上添加一个路由规则: <目的容器IP地址段> via <网关的IP地址> dev eth0 其中,网关的IP地址,正是目的容器所在宿主机的IP地址,而正如前面所述,这个三层网络方案得以正常工作的核心,是为每个容器的IP地址,找到它所对应的,“下一跳”的网关。区别是如何维护路由信息: Host-gw : Flannel通过Etcd和宿主机上的flanneld来维护路由信息 Calico: 通过BGP(边界网关协议)来实现路由自治,所谓BGP,就是在大规模网络中实现节点路由信息共享的一种协议。 隧道技术(需要封装包和解包,因为需要伪装成宿主机的IP包,需要三层链通):Flannel UDP / VXLAN / Calico IPIP 三层网络(不需要封包和解封包,需要二层链通):Flannel host-gw / Calico 普通模式2020-11-2554
- 米开朗基杨写了篇关于calico开启反射路由模式的文章,希望对大家有所帮助:https://www.yangcs.net/posts/calico-rr/2018-11-30328