目录

Calico系列-01-选择问题

目录

概述

网络这个东西很复杂,我个人也是一知半解,本文大概分享一点我自己的理解。

思考

关于选择 Flannel 还是 Calico,我想一般企业都还不到考虑网络性能这个问题,所以我们这里不讨论封包不封包这个问题,但是有一点需要知道的是,用 Flannel 的默认 vxlan 模式创建出来的 Pod IP,至少在路由层面上是无法可达的,但是 Calico 的默认模式可以,但是又原来底层网络,一个很简单的场景就是,企业内部如果用容器部署了一个 ZooKeeper,然后业务的服务进程想去连,用 Pod IP 肯定不行了,那用啥呢?可以用 LB 呀,但是如果 LB 也没有呢…这个时候可能会想,如果 Pod IP 跟物理/虚拟机的 IP 一样可以路由到,是不是省事很多?因为业务不一定懂容器,但是他们肯定知道 IP。

另外呢,还有跨子网的问题,比如说一个机房不同机柜,如果不属于不同子网,比如业务A在子网1,业务B在子网2,此时A和B要建立连接怎么搞呢?那肯定是得通过路由对不对?Calico 的 VXLAN 和 IPIP 也可以建立子网之间的联系,可以理解成,子网内,Calico 就是纯二层的通信了,如果跨子网,那就封包,然后通过路由到达另一个子网,另一个子网的主机负责解包就行了,这个时候 Calico 的工作是在三层的。那 Flannel 跨子网下行不行呢,也是可以的,不过不管是子网内,子网间,Flannel 基本都是设计成共工作在三层的,那对比 Calico,自然就没有二层的优势咯。

关于很多 CNI 的区别,主要还是在 Pod IP 是否可以在集群外去使用。

当然了,有很多 CNI,也有很多各种不同的网络场景,不管是 in cluster 还是 outside cluster,不管不是 underlay 还是 overlay,业务同学只关心自己的 pod 能不能连接到内网或者外网。我个人理解这些 CNI 其实没有产生新的技术点,只是把很多需要人工维护的东西,做成 go 代码了,其中有很多重建、恢复、重启等自动化的功能(也是最大的价值),但只要你个人对网络的理解很深,通过 shell 脚本,应该都可以复制很多功能,或者说实现一些自定义的需求,而不是一定要通过 CNI 才能实现。

警告
本文最后更新于 2022年2月19日,文中内容可能已过时,请谨慎参考。