处理严格发布流程中的容器“修补”策略

63次阅读
没有评论

问题描述

正在为公司构建一个新的容器和Kubernetes系统。尽管整体进展顺利,但容器的修补策略让他有些困惑。他们公司遵循严格的发布流程:新版本会在开发环境中进行测试,然后升级到测试环境(在此环节进行集成测试)。虽然有时会有其他环境,但基本流程是升级到生产环境。所有这些都是使用在开发环境中构建的二进制文件完成的(一旦离开开发环境就不再重新构建)。

生产环境中的应用程序版本会一直运行,直到需要使用另一个版本(公司有很多应用程序)。目前(使用VM结构),他们会对托管应用程序的虚拟机执行修补操作。尽管一些关键应用会进行一些测试,但基本理论是应用程序代码不会被更改,因此在对虚拟机应用安全补丁时应用程序会保持稳定。虽然偶尔会出现问题,但这种情况非常罕见。

然后引入了容器镜像。容器镜像是不可变的。你不能直接对容器镜像应用安全补丁,而是需要构建新的镜像。

这就带来了问题,因为容器镜像包含了基础镜像和应用程序的一体化二进制文件。要更新基础镜像,必须重新构建整个镜像。这意味着会有一个新的二进制文件,从而需要进行更多的测试。(即使获取相同版本的源代码,生成的二进制文件也不同。)

用户担心这可能会使他们的部署和测试流程变得复杂。

解决方案

请注意以下操作可能会因版本差异而有所不同。为避免风险,请在实施操作前做好备份,并在生产环境中进行充分测试。

为了解决容器镜像修补的问题,你可以考虑以下策略:

1. 使用仓库存储构建产物

当你进行构建时,将产生的构建产物存储在一个仓库中,比如JFrog或Nexus。这样,在需要进行修补时,你可以从仓库中获取构建产物,并将其放置在更新的基础镜像之上。

2. 合理使用基础镜像

选择稳定的基础镜像标签,如openjdk11:latest,并信任供应商的更新是安全的,因为它仍然是JDK11。这意味着选择可靠的基础镜像至关重要。有几个选项可供选择,值得一提的是RedHat UBI镜像。

3. 分层构建

采用分层构建的方法,将基础镜像与应用程序代码分开构建,使得在需要更新基础镜像时,只需构建一个新的顶层镜像即可,而不必重新构建整个应用程序镜像。

4. 自动化流程

考虑在修补过程中采用自动化流程,以减少人为错误并提高效率。使用自动化工具来执行构建、部署和测试,确保整个过程可重复且可控。

5. 定期审查和更新

定期审查基础镜像和应用程序依赖,确保它们都是最新的版本,并应用任何必要的修补程序。

这些策略可以帮助你有效地处理容器镜像修补问题,减少测试和部署流程中的复杂性,同时保障应用程序的安全性和稳定性。

请根据你的实际情况选择合适的策略,并在进行任何更改前在非生产环境中进行充分测试和验证。

正文完