現在,軟體開發的範例是將容器化應用程式部署到 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 作為一家行業領先的可靠廠商,會維護這些軟體包以及包和映象的整合。
如需瞭解更多資訊,請檢視以下資源: