趣谈网络协议
刘超
前网易研究院云计算技术部首席架构师
130417 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
趣谈网络协议
15
15
1.0x
00:00/00:00
登录|注册

第31讲 | 容器网络之Calico:为高效说出善意的谎言

IPIP模式解决跨网段问题
安全策略组件
路由广播组件BGP Speaker
路由配置组件Felix
物理机B的路由规则
物理机A的路由规则
容器A1的默认路由配置
容器A1的IP地址为172.17.8.2/32
Calico不同于Flannel的设计思路
Flannel解决容器跨主机互通的问题
微服务之间的通信协议
Calico在公有云上的部署
跨网段访问问题
Calico的架构
Calico网络的转发细节
Calico网络模型的设计思路

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

上一节我们讲了 Flannel 如何解决容器跨主机互通的问题,这个解决方式其实和虚拟机的网络互通模式是差不多的,都是通过隧道。但是 Flannel 有一个非常好的模式,就是给不同的物理机设置不同网段,这一点和虚拟机的 Overlay 的模式完全不一样。
在虚拟机的场景下,整个网段在所有的物理机之间都是可以“飘来飘去”的。网段不同,就给了我们做路由策略的可能。

Calico 网络模型的设计思路

我们看图中的两台物理机。它们的物理网卡是同一个二层网络里面的。由于两台物理机的容器网段不同,我们完全可以将两台物理机配置成为路由器,并按照容器的网段配置路由表。
例如,在物理机 A 中,我们可以这样配置:要想访问网段 172.17.9.0/24,下一跳是 192.168.100.101,也即到物理机 B 上去。
这样在容器 A 中访问容器 B,当包到达物理机 A 的时候,就能够匹配到这条路由规则,并将包发给下一跳的路由器,也即发给物理机 B。在物理机 B 上也有路由规则,要访问 172.17.9.0/24,从 docker0 的网卡进去即可。
当容器 B 返回结果的时候,在物理机 B 上,可以做类似的配置:要想访问网段 172.17.8.0/24,下一跳是 192.168.100.100,也即到物理机 A 上去。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Calico是一个解决容器跨网段通信问题的高效网络解决方案。与其他解决方案不同,Calico采用三层网络的路由转发来实现容器间的通信,避免了性能损耗。其架构包括路由配置组件Felix、路由广播组件BGP Speaker和安全策略组件,通过这些组件实现了灵活的网络策略配置和路由信息的广播。Calico还提出了IPIP模式,通过打隧道的方式解决了跨网段访问问题,将本来不是邻居的两台机器变成相邻的机器。在公有云上部署时,常选择使用IPIP模式。总的来说,Calico通过三层网络的路由转发和灵活的网络策略配置,解决了容器跨网段通信的问题,避免了性能损耗,是一种高效的容器网络解决方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(44)

  • 最新
  • 精选
  • 小谢同学
    请问老师,在IPIP模式下,原本的性能优势是否又回退到了overlay类似呢?

    作者回复: 是的

    2019-01-24
    4
    28
  • 斜月浮云
    现在提问还来得及吗?问下ipip模式中,隧道是点到点的?那么如果服务部署到两个或多个局域网,每个局域网有n台机器,那么为了保证互相跨网互通,是否需求全部点对点打隧道?是否资源损毁太大了?怎么优化?

    作者回复: 使用路由,汇聚到物理路由器,物理路由器之间打通

    2018-10-14
    2
    8
  • kissingers
    我们能想到的第一种方式是,让中间所有的路由器都来适配 Calico。本来它们互相告知路由,只互相告知物理机的,现在还要告知容器的网段。 这种情况为什么不行? BGP也能交换容器网段和路由信息吧

    作者回复: 对啊,中间的都适配calico,但是公司网管肯定不干

    2019-04-17
    5
    6
  • Tendrun
    老师您好,不太明白为什么当物理机A、B跨网断中间有多个路由器时不可用。如果路由器都支持BGP的话,且A、B之间可通。那么把A、B配置成bgp对端,应该就可以分发容器的路由,然后跨节点的容器就可以通信了吧

    作者回复: A-router-B,这样的话,B肯定会告诉A,如果想访问某个容器,router是下一跳,但问题是包到了router,router是物理的呀,他又不知道容器的那个段,他往哪里转发呀。除非router也配置了bgp

    2019-04-20
    2
    3
  • 俊飞
    听了老师讲解明白多了,我们的k8s1.13.0集群里面用到的就是擦calico网络,当时还在纳闷k8s怎么不用flannel网络了,现在明白了,calico网络性能要比flannel高很多,采用ip-in-ip的方式进行隧道通信,安全性也提高不少。

    作者回复: 后来flannel也支持calico的所有模式了

    2019-01-06
    3
    1
  • 程序员大天地
    没接触过,看来只有等后面用到才能看懂

    作者回复: 很容易自己搭建一个的

    2019-08-29
    2
  • yandongxiao
    超哥给的信息量真的是太大了,越品越精彩。

    作者回复: 谢谢

    2019-08-04
  • 功夫
    容器 网络越来越抽象类

    作者回复: 对的,但是原理还是那么多

    2019-06-01
  • 江南皮革厂研发中心保安队长
    服务之间的通信我们自己http RESTful 风格的比较多

    作者回复: 现在用restful的多了

    2019-03-18
    2
  • sunlight001
    工作中接触不到,现在完全看不明白的举个手!
    2018-07-27
    5
    237
收起评论
显示
设置
留言
44
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部