k8s的CNI网络方案选择,flannel和calico优劣势对比
收起在资源管理中,网络的管理是比较复杂的。对于容器平台可能的网络方案,基本上分为以下几类:
原生NAT方案中,容器借助宿主机端口映射、以及在宿主机上配置的iptables规则,对容器的网络数据包进行NAT转换,再通过宿主机的路由转发实现不同容器间跨主机的网络通信。这种方式的优势是原生支持、简单、容器实例不需要额外消耗骨干网络IP地址、也不会增加在宿主机间传递数据包的长度;但是缺陷也是明显的:
因此,原生的NAT网络比较适合小规模的功能验证和试验环境,网络性能不是重要的考虑因素,测试的场景中也不涉及很多容器迁移、防火墙安全等问题。很显然,在银行正式的测试环境、生产环境下,采用原生NAT方案不足以满足功能、性能和安全监管要求。
隧道方案,也就是Overlay方案,借助容器宿主机网络,构建出一个对于容器来说三层路由可达虚拟网络。具体做法是通过把容器网络数据包整体封装放进宿主机网络报文,由宿主机网络转发到目标容器所在的宿主机,再由目标容器所在的宿主机对报文进行拆解得到容器网络数据包,交给容器网桥,由容器网桥再转发到目标容器。隧道方案的好处是没有NAT方案的端口冲突问题、不消耗额外的骨干网络IP、与现有网络技术不产生冲突因此灵活性大、通过构建不同的VLAN虚拟网络很容易实现网络隔离、网络性能损失比原生NAT方案小,在满足银行业务功能和安全监管要求的同时,对性能也有一定的照顾。因此隧道(Overlay)方案目前是应用比较多的选择,在技术上的可选择性也最大,方案成熟度也比较高,所以相对其他的方案,隧道方案的实施、定制化、维护的成本比较低。不过事情都有两面,如果选择隧道方案,您还是有一些不可回避问题需要考虑解决:
路由方案通过路由技术从三层或者二层实现跨主机容器互通,没有NAT,没有Overlay方案需要的数据包封装和拆解,每一个容器具有路由可达的IP地址,且可以做到从容器平台外部路由可达。这种网络方案的好处是性能损失小、外部路由可达、传统的防火墙仍然能正常发挥作用等。但缺点是:
再来探讨自定义网络方案,本文所提的自定义网络方案泛指针对自身特定需求,而在既有网络技术基础之上进行改造,或者将不同的网络技术进行整合、打通而形成的特殊方案。例如在某银行,容器平台作为整个金融云平台的一部分,在设计容器网络时,需要考虑整个金融云网络管理上的一致性,由此要求容器网络具备和底层宿主机网络相同的网络层级、IP地址规划、子网划分规则,并能够实现容器实例和容器平台以外的直接路由互通,以便能够对容器网络复用既有的SDN控制器管理、防火墙、安全漏扫、网络抓包分析工具等的能力。因此该银行在建设自己容器平台网络时,对接了IAAS的Neutron+SDN进行统一网络管理,工作原理是:
这种方案的效果即保证网络效率、也能完全融入现有网络管理体系、还能做到完全的SDN联动,但复杂程度高,定制的成本也比较大,且由于完全基于路由而没有Overlay,也存在IP地址消耗比较大的问题。
需要声明以上只是以某个特定银行的定制方案为例,读者所在的银行和企业可能有自己对容器网络的需求,以及自己的技术考虑,因此自定义网络方案的可能性多种多样,最终实现的能力和代价也差别很大。
如何选择容器平台的网络技术方案会相当复杂,涉及技术、场景、人员技能、成本等多方面。容器平台网络方案直接关系到平台的容量、效率、实施和运维成本,因此选择需要充分论证,考虑容器平台的定位、规模发展、承载的业务场景、对现有网络的影响、对与集中监控系统、安全合规检查系统集成的影响等,需要认真评估需求、平衡收益和成本。