容器化方法为跨物理计算资源的系统的运行和维护带来了优势。在IT世界中,企业可以利用容器技术将计算工作负载与运行它们的计算基础分离。例如,这允许将计算硬件视为实用程序,从而允许在跨机架上部署多个工作负载,并根据需要扩展硬件资源(例如核心处理器、内存和存储设施)。
跨硬件资源采用多个软件负载可以更有效地利用硬件投资,并提高应对硬件故障的稳定性。通过允许可以更新集中式容器配置,然后将其推送到执行环境的方案,从而使软件工作负载本身的维护和演化更加容易。应用于传统企业IT的容器化技术已成为现代云计算技术的关键推动力。
虚拟机
在通常情况下,可以将容器视为轻量级虚拟机。完整的虚拟机能够完全仿真主机上的目标硬件层,其中包括CPU指令集、外围设备集等。虚拟机具有很高的可移植性,但由于在主机内模拟目标计算机的各个方面而导致大量开销。与要模拟的目标计算机相比,这实际上要求对主机进行过度指定。在许多情况下,这种仿真水平是不必要的。
基于虚拟机监控程序的虚拟化所需的主机资源少于完整的虚拟机。虚拟机管理程序为每个执行环境提供了基础硬件的私有视图,但是大多数情况下它都绑定到基础主机架构,因此通过将硬件架构限制为主机架构,它确实获得了一些额外的效率。在工业物联网(IIoT)应用程序中,通常不需要由完整虚拟机或虚拟机管理程序提供的抽象和隔离级别。
容器并不是完整的虚拟机,而是在主机的约束和架构下运行。这样,容器能够与主机的CPU架构和低级操作系统(内核)接口,从而直接共享主机的硬件和内核资源。
容器取决于主机的底层操作系统,但是可以封装并提供高层操作系统(用户空间)的一部分。这允许在容器内的应用程序被构建并针对一组固定的版本化操作系统资源进行固定运行。
分区
大多数系统管理员或UNIX应用程序开发人员可能熟悉“依赖地狱”的概念,这使所有系统资源可用以使应用程序运行。在配置为在同一服务器上运行的所有应用程序之间维护多个应用程序依赖关系,这通常是一项棘手且乏味的工作。容器允许每个应用程序将一组受控的依赖项与应用程序捆绑在一起,以便这些应用程序可以独立地具有稳定的执行环境,并与同一服务器上的其他容器化应用程序进行分区和隔离。为了方便起见,甚至应用程序更新也经常打包和部署为容器更新。因此,容器在目标机器上的应用程序组件之间提供了强大的分区。
增强安全性
由于容器是在容器引擎的场景中执行的,因此它可以通过约束容器引擎本身来增强对应用程序的安全性策略和约束。例如,在Linux托管环境中,使用“cgroups”,进程空间隔离、文件系统控件、内核级强制访问控件之类的机制,可以强制限制容器引擎在这些控件下运行,例如限制内存、CPU使用率、对文件系统特定部分的访问、对网络资源的访问,或仅允许某些事先批准的内核操作子集。
通过容器引擎的机制施加这些约束,即使封闭的应用程序不知道或不合作参与这些控制,也施加了这样的安全控制。这与现代IT安全优秀实践一致。
容器与应用程序类似,可以对其进行签名和身份验证,以便将内容分发到计算节点,并且可以在容器引擎的强加密下进行身份验证。
编排系统
现代的容器化系统还包括编排系统或与编排系统互操作。编排系统提供了将容器分派到主机,并确定要将哪些容器分派到哪些主机的方法。此外,大多数编排系统允许应用配置以参数化容器,并支持管理指标/仪表板以监视系统。当需要大规模协调容器的部署、供应和操作时,编排系统必须具备这些功能。
容器化方法和收益
在构造和维护容器方面,某些系统比其他系统具有更多的功能和特性。容器总是可以通过人工建造的,但是开放源代码生态系统中经常有工具和材料可以帮助实现这一目标。现代系统通常将允许容器从参考容器的组成/库中派生。这些库可促进重用,利用生态系统,并允许快速开发和部署容器。
概括而言,容器化方案消除了以受控方式配置应用程序及其执行环境以有效利用基础硬件计算资源的挑战。容器带来了分区、安全性和编排的好处。该方法比完整的虚拟机便宜,并且仍然导致操作系统/用户空间组件的重复。
利用工业物联网(IIoT)的容器化方法
尽管容器化技术主要是为传统企业IT开发的,但是为工业物联网(IIoT)采用类似方案具有明显的相似之处和优势。
要考虑的一件事是要在其中部署容器的工业物联网(IIoT)主机的类型,这通常需要考虑用例、未来验证和投资回报率(ROI)。在某些情况下,这可能是一个高价值的安装,保证边缘节点的高性能计算资源,类似于部署在企业数据中心的服务器。在其他情况下,需求可以证明在该边缘节点分配的成本较低且能力较低的机器是合理的。在功能齐全的工业物联网(IIoT)的部署中,可能会有不同层次的资产与不同类别的边缘硬件相关联。如何在相关规模上经济地启用每一类资产,可以很快成为选择边缘节点硬件和体系结构的重要驱动因素。
要考虑的另一件事是如何利用容器的分区属性,即沙箱。是否在边缘部署了一个包含所有应用程序功能的整体容器?还是希望通过将应用程序组件隔离到单独的空间/单独的容器中来获得更好、更可靠的姿态?
例如,通过在不同容器之间划分边缘功能,可以为一个容器授予更多特权。可以授予其工作是定期读取、评估和报告警报的应用程序组件以只读特权,以便与边缘资产进行交互。打算在边缘资产上执行软件升级的应用程序将需要更多特权,但是可以应用不同的基于角色的安全性来与该应用程序进行交互。
该架构可以映射为分层的安全性方法,在该方法中,可以将强大的权限强制执行和角色映射正交约束在同一边缘节点上托管的单独应用程序周围。此外,能够分离应用程序组件可以导致更健壮的实现,其中一个应用程序的行为(或错误行为)不会直接影响另一个应用程序。这种方法还允许轻松地向边缘设备添加增量增强功能。
应用程序组件之间的交互是另外一个考虑因素。由于应用程序是分离的,因此将需要实现进程间通信(IPC)方案/远程过程调用(RPC)方案,以使单独的应用程序在边缘节点内进行交互。此类进程间通信(IPC)方案/远程过程调用(RPC)方案也应进行身份验证和控制,以仅允许批准的交互。需要注意,典型的容器化方案并未提供这些机制。
容器化方案的安全功能与现代操作系统设计和现代安全优秀实践一致。通过设计操作系统级别的控制和策略,可以更好地限制安全漏洞对系统的潜在影响。验证和认证在边缘运行的应用程序组件的机制也与现代安全态势所要求的方法一致。
编排方案在工业物联网(IIoT)中具有明确的价值。绝对有必要利用一种用于以受控和集中方式管理工业物联网(IIoT)边缘节点群的方案来管理、版本化、维护,并将容器化的应用程序组件推送到边缘。
与传统的IT环境不同,这里的挑战是将针对特定边缘设备的容器进行分组和协调。容器工作负载必须映射到边缘设备的具体物理部署,因为这些设备直接绑定到现场资产。编排系统无法选择任何硬件来运行容器,但是需要足够灵活以轻松地针对特定边缘节点。
编排方案可能也不足以完全管理工业物联网(IIoT)系统,因为需要管理或提供主机系统的其他注意事项(网络接口、VPN、安全凭证、蜂窝调制解调器等)。这些资源通常由主机操作系统直接管理,并且仅可供容器使用工业物联网(IIoT)平台的传统方法在设备管理下封装了这一功能,设备中托管的容器/应用程序的管理可能是统一设备管理的子集。
还需要考虑选择开放源代码或封闭源容器引擎,因为维护它可能依赖于第三方。对第三方技术的持续支持、在容器中自定义应用程序、不断发展的功能,以及与不同的协议栈和云计算集成是其他需要考虑的因素。