Rkt0.8釋出,引入Intel的虛擬化技術
今天,我們釋出rkt v0.8.0。Rkt是一個專為生產環境而設計的應用容器執行時環境,更加高效和安全。
Rkt v0.8.0帶來了很多安全上的更新,其中包括初步支援使用者名稱空間和使用硬體虛擬化來增強容器的隔離性。另外也引入了一系列的功能改進,如主機日誌整合、容器套接字啟用、改進的映象快取和速度提升。
Intel虛擬化技術對於rkt stage1的貢獻
得益於模組化設計,Rkt支援接入不同的執行引擎和容器化系統。這是通過階段體系架構(staged architecture)來實現的,其中第二階段(”stage1″)負責建立和啟動容器。當我們啟動rkt之後,預設情況下它將啟動一個單獨的階段stage 1,用來呼叫Linux cgoups和namespaces(這個組合通常稱為“Linux containers”)。
在英特爾工程師的幫助下,我們增加了一個新的利用虛擬化技術的rkt stage1執行時。這意味著在rkt下執行的應用,使用這個新的stage1可以像Linux的KVM管理程式使用的硬體特性一樣從主機核心層面進行隔離。
今年五月份,英特爾宣佈了這項用於rkt之上的概念驗證,作為Intel® Clear Containers利用硬體嵌入式虛擬化技術特性來更好的保護容器執行時和隔離應用的成果之一。我們非常激動的看到rkt正在漸漸成型,因為它驗證了我們做的一些早期設計原型,比如執行時階段和資料庫的理念。下面是Intel`s Open Source Technology Center的Arjan van de Ven說過的話:
“多虧rkt的基於階段的體系結構,Intel®Clear Containers team才能夠迅速的整合我們的工作,把進一步增強安全性的英特爾®虛擬化技術(Intel® VT-x)帶到容器生態中。我們非常高興能繼續與rkt社群共同工作,來實現我們在傳遞容器應用部署好處的同時使用硬體嵌入技術增強容器安全性的願景。”
自從五月份釋出原型以來,我們一直在與英特爾的團隊共同協作,來確保當使用虛擬化時諸如每個pod一個IP地址和卷組這些特性還是以原來的方式執行。今天rkt的釋出見證了這一功能完全融合,使得後端的lkvm是一流的stage1體驗。那麼,讓我們來試試吧!
在這個示例中,我們首先使用預設的cgroups/namespace-based stage1
執行一個pod。我們使用systemd-run啟動容器,這會動態構造一個單位檔案並啟動它。檢查這個單元的狀態會讓我們弄清楚在引擎下到底發生了什麼。
$ sudo systemd-run --uid=0 ./rkt run --private-net --port=client:2379 --volume data-dir,kind=host,source=/tmp/etcd coreos.com/etcd,version=v2.2.0-alpha.0 -- --advertise-client-urls="http://127.0.0.1:2379" --listen-client-urls="http://0.0.0.0:2379" Running as unit run-1377.service. $ systemctl status run-1377.service ● run-1377.service CGroup: /system.slice/run-1377.service ├─1378 stage1/rootfs/usr/bin/systemd-nspawn ├─1425 /usr/lib/systemd/systemd └─system.slice ├─etcd.service │ └─1430 /etcd └─systemd-journald.service └─1426 /usr/lib/systemd/systemd-journald
請注意,我們可以看到pod內的整個過程層次結構,包括systemd例項和etcd程式。
接著,我們通過新增--stage1-image
標籤在新的基於KVM的stage1下啟動這個容器:
$ sudo systemd-run -t --uid=0 ./rkt run --stage1-image=sha512-c5b3b60ed4493fd77222afcb860543b9 --private-net --port=client:2379 --volume data-dir,kind=host,source=/tmp/etcd2 coreos.com/etcd,version=v2.2.0-alpha.0 -- --advertise-client-urls="http://127.0.0.1:2379" --listen-client-urls="http://0.0.0.0:2379" ... $ systemctl status run-1505.service ● run-1505.service CGroup: /system.slice/run-1505.service └─1506 ./stage1/rootfs/lkvm
請注意,該程式層級到lkvm就結束了。這是因為整個pod現在是在KVM程式內執行,包括systemd程式和etcd程式:對主機系統而言,它就像一個虛擬機器程式。
通過在呼叫容器時新增一個標籤,我們就利用了公有云用來隔離租戶的KVM技術來隔離我們的應用容器,給主機上又加了一個安全層。
感謝來自英特爾的Piotr Skamruk、Paweł Pałucki、Dimitri John Ledkov、Arjan van de Ven的支援和付出。關於這個功能的更多細節請參考lkvm stage1 guide。
無縫整合主機級別日誌
在systemd主機上,日誌是預設的日誌聚合系統。隨著v0.8.0版本釋出,rkt現在能自動與主機日誌整合了,如果檢測到會提供一個systemd原生日誌管理體驗。如果需要體驗rkt產品的日誌,你僅僅需要新增一個機器區分符如-M rkt-$UUID
到主機的journalctl
命令。
舉個簡單例子,我們來體驗一下之前啟動的etcd容器的日誌。首先我們使用machinectl
列出rkt已經註冊到systemd的pods:
$ machinectl list MACHINE CLASS SERVICE rkt-bccc16ea-3e63-4a1f-80aa-4358777ce473 container nspawn rkt-c3a7fabc-9eb8-4e06-be1d-21d57cdaf682 container nspawn 2 machines listed.
我們可以看到etcd的pod列出的第二臺機器已經被systemd發現。現在我們使用jornal直接檢視pod的日誌:
$ sudo journalctl -M rkt-c3a7fabc-9eb8-4e06-be1d-21d57cdaf682 etcd[4]: 2015-08-18 07:04:24.362297 N | etcdserver: set the initial cluster version to 2.2.0
使用者名稱空間支援
這次的版本包括對使用者名稱空間初步支援來改善容器隔離。通過使用使用者名稱空間,應用程式在容器內可以以root使用者執行但是在容器外會被對映到非root使用者。
通過從系統的root使用者隔離容器增加了額外安全層。這個功能預覽版本還是實驗性的並且使用擁有特權的使用者名稱空間,但是rkt的未來版本會在這個版本的基礎上繼續改進並提供更多規則控制。
為了開啟使用者名稱空間,需要新增兩個標籤到我們最開始的例子:--private-users
和--no-overlay
。第一個是開啟使用者名稱空間功能,第二個是關閉rkt的overlayfs子系統,因為現階段它與使用者名稱空間不相容。
$ ./rkt run --no-overlay --private-users --private-net --port=client:2379 --volume data-dir,kind=host,source=/tmp/etcd coreos.com/etcd,version=v2.2.0-alpha.0 -- --advertise-client-urls="http://127.0.0.1:2379" --listen-client-urls="http://0.0.0.0:2379"`
我們通過使用curl
來驗證etcd的功能行並且檢查etcd資料目錄的許可權來確認這個功能正常,注意,從主機的角度看etcd成員目錄被一個id很高的使用者擁有:
$ curl 172.16.28.19:2379/version {"etcdserver":"2.2.0-alpha.0","etcdcluster":"2.2.0"}` $ ls -la /tmp/etcd total 0 drwxrwxrwx 3 core core 60 Aug 18 07:31 . drwxrwxrwt 10 root root 200 Aug 18 07:31 .. drwx------ 4 1037893632 1037893632 80 Aug 18 07:31 member`
增加使用者名稱空間支援是對我們讓rkt成為最安全的容器執行時目標邁出的重要一步,在接下來的版本我們會繼續努力改進這一功能。你可以檢視roadmap in this issue。
開放平臺專案進展
在rktv0.8.0版本我們進一步鞏固在安全強化方面的成果,並向1.0穩定版本和生產版本推進。我們還致力於確保容器生態系統繼續朝著大家釋出容器到“構建一次,簽名一次,到處執行。”路線前進。如今rkt是應用程式容器規範(appc)的實現,在未來我們希望rkt成為開放容器平臺(OCI)規範的實現。不管怎樣,OCI還在起步階段還有很多工作需要做。檢視OCI和AppC協調工作進展,你可以在OCI dev郵件列表閱讀更多內容。
向rkt貢獻
rkt的一個目標是使得rkt成為最安全的容器執行時,並且在我們向1.0版本演變中有還有許多令人興奮的工作要做。
原文連線:Using Virtual Machines to Improve Container Security with rkt v0.8.0(翻譯:朱高校)
相關文章
- 虛擬化四、KVM虛擬化技術
- 虛擬化技術(-)
- 虛擬化技術
- KVM 虛擬化技術
- Docker技術( 容器虛擬化技術 )Docker
- 什麼是虛擬化技術,為什麼要虛擬化技術?薦
- 虛擬化技術概述(一)
- 初識虛擬化技術
- 淺談GPU虛擬化技術(四)-GPU分片虛擬化GPU
- 淺談GPU虛擬化技術(四)- GPU分片虛擬化GPU
- 網路虛擬化技術棧
- 淺談GPU虛擬化技術:GPU圖形渲染虛擬化GPU
- 虛擬化中的連結克隆技術
- 虛擬化技術之kvm基礎
- 虛擬化技術(=)難點介紹
- 伺服器虛擬化技術的優點伺服器
- 融合通訊虛擬化技術的優勢
- 後端技術雜談6:白話虛擬化技術後端
- 伺服器虛擬化技術深度科普伺服器
- 虛擬化技術對比:Xen vs KVM
- 虛擬化技術之kvm虛擬機器建立工具qemu-kvm虛擬機
- 虛擬化技術的發展歷程簡述
- 虛擬化技術在智慧終端的應用
- 虛擬化應用才是技術發展的根本
- 在Linux中,什麼是虛擬化?並且列出常見的虛擬化技術。Linux
- win10虛擬化技術怎麼開啟_win10系統cpu虛擬化技術如何開啟Win10
- 虛擬現實技術
- 虛擬技術與雲
- 虛擬化技術之kvm虛擬機器建立工具virt-install虛擬機
- NFV關鍵技術:儲存虛擬化概述
- 硬核虛擬化技術 SR-IOV的原理及探索
- 虛擬化及雲端計算技術應用的思考
- 關於虛擬化技術的幾個問題薦
- 容器技術和虛擬機器技術的對比虛擬機
- 在Centos6.5上部署kvm虛擬化技術CentOS
- 雲端計算與虛擬化結合技術分析
- 網路虛擬化技術與應用場景
- 虛擬化不僅僅只是一種技術?薦