×

在容器环境中,软件构建过程是应用程序代码与所需运行时库集成的生命周期阶段。管理此构建过程是保护软件堆栈的关键。

一次构建,随处部署

使用 OpenShift Container Platform 作为容器构建的标准平台,您可以保证构建环境的安全性。“一次构建,随处部署”的理念确保构建过程的产品与生产环境中部署的产品完全一致。

维护容器的不变性也很重要。您不应该修补正在运行的容器,而应该重新构建和重新部署它们。

随着软件在构建、测试和生产阶段的移动,构成软件供应链的工具必须值得信赖。下图说明了可以整合到容器化软件可信软件供应链中的流程和工具。

OpenShift Container Platform 可以与可信代码存储库(如 GitHub)和开发平台(如 Che)集成,以创建和管理安全代码。单元测试可以依赖于CucumberJUnit。您可以使用Anchore或 Twistlock 检查容器是否存在漏洞和合规性问题,并使用 AtomicScan 或 Clair 等镜像扫描工具。 Sysdig 等工具可以持续监控您的容器化应用程序。

管理构建

您可以使用 Source-to-Image (S2I) 来组合源代码和基础镜像。构建器镜像利用 S2I 使您的开发和运维团队能够协作构建可重复的构建环境。借助可作为通用基础镜像 (UBI) 镜像提供的 Red Hat S2I 镜像,您现在可以免费重新分发使用基于真实 RHEL RPM 包构建的基础镜像构建的软件。Red Hat 已取消订阅限制以允许此操作。

当开发人员使用 Git 提交使用构建器镜像的应用程序的代码时,OpenShift Container Platform 可以执行以下功能:

  • 触发,可以使用代码存储库上的 Webhook 或其他自动持续集成 (CI) 过程,来自动从可用的工件、S2I 构建器镜像和新提交的代码组装新的镜像。

  • 自动部署新构建的镜像进行测试。

  • 将测试过的镜像提升到生产环境,在那里可以使用 CI 过程自动部署它。

Source-to-Image Builds

您可以使用集成的 OpenShift Container Registry 来管理对最终镜像的访问。S2I 和原生构建镜像都会自动推送到您的 OpenShift Container Registry。

除了包含的用于 CI 的 Jenkins 之外,您还可以使用 RESTful API 将您自己的构建和 CI 环境与 OpenShift Container Platform 集成,并使用任何符合 API 的镜像注册表。

在构建过程中保护输入

在某些情况下,构建操作需要凭据才能访问相关资源,但是这些凭据不希望在构建生成的最终应用程序镜像中可用。您可以为此目的定义输入密钥。

例如,在构建 Node.js 应用程序时,您可以为 Node.js 模块设置私有镜像。要从此私有镜像下载模块,您必须为构建提供包含 URL、用户名和密码的自定义.npmrc文件。出于安全原因,您不希望在应用程序镜像中公开您的凭据。

使用此示例场景,您可以将输入密钥添加到新的BuildConfig对象。

  1. 创建密钥(如果不存在)。

    $ oc create secret generic secret-npmrc --from-file=.npmrc=~/.npmrc

    这将创建一个名为secret-npmrc的新密钥,其中包含~/.npmrc文件的 base64 编码内容。

  2. 将密钥添加到现有BuildConfig对象的source部分。

    source:
      git:
        uri: https://github.com/sclorg/nodejs-ex.git
      secrets:
      - destinationDir: .
        secret:
          name: secret-npmrc
  3. 要在新的BuildConfig对象中包含密钥,请运行以下命令:

    $ oc new-build \
        openshift/nodejs-010-centos7~https://github.com/sclorg/nodejs-ex.git \
        --build-secret secret-npmrc

设计构建流程

您可以设计容器镜像管理和构建流程以使用容器层,以便您可以分离控制。

Designing Your Build Process

例如,运维团队管理基础镜像,而架构师管理中间件、运行时、数据库和其他解决方案。然后,开发人员可以专注于应用程序层并专注于编写代码。

由于每天都会发现新的漏洞,因此您需要随着时间的推移主动检查容器内容。为此,您应该将自动化安全测试集成到您的构建或 CI 流程中。例如:

  • SAST/DAST – 静态和动态安全测试工具。

  • 用于针对已知漏洞进行实时检查的扫描程序。此类工具会编目容器中的开源包,通知您任何已知的漏洞,并在发现以前扫描的包中的新漏洞时向您更新。

您的 CI 流程应包含策略,这些策略会标记安全扫描发现问题的构建,以便您的团队可以采取适当的措施来解决这些问题。您应该签署您自定义构建的容器,以确保在构建和部署之间没有任何篡改。

使用 GitOps 方法,您可以使用相同的 CI/CD 机制来管理您的应用程序配置以及您的 OpenShift Container Platform 基础架构。

构建 Knative 无服务器应用程序

依赖 Kubernetes 和 Kourier,您可以使用 OpenShift Container Platform 中的 OpenShift Serverless 来构建、部署和管理无服务器应用程序。

与其他构建一样,您可以使用 S2I 镜像来构建您的容器,然后使用 Knative 服务来提供服务。通过 OpenShift Container Platform Web 控制台的拓扑视图查看 Knative 应用程序构建。