近年来,随着计算机技术的不断升级,容器技术被广泛接受和使用。与此同时,容器以及容器运行环境的安全成为了亟待研究和解决的问题。青藤云安全认为,只有对容器有充分的认识,才能针对存在的问题和现象,进行针对性解决。
本文简述,容器安全的技术架构,加深对容器理解。
下图展示了容器技术架构的五个层:
1. 开发人员系统(生成镜像并将其发送给测试和验证)
2. 测试和验证系统(验证并核实镜像的内容、镜像签名,并将镜像发送到镜像仓库)
3. 镜像仓库(存储镜像并将镜像按需分发给编排工具)
4. 编排工具(将镜像转换为容器,并将容器部署到主机)
5. 主机(根据编排工具的指示运行和终止镜像)
图:容器技术架构的层、组件和生命周期
尽管在整个过程中涉及许多管理者系统角色,但该图仅描述了内部镜像仓库和编排工具的管理者系统。
灰色的系统(开发人员系统、测试和验证系统以及管理员系统)不在容器技术架构范围之内,但确实与容器技术架构有着重要的交互。在大多数使用容器的组织机构中,开发和测试环境也利用容器,这种一致性是使用容器的主要优点之一。
理解容器技术架构的另一种方法是考虑容器生命周期的阶段,如图底部所示。下文将会对这三个阶段进行更简单的介绍。
由于组织机构通常一次性构建和部署很多不同的应用,所以,在一个组织机构内,这些生命周期的阶段通常同时进行,而不应被视为成熟度的渐进式阶段。相反,应将其视为连续运行引擎中的循环。按照这个比喻,每个应用都是引擎中的一个汽缸,不同的应用可能同时处于这个生命周期的不同阶段。
1. 镜像的创建、测试和验证
在容器生命周期的第一阶段,创建应用的组件,并将其放置在一个镜像中(或者可能放置在多个镜像中)。镜像创建过程由将应用打包、转交给测试的开发人员管理。镜像创建通常使用能够自动化管理工具(例如Jenkins[8]和TeamCity[9])来协助所谓的“持续集成”过程。
大多数容器技术采用声明式方法来介绍应用的组件和要求。例如,用于Web服务器的镜像不但包括Web服务器的可执行文件,而且还包括计算机可解析的数据,用来描述Web服务器的运行方法,如侦听端口或服务器使用的配置参数。
镜像创建后,组织机构通常进行测试和验证工作。例如,自动化测试工具和人员会使用所创建的镜像来验证最终应用的功能,安全团队会对这些镜像进行认证。
为应用创建、测试和认证完全相同的复制件,保持其一致性,这是容器运行和安全性的主要效益之一。
2. 镜像存储和检索
镜像通常存储在中央位置,以便各主机对其进行控制、共享、查找和重用。镜像仓库是一种服务,方便开发人员在创建镜像后,将镜像进行存储、签名和分类,实现镜像标识和版本控制,有助于发现和重用,以及查找和下载其它人创建的镜像。镜像仓库可以自托管,也可以作为一种服务来使用。
镜像仓库提供API,确保能够实现常见镜像相关任务的自动化。
一旦存储到镜像仓库中,就可以轻松地获取镜像,然后由DevOps人员在其运行容器的任何环境中运行镜像。
3. 容器部署与管理
编排工具让DevOps人员或自动化工具,能够从镜像仓库中获取镜像,将这些镜像部署到容器中,并管理正在运行的容器。该部署过程会形成应用的一个可用版本,能够运行并准备响应请求。将镜像部署到容器中时,镜像本身不会更改,而是将镜像的一个副本放到容器中,并将一组应用静止代码转换为运行实例。 编排工具提供的抽象性让DevOps人员可以便捷地设定某个镜像运行所需的容器数量、以及每个容器需要分配的资源,如内存、处理能力和磁盘。
编排工具还负责监控跨主机的容器资源消耗、作业执行和机器健康状况。根据其配置,如果最初运行容器的主机出现故障,编排工具可能会在新主机上自动重启容器。
当容器中的应用需要更新时,不会去更改现有的容器,而是将其销毁,并从更新的镜像中创建新的容器。这是使用容器关键一项不同之处:初始部署的基础软件不应随时间而改变,而是通过一次性替换整个镜像来完成更新。
这意味着,在创建新的镜像版本时,开发人员通常会关注所有的漏洞管理,包括补丁和配置设置。对于容器,通常让开发人员而不是运营团队负责应用和镜像的安全性。
容器管理包括安全管理和监控。但为非容器环境设计的安全控制通常不适用于容器。
理解容器技术架构的另一种方法是考虑容器生命周期的阶段。本文从镜像的创建、测试和验证,镜像存储和检索,容器部署与管理三个阶段对容器技术结构进行了简单的介绍。青藤云安全也希望通过本文,让大家对容器技术有更深刻的认识。