從前有座山,山裡有座廟,廟裡有個 LinuxKit - 在容器中運行容器

一些令人振奮的消息引發了我對今年 DockerCon 的興趣,在這次會議中,無可爭議的容器巨頭公司 Docker 發布了一個新的操作系統:LinuxKit。

這家容器巨頭宣布的是一個靈活的、可擴展的操作系統,而為了可移植性,系統服務也是運行在容器之中。甚至,令人驚訝的是,就連 Docker 運行時環境也是運行在容器內!

在本文中,我們將簡要介紹一下 LinuxKit 中所承諾的內容,以及如何自己嘗試一下這個不斷精簡、優化的容器。

少即是多

不可否認的是,用戶一直在尋找一個可以運行他們的微服務的精簡版本的 Linux 。通過容器化,你會儘可能地最小化每個應用程序,使其成為一個適合於運行在其自身容器內的獨立進程。但是,由於你需要對那些駐留容器的宿主機出現的問題進行修補,因此你不斷地在宿主機間移動容器。實際上,如果沒有像 Kubernetes 或 Docker Swarm 這樣的編排系統,容器編排幾乎總是會導致停機。

不用說,這只是讓你保持操作系統儘可能小的原因之一。

我曾多次在不同場合重複過的最喜愛的名言,來自荷蘭的天才程序員 Wietse Zweitze,他為我們提供了重要的 Email 軟體 Postfix 和 TCP Wrappers 等知名軟體。

在 Postfix 網站 指出,即使你編碼和 Wietse 一樣小心,「每 1000 行[你]就會在 Postfix 中引入一個額外的 bug」。從我的專業的 DevSecOps 角度看,這裡提到的「bug」 可以將其大致看做安全問題。

從安全的角度來看,正是由於這個原因,代碼世界中「少即是多」。簡單地說,使用較少的代碼行有很多好處,即安全性、管理時間和性能。對於初學者來說,這意味著安全漏洞較少,更新軟體包的時間更短,啟動時間更快。

深入觀察

考慮下在容器內部運行你的程序。

一個好的起點是 Alpine Linux,它是一個苗條、精簡的操作系統,通常比那些笨重的系統更受喜歡,如 Ubuntu 或 CentOS 等。Alpine 還提供了一個 miniroot 文件系統(用於容器內),最近我看到的大小是驚人的 1.8M。事實上,這個完整的 Linux 操作系統下載後有 80M。

如果你決定使用 Alpine Linux 作為 Docker 基礎鏡像,那麼你可以在 Docker Hub 上找到一個, 它將其描述為:「一個基於 Alpine Linux 的最小 Docker 鏡像,具有完整的包索引,大小只有5 MB!」

據說無處不在的 「Window 開始菜單」 文件也是大致相同的大小!我沒有驗證過,也不會進一步評論。

講真,希望你去了解一下這個創新的類 Unix 操作系統(如 Alpine Linux)的強大功能。

鎖定一切

再說一點,Alpine Linux 是(並不驚人)基於 BusyBox,這是一套著名的打包了 Linux 命令的集合,許多人不會意識到他們的寬頻路由器、智能電視,當然還有他們家庭中的物聯網設備就有它。

Alpine Linux 站點的「關於」頁面的評論中指出:

「Alpine Linux 的設計考慮到安全性。內核使用 grsecurity/PaX 的非官方移植進行了修補,所有用戶態二進位文件都編譯為具有堆棧保護的地址無關可執行文件(PIE)。 這些主動安全特性可以防止所有類別的零日漏洞和其它漏洞利用。」

換句話說,這些捆綁在 Alpine Linux 中的精簡二進位文件提供的功能通過了那些行業級安全工具篩選,以緩解緩衝區溢出攻擊所帶來的危害。

多隻襪子

你可能會問,為什麼當我們談及 Docker 的新操作系統時,容器的內部結構很重要?

那麼,你可能已經猜到,當涉及容器時,他們的目標是精簡。除非絕對必要,否則不包括任何東西。所以你可以放心地清理櫥櫃、花園棚子、車庫和襪子抽屜了。

Docker 的確因為它們的先見而獲得聲望。據報道,2 月初,Docker 聘請了 Alpine Linux 的主要推動者 Nathaniel Copa,他幫助將默認的官方鏡像庫從 Ubuntu 切換到 Alpine。Docker Hub 從新近精簡鏡像節省的帶寬受到了讚譽。

並且最新的情況是,這項工作將與最新的基於容器的操作系統相結合:Docker 的 LinuxKit。

要說清楚的是 LinuxKit 註定不會代替 Alpine,而是位於容器下層,並作為一個完整的操作系統出現,你可以高興地啟動你的運行時守護程序(在這種情況下,是生成你的容器的Docker 守護程序 )。

原子計劃

經過精心調試的宿主機絕對不是一件新事物(以前提到過嵌入式 Linux 的家用設備)。在過去幾十年中一直在優化 Linux 的天才在某個時候意識到底層的操作系統才是快速生產含有大量容器主機的關鍵。

例如,強大的紅帽長期以來一直在出售已經貢獻給 Project Atomic 的 紅帽 Atomic 。後者繼續解釋:

「基於 Red Hat Enterprise Linux 或 CentOS 和 Fedora 項目的成熟技術,Atomic Host 是一個輕量級的、不可變的平台,其設計目的僅在於運行容器化應用程序。」

將底層的、不可變的 Atomic OS 作為紅帽的 OpenShift PaaS(平台即服務)產品推薦有一個很好理由:它最小化、高性能、尖端。

特性強大

在 Docker 關於 LinuxKit 的公告中,「少即是多」的口號是顯而易見的。實現 LinuxKit 願景的項目顯然是不小的事業,它由 Docker 老將和 Unikernel 的主管 Justin Cormack 指導,並與 HPE、Intel、ARM、IBM 和 Microsoft LinuxKit 合作,可以運行在從大型機到基於物聯網的冰櫃之中。

LinuxKit 的可配置性、可插拔性和可擴展性將吸引許多尋求建立其服務基準的項目。通過開源項目,Docker 明智地邀請每個人全身心地投入其功能開發,隨著時間的推移,它會像好的乳酪那樣成熟。

布丁作證

按照該發布消息中所承諾的,那些急於使用新系統的人不用再等待了。如果你準備著手 LinuxKit,你可以從 GitHub 中開始:LinuxKit。

在 GitHub 頁面上有關於如何啟動和運行一些功能的指導。

時間允許的話我準備更加深入研究 LinuxKit。對有爭議的 Kubernetes 與 Docker Swarm 編排功能對比會是有趣的嘗試。此外,我還想看到內存佔用、啟動時間和磁碟空間使用率的基準測試。

如果該承諾可靠,則作為容器運行的可插拔系統服務是構建操作系統的迷人方式。Docker 在博客)中提到:「因為 LinuxKit 是原生容器,它有一個非常小的尺寸 - 35MB,引導時間非常小。所有系統服務都是容器,這意味著可以刪除或替換所有的內容。」

我不知道你覺得怎麼樣,但這非常符合我的胃口。

呼叫警察

除了我站在 DevSecOps 角度看到的功能,我會看看其對安全的承諾。

Docker 在他們的博客上引用來自 NIST(國家標準與技術研究所)的話:

「安全性是最高目標,這與 NIST 在其《應用程序容器安全指南》草案中說明的保持一致:『使用容器專用操作系統而不是通用操作系統來減少攻擊面。當使用專用容器操作系統時,攻擊面通常比通用操作系統小得多,因此攻擊和危及專用容器操作系統的機會較少。』」

可能最重要的容器到主機和主機到容器的安全創新是將系統容器(系統服務)完全地沙箱化到自己的非特權空間中,而只給它們需要的外部訪問。

通過內核自我保護項目(KSPP)的協作來實現這一功能,我很滿意 Docker 開始專註於一些非常值得的東西上。對於那些不熟悉的 KSPP 的人而言,它存在理由如下:

「啟動這個項目的的假設是內核 bug 的存在時間很長,內核必須設計成可以防止這些缺陷的危害。」

KSPP 網站進一步表態:

「這些努力非常重要並還在進行,但如果我們要保護我們的十億 Android 手機、我們的汽車、國際空間站,還有其他運行 Linux 的產品,我們必須在上游的 Linux 內核中建立積極的防禦性技術。我們需要內核安全地出錯,而不只是安全地運行。」

而且,如果 Docker 最初只是在 LinuxKit 前進了一小步,那麼隨著時間的推移,成熟度帶來的好處可能會在容器領域中取得長足的進步。

終點還遠

像 Docker 這樣不斷發展壯大的巨頭無論在哪個方向上取得巨大的飛躍都將會用戶和其他軟體帶來益處。

我鼓勵所有對 Linux 感興趣的人密切關注這個領域。

via: DevSecOps - Containers and Linux Security - by the author of Hack and Defend - Chris Binnie

作者:Chris Binnie 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

推薦閱讀:

Ubuntu 17.10下Matlab 2016b安裝教程

TAG:Linux | 容器虚拟化 | Docker |