在上一期小结中,我们提到,前面的专题解决了三个问题:
- 容器的入网
- 容器之间的互通
- 容器与容器集群外部的互通
但是,有丰富实战经验的同学们会发现,我们只解决了容器网络的一半问题——
也就是如何正确地在容器网络中转发数据包。
毛主席在《矛盾论》中指出,任何事物都有对立统一的两面性。
同样地,一个能够在真实生产环境中应用的计算机系统,也应当具有两面性——正确地处理数据和正确地丢弃数据。
现在,我们发现,前期的专题中,我们只讲清楚了容器网络的一面——正确地处理数据,并没有涉及到另一面——正确地丢弃数据。
如何在网络中正确地丢弃数据呢?
这就开启了新的大门——网络安全。
由于马克思认为,在实践中学习知识,对实例进行分析,是最高效的学习,因此,让我们基于一个实例来分析容器网络的安全——
假设我们开发了一个交友APP,叫“探陌”,或“greend”:
它的所有组件均由容器构成。
在手机端呈现的界面为web端,使用nginx;
中间的APP层,采用微服务架构,由以下部件组成:
elastic-search组件用于按条件查找附近的人;
node-images用于呈现附近的人的头像及发布的照片;
thisim用于与附近的人打招呼;
node.js实现视频聊天等功能……
当然,还有kong作为API网关,rabbitmq作为消息队列;
zabbix和prometheus作为性能监控组件;
后台的db层,使用mysql存储结构化数据,如附近的人身高,体重,年龄,三维等;
mongodb存储非结构化数据,如附近的人发布的视频、图片、心情等;
我们会发现,基于容器的APP,其网络模型实际上与基于VM的VPC模型,有着天壤之别。
基于VM的VPC模型,我们已经很熟悉了:
而基于容器的VPC模型,大致是这样的:
它和基于VM的模型最大的区别是:
- VM模型一般是Web/App/DB各占一个CIDR (Classless Inter-Domain Routing),而容器并非如此,往往是不同组件的容器在同一个CIDR内,采用容器的标签(tag)来区分;
- VM模型的数据流量较为简单,Web/APP/DB之间访问流向清晰,而容器化部署的APP微服务化后,会使得不同的容器组之间的数据流量变得非常复杂;
- LBaaS和FWaaS的实现;
在未来的专题中,我们将详解容器网络的安全实现。
敬请期待。