容器网络硬核技术内幕 (21) 矛盾论与实践论

2022-07-29 20:24:06 浏览数 (2)

在上一期小结中,我们提到,前面的专题解决了三个问题:

  1. 容器的入网
  2. 容器之间的互通
  3. 容器与容器集群外部的互通

但是,有丰富实战经验的同学们会发现,我们只解决了容器网络的一半问题——

也就是如何正确地在容器网络中转发数据包。

毛主席在《矛盾论》中指出,任何事物都有对立统一的两面性。

同样地,一个能够在真实生产环境中应用的计算机系统,也应当具有两面性——正确地处理数据和正确地丢弃数据。

现在,我们发现,前期的专题中,我们只讲清楚了容器网络的一面——正确地处理数据,并没有涉及到另一面——正确地丢弃数据。

如何在网络中正确地丢弃数据呢?

这就开启了新的大门——网络安全。

由于马克思认为,在实践中学习知识,对实例进行分析,是最高效的学习,因此,让我们基于一个实例来分析容器网络的安全——

假设我们开发了一个交友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的模型最大的区别是:

  1. VM模型一般是Web/App/DB各占一个CIDR (Classless Inter-Domain Routing),而容器并非如此,往往是不同组件的容器在同一个CIDR内,采用容器的标签(tag)来区分;
  2. VM模型的数据流量较为简单,Web/APP/DB之间访问流向清晰,而容器化部署的APP微服务化后,会使得不同的容器组之间的数据流量变得非常复杂;
  3. LBaaS和FWaaS的实现;

在未来的专题中,我们将详解容器网络的安全实现。

敬请期待。

0 人点赞