在容器环境中,软件构建过程是应用程序代码与所需运行时库集成的生命周期阶段。管理此构建过程是保护软件堆栈的关键。
使用 OpenShift Container Platform 作为容器构建的标准平台,您可以保证构建环境的安全性。“一次构建,随处部署”的理念确保构建过程的产品与生产环境中部署的产品完全一致。
维护容器的不变性也很重要。您不应该修补正在运行的容器,而应该重新构建和重新部署它们。
随着软件在构建、测试和生产阶段的移动,构成软件供应链的工具必须值得信赖。下图说明了可以整合到容器化软件可信软件供应链中的流程和工具。
您可以使用 Source-to-Image (S2I) 来组合源代码和基础镜像。构建器镜像利用 S2I 使您的开发和运维团队能够协作构建可重复的构建环境。借助可作为通用基础镜像 (UBI) 镜像提供的 Red Hat S2I 镜像,您现在可以免费重新分发使用基于真实 RHEL RPM 包构建的基础镜像构建的软件。Red Hat 已取消订阅限制以允许此操作。
当开发人员使用 Git 提交使用构建器镜像的应用程序的代码时,OpenShift Container Platform 可以执行以下功能:
触发,可以使用代码存储库上的 Webhook 或其他自动持续集成 (CI) 过程,来自动从可用的工件、S2I 构建器镜像和新提交的代码组装新的镜像。
自动部署新构建的镜像进行测试。
将测试过的镜像提升到生产环境,在那里可以使用 CI 过程自动部署它。
您可以使用集成的 OpenShift Container Registry 来管理对最终镜像的访问。S2I 和原生构建镜像都会自动推送到您的 OpenShift Container Registry。
除了包含的用于 CI 的 Jenkins 之外,您还可以使用 RESTful API 将您自己的构建和 CI 环境与 OpenShift Container Platform 集成,并使用任何符合 API 的镜像注册表。
在某些情况下,构建操作需要凭据才能访问相关资源,但是这些凭据不希望在构建生成的最终应用程序镜像中可用。您可以为此目的定义输入密钥。
例如,在构建 Node.js 应用程序时,您可以为 Node.js 模块设置私有镜像。要从此私有镜像下载模块,您必须为构建提供包含 URL、用户名和密码的自定义.npmrc
文件。出于安全原因,您不希望在应用程序镜像中公开您的凭据。
使用此示例场景,您可以将输入密钥添加到新的BuildConfig
对象。
创建密钥(如果不存在)。
$ oc create secret generic secret-npmrc --from-file=.npmrc=~/.npmrc
这将创建一个名为secret-npmrc
的新密钥,其中包含~/.npmrc
文件的 base64 编码内容。
将密钥添加到现有BuildConfig
对象的source
部分。
source:
git:
uri: https://github.com/sclorg/nodejs-ex.git
secrets:
- destinationDir: .
secret:
name: secret-npmrc
要在新的BuildConfig
对象中包含密钥,请运行以下命令:
$ oc new-build \
openshift/nodejs-010-centos7~https://github.com/sclorg/nodejs-ex.git \
--build-secret secret-npmrc
您可以设计容器镜像管理和构建流程以使用容器层,以便您可以分离控制。
例如,运维团队管理基础镜像,而架构师管理中间件、运行时、数据库和其他解决方案。然后,开发人员可以专注于应用程序层并专注于编写代码。
由于每天都会发现新的漏洞,因此您需要随着时间的推移主动检查容器内容。为此,您应该将自动化安全测试集成到您的构建或 CI 流程中。例如:
SAST/DAST – 静态和动态安全测试工具。
用于针对已知漏洞进行实时检查的扫描程序。此类工具会编目容器中的开源包,通知您任何已知的漏洞,并在发现以前扫描的包中的新漏洞时向您更新。
您的 CI 流程应包含策略,这些策略会标记安全扫描发现问题的构建,以便您的团队可以采取适当的措施来解决这些问题。您应该签署您自定义构建的容器,以确保在构建和部署之间没有任何篡改。
使用 GitOps 方法,您可以使用相同的 CI/CD 机制来管理您的应用程序配置以及您的 OpenShift Container Platform 基础架构。