共计 3626 个字符,预计需要花费 10 分钟才能阅读完成。
当初,软件开发的范例是将容器化应用程序部署到 Pod 上,而后通过 Kubernetes 进行治理。Kubernetes 能够管理应用程序的部署、复制、HA、指标和其余性能,这样应用程序就能够专一于本职工作。
要将应用程序容器化,你须要应用镜像,而镜像通常是基于语言的(Golang、Python、Rust、.NET 等)。镜像提供商有很多,包含将镜像提交到镜像仓库的集体贡献者,以及企业级镜像提供商等。你也能够在开发中应用基于操作系统的镜像。
但在应用镜像过程中,咱们往往会遇到一些问题。
软件工程问题
- 安全性:如何确保应用的版本没有受到 CVE 或其余破绽的影响?
- 从新散发:须要部署应用程序,然而不理解底层主机、架构或编排技术。
- 仓库和工具:有时我须要应用一些工具(Git、编译器、库等),但大多数镜像不提供能够获取这些工具和包的牢靠仓库。
- 可用性:开源贡献者和企业软件工程师都须要基于多种平台和架构(ARM、x86_64 等)制作软件。镜像不仅要适应架构,还要实用于不同语言标准。有没有牢靠的镜像仓库能够作为获取最新镜像的繁多参考点,以便保护镜像的标签历史?
- 反对和生命周期:在大多数状况下,不受反对的镜像对于企业级软件来说是有效的,因而须要有供应商为用来创立或容器化应用程序的根底提供反对,ISV/IHV 须要更多反对。此外,镜像必须在生命周期内进行更新、修复安全漏洞和进步性能。
应用 BCI 解决这些问题
SUSE 公布了 BCI(Base Container Image),BCI 是专一于安全性、可用性、敏捷性和开发者体验的企业级容器镜像。BCI 不仅基于操作系统,还包含语言包、busybox、base 和 minimal。因而,BCI 是应答各类开发(包含社区我的项目和生产级应用程序)挑战的现实抉择。
BCI 能帮忙你解决以下问题:
平安
没有人违心应用受 CVE 影响的软件来构建应用程序。作为开发人员,应用平安镜像能够确保开发的应用程序是牢靠的。以下是一些例子:
Trivy 是一款镜像扫描软件,可用于查看破绽。
➜ ~ trivy image registry.suse.com/bci/bci-base
2022-10-09T03:47:42.403+0200 INFO Need to update DB
2022-10-09T03:47:42.404+0200 INFO DB Repository: ghcr.io/aquasecurity/trivy-db
2022-10-09T03:47:42.404+0200 INFO Downloading DB...
34.35 MiB / 34.35 MiB [-------------------------------------------------------------------------------------------------------] 100.00% 23.13 MiB p/s 1.7s
2022-10-09T03:47:45.503+0200 INFO Vulnerability scanning is enabled
2022-10-09T03:47:45.503+0200 INFO Secret scanning is enabled
2022-10-09T03:47:45.503+0200 INFO If your scanning is slow, please try '--security-checks vuln' to disable secret scanning
2022-10-09T03:47:45.503+0200 INFO Please see also https://aquasecurity.github.io/trivy/v0.32/docs/secret/scanning/#recommendation for faster secret detection
2022-10-09T03:47:45.528+0200 INFO Detected OS: suse linux enterprise server
2022-10-09T03:47:45.528+0200 INFO Detecting SUSE vulnerabilities...
2022-10-09T03:47:45.528+0200 INFO Number of language-specific files: 0
registry.suse.com/bci/bci-base (suse linux enterprise server 15.4)
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
bci-micro、bci-minimal、buxybox 和 init 上的后果也是一样的。
➜ ~ trivy image registry.suse.com/bci/bci-micro
[…]
2022-10-09T03:55:17.952+0200 INFO Detecting SUSE vulnerabilities...
2022-10-09T03:55:17.953+0200 INFO Number of language-specific files: 0
registry.suse.com/bci/bci-micro (SUSE Linux enterprise server 15.4)
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
从新散发
对于 ISV/IHV 软件,应用程序必须进行更多的从新散发。这里有两个问题:
-
EULA 协定:
依据 BCI EULA,从新散发应用程序惟一的限度是第三方软件或与订阅绑定的资源,例如,公有仓库的包或基于许可证的硬件提供商。应用这些镜像开发的应用程序都会被从新散发。
-
软件:
BCI 带有一个仓库,你能够依据须要将包增加到镜像中,这样能减少自定义镜像的灵活性,同时让应用程序能够从新散发(不须要增加内部依赖项)。
仓库和工具
永恒的探讨:在满足开发人员需要和尽量让镜像小而简略之间的平衡点是什么?
在波及企业级镜像以及开发人员体验的时候,安全性是一个次要问题。BCI 应用每个镜像都能够拜访的仓库来提供工具、编译器和其他软件,从而解决这个问题。有了 Zypper,开发人员能够依据应用程序的需要在镜像安装包上减少一层。
你不须要手动增加仓库、查找包、检查和解决依赖项,或者依赖内部软件和包源。
这些仓库能够收费应用,而且 SUSE 会保护本人的包。
可用性
BCI 反对多种架构,包含 AArch64、ppc64le、s390x 和 x86_64,因而,无论你创立的是哪种类型的应用程序(边缘、物联网、传感器、设施、网页、微服务等),都能够轻松地将根底镜像集中在 BCI 上。
BCI 还为应用特定语言编写的应用程序提供基于语言的镜像,包含 Golang、Python、Rust、.NET、OpenJDK、NodeJS 等。
反对和生命周期
SUSE 设计了 BCI,而镜像通过企业级、ISV 和 IHV 的订阅取得商业反对。反对矩阵涵盖了 BCI 和语言包的根底,你能够在 BCI 镜像仓库查看反对详情:https://registry.suse.com/
BCI 也是一个开源我的项目,你能够查看它的理论开发状态,理解它们是如何针对不同架构进行构建的,以及查看其余相干信息。
这些镜像应用了 Open Build Service (OBS),每个人都能够应用 OBS。
- SLE 15 SP4 的 BCI 开发我的项目:https://build.opensuse.org/project/show/devel:BCI:SLE-15-SP4
- SLE 15 SP3 的 BCI 开发我的项目:https://build.opensuse.org/project/show/devel:BCI:SLE-15-SP3
结 论
除了镜像组合之外,你还有很多其余抉择。SUSE 提供了以平安为核心的产品,同时也重视开发人员的体验。
BCI 提供了一个灵便的容器镜像生态系统,而且尽可能地缩小占用空间。此外,咱们还提供了一种灵便扩大镜像的机制,让开发者能够专一于应用程序自身。
通过订阅,ISV 和 IHV 能够利用他们的应用程序,为应用程序应用的根底镜像提供 SUSE 企业级反对。
因为 BCI 能够在反对矩阵外在任何类型的主机中部署和应用,因而从新散发是没有问题的,任何人都能够在不受更多限度的状况下拜访镜像,构建和从新散发应用程序。
包仓库能够为开发人员提供灵活性,不会减少任何类型的限度。SUSE 作为一家行业当先的牢靠厂商,会保护这些软件包以及包和镜像的集成。
如需理解更多信息,请查看以下资源:
- BCI 文档:https://documentation.suse.com/smart/linux/html/concept-bci-g…
- 常见问题:https://mp.weixin.qq.com/s/o34G4nXplVrWPLxUtdi1AQ
- SUSE 容器镜像:https://registry.suse.com