容器技术很火,经常为人所提及,尤其是开源容器工具docker,已在不少数据中心里有广泛应用。容器主要是对软件和其依赖环境的标准化打包,将应用之间相互隔离,并能运行在很多主流操作系统上。这样看来容器和虚拟机技术很类似,容器是APP层面的隔离,而虚拟化是物理资源层面的隔离,容器解决了虚拟技术的不少痛点问题,很多时候容器可以和虚拟机结合在一起使用,这也是目前数据中心主流的做法。
当企业IT建设容器云平台时,会碰到一系列的挑战,根据CNCF的调查报告指出,容器的网络和安全实现成为容器云平台建设最主要的挑战,当企业开始将重要的企业核心应用迁移至容器平台,缺乏足够的网络和安全管控将会给业务上线带来潜在的巨大威胁。
除了容器网络安全,如何更好的链接不同K8S集群孤岛,如何链接异构容器云平台,这些都是一系列的网络问题需要考虑。容器网络技术也在持续演进,从docker本身的动态端口映射网络模型,到CNCF的CNI容器网络接口到Service Mesh+CNI层次化SDN。
端口映射
1、Bridge模式,即Linux的网桥模式, docker在安装完成后,便会在系统上默认创建一个Linux网桥,名称为docker0 并为其分配一个子网,针对有docker创建的每一个容器,均为其创建一个虚拟的以太网设备(veth peer)。其中一端关联到网桥上,另一端映射到容器类的网络空间中。然后从这个虚拟网段中分配一个IP地址给这个接口。 其网络模型如下:
2、Host模式,即共用主机的网络,它的网络命名空间和主机是同一个,使用宿主机Namespace、IP和端口。
3、Container模式,使用已经存在容器的网络的Namespace,相当于多个容器使用同一个网络协议栈,k8s中的pod中多个容器之间的网络和存储的贡献就是使用这种模式。
4、None模式&