深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116708 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

35 | 解读Kubernetes三层网络方案

使用独立组件同步路由信息给网关
所有宿主机跟宿主机网关建立BGP Peer关系
需要使用IPIP模式时性能下降
集群宿主机之间需要二层连通
可靠性和可扩展性高
BIRD
Felix
CNI插件
用于在大规模数据中心里维护不同的自治系统之间路由信息
边界网关协议
不在宿主机上创建网桥设备
使用BGP协议自动分发路由信息
与Flannel host-gw模式类似
需要集群宿主机之间是二层连通的
无需额外封包和解包
性能损失约为10%
目的宿主机的网络栈根据路由表将IP包转发至目的容器
通过二层网络到达目的宿主机
设置下一跳地址为目的宿主机的IP地址
在私有部署环境里,Calico项目提供更可靠的组网方案和架构思路
在公有云上推荐使用Flannel host-gw模式
三层网络方案在大规模集群里路由规则可能会非常多
解决方案
缺点
优点
架构
BGP
工作原理
缺点
优点
工作原理
总结
Calico项目
Flannel host-gw模式
解读Kubernetes三层网络方案

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:解读 Kubernetes 三层网络方案。
在上一篇文章中,我以网桥类型的 Flannel 插件为例,为你讲解了 Kubernetes 里容器网络和 CNI 插件的主要工作原理。不过,除了这种模式之外,还有一种纯三层(Pure Layer 3)网络方案非常值得你注意。其中的典型例子,莫过于 Flannel 的 host-gw 模式和 Calico 项目了。
我们先来看一下 Flannel 的 host-gw 模式。
它的工作原理非常简单,我用一张图就可以和你说清楚。为了方便叙述,接下来我会称这张图为“host-gw 示意图”。
图1 Flannel host-gw示意图
假设现在,Node 1 上的 Infra-container-1,要访问 Node 2 上的 Infra-container-2。
当你设置 Flannel 使用 host-gw 模式之后,flanneld 会在宿主机上创建这样一条规则,以 Node 1 为例:
$ ip route
...
10.244.1.0/24 via 10.168.0.3 dev eth0
这条路由规则的含义是:目的 IP 地址属于 10.244.1.0/24 网段的 IP 包,应该经过本机的 eth0 设备发出去(即:dev eth0);并且,它下一跳地址(next-hop)是 10.168.0.3(即:via 10.168.0.3)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
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-16
    7
  • 峰哥
    老师好,有个1.4的K8S集群,sprincloud的微服务,怎么升级到1.10,是生产环境,有什么好的办法,谢谢

    作者回复: 版本差太远了,升级不了。。

    2018-12-11
    5
  • davad_dee
    图 1 Flannel host-gw 示意图 第一个路由表中第三条路由 src 192.168.0.2 是否应该是 10.168.0.2

    编辑回复: 已修正,感谢反馈~

    2019-12-03
    3
    2
  • blackpiglet
    请问张老师,calico、flannel、Weave、romana 等网络插件,有没有比较权威的性能对比数据?和 bare metal 比起来,性能损耗差距有多大呢?网上搜了一圈,说什么的都有,是不是三层的方案大概都是 10% 左右的 overhead 的呢?

    作者回复: 压测最好还是自己做,这个跟环境关系太大。你这里弄明白原理心里有底最重要。

    2018-11-12
    2
  • .
    请问,如果是想要静态ip,是不是只能选择calico方案,flannel不行

    作者回复: 都可以,都要改

    2018-11-15
    1
  • 柯察金
    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-12
    3
    160
  • blackpiglet
    三层和隧道的异同: 相同之处是都实现了跨主机容器的三层互通,而且都是通过对目的 MAC 地址的操作来实现的;不同之处是三层通过配置下一条主机的路由规则来实现互通,隧道则是通过通过在 IP 包外再封装一层 MAC 包头来实现。 三层的优点:少了封包和解包的过程,性能肯定是更高的。 三层的缺点:需要自己想办法维护路由规则。 隧道的优点:简单,原因是大部分工作都是由 Linux 内核的模块实现了,应用层面工作量较少。 隧道的缺点:主要的问题就是性能低。
    2018-11-12
    2
    123
  • ch_ort
    Kubernetes通过一个叫做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-25
    54
  • 米开朗基杨
    写了篇关于calico开启反射路由模式的文章,希望对大家有所帮助:https://www.yangcs.net/posts/calico-rr/
    2018-11-30
    3
    28
收起评论
显示
设置
留言
66
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部