AWS發(fā)布Rust語(yǔ)言編寫的容器Linux發(fā)行版Bottlerocket

來源: 百家號(hào)
作者:蟲蟲搜奇
時(shí)間:2020-10-16
16759
日前著名云廠商亞馬遜宣布,發(fā)布自己的容器Linux發(fā)行版Bottlerocket。Bottlerocket立足于安全性,操作和規(guī)模管理,使用它能夠自動(dòng)管理數(shù)千個(gè)運(yùn)行容器的主機(jī)。

隨著我們的客戶越來越多地采用容器來運(yùn)行其工作負(fù)載,從頭開始設(shè)計(jì)以運(yùn)行容器的Linux發(fā)行版成了一種時(shí)尚,比如追求小巧Alpine,Redhat的CoreOS等操作系統(tǒng)用來跑容器。

日前著名云廠商亞馬遜宣布,發(fā)布自己的容器Linux發(fā)行版Bottlerocket。Bottlerocket立足于安全性,操作和規(guī)模管理,使用它能夠自動(dòng)管理數(shù)千個(gè)運(yùn)行容器的主機(jī)。

u=591856681,602331908&fm=173&app=25&f=JPEG.jpg

Bottlerocket,本質(zhì)上是一個(gè)新Linux發(fā)行版,用來跑容器。他內(nèi)置了安全性增強(qiáng)功能有助于簡(jiǎn)化安全性合規(guī)性,并提供事務(wù)更新機(jī)制使使用容器編排器自動(dòng)化操作系統(tǒng)更新并降低運(yùn)營(yíng)成本。

Bottlerocket目前已在GitHub創(chuàng)建開源組,并全開源。今天我們就一起來了解一下這個(gè)系統(tǒng)。

技術(shù)架構(gòu)

Bottlerocket的開發(fā)源于,Amazon AWS云中客戶如何使用Amazon Linux運(yùn)行容器以及從運(yùn)行服務(wù)(例如AWS Fargate)中學(xué)到的知識(shí)來設(shè)計(jì)和構(gòu)建的。在設(shè)計(jì)中,充分對(duì)Bottlerocket進(jìn)行了優(yōu)化,以提高安全性,性能并簡(jiǎn)化維護(hù)流程。

u=3410886866,547190617&fm=173&app=25&f=JPEG.jpg

最少組件、SELinux增強(qiáng)

Bottlerocket中只包含運(yùn)行容器所需的軟件,以減少安全攻擊面,從而提高了安全性。除了使用標(biāo)準(zhǔn)Linux內(nèi)核技術(shù)在容器化工作負(fù)載(例如控制組(cgroup),名稱空間和seccomp)之間實(shí)現(xiàn)隔離之外,還以強(qiáng)制模式使用安全性增強(qiáng)的Linux(SELinux)來增強(qiáng)容器與主機(jī)操作系統(tǒng)之間的隔離。

Device-mapper和eBPF

Bottlerocket使用Device-mapper的verity目標(biāo)(dm-verity),這是一種Linux內(nèi)核功能,可提供完整性檢查,以幫助防止攻擊者在操作系統(tǒng)上持續(xù)存在威脅,例如覆蓋核心系統(tǒng)軟件。

Bottlerocket Linux內(nèi)核中包括了eBPF,這減少了許多低級(jí)系統(tǒng)操作對(duì)內(nèi)核模塊的需求。

Rust開發(fā)

Bottlerocket的大部分內(nèi)容都是用Rust編寫的,Rust是一種現(xiàn)代編程語(yǔ)言,可幫助確保線程安全并防止與內(nèi)存相關(guān)的錯(cuò)誤,例如可能導(dǎo)致安全漏洞的緩沖區(qū)溢出。

隔離容器管理

Bottlerocket還通過阻止與生產(chǎn)服務(wù)器的管理連接來實(shí)施可進(jìn)一步提高安全性的操作模型。它適用于限制對(duì)單個(gè)主機(jī)的控制的大型分布式環(huán)境。

為了進(jìn)行調(diào)試,可以使用Bottlerocket的API運(yùn)行"管理容器"(通過用戶數(shù)據(jù)或AWS Systems Manager調(diào)用),然后使用SSH登錄以進(jìn)行高級(jí)調(diào)試和故障排除。admin容器是Amazon Linux 2容器映像,包含用于對(duì)Bottlerocket進(jìn)行故障排除和調(diào)試的實(shí)用程序,并以提升的特權(quán)運(yùn)行。它允許安裝和使用標(biāo)準(zhǔn)調(diào)試工具,例如traceroute,strace,tcpdump。登錄到單個(gè)Bottlerocket實(shí)例的行為旨在作為高級(jí)調(diào)試和故障排除的操作。

u=1242216797,2270247858&fm=173&app=25&f=JPEG.jpg

自動(dòng)更新

Bottlerocket通過使節(jié)點(diǎn)的管理和對(duì)集群中節(jié)點(diǎn)的自動(dòng)更新更加容易,從而大規(guī)模地提高了操作和可管理性。與旨在支持以各種格式打包的應(yīng)用程序的通用Linux發(fā)行版不同,Bottlerocket是專門為運(yùn)行容器而構(gòu)建的。對(duì)其他通用Linux發(fā)行版的更新是在逐個(gè)軟件包的基礎(chǔ)上應(yīng)用的,它們的軟件包之間的復(fù)雜依賴關(guān)系可能導(dǎo)致錯(cuò)誤,從而使流程難以實(shí)現(xiàn)自動(dòng)化。

操作靈活

Bottlerocke以原子方式應(yīng)用和回滾更新,這使得它們易于自動(dòng)化,從而減少了管理開銷并降低了運(yùn)營(yíng)成本。

Bottlerocket與容器編排器集成在一起,可以對(duì)主機(jī)進(jìn)行自動(dòng)修補(bǔ),以提高運(yùn)營(yíng)成本,可管理性和正常運(yùn)行時(shí)間。Bottlerocket支持與任何容器編排器集成,AWS提供的編譯版本可與Amazon EKS(具有一般可用性)和Amazon ECS(具有預(yù)覽功能)一起使用。

Bottlerocket入門

Bottlerocke支持不包括編排系統(tǒng)的,作為獨(dú)立的OS運(yùn)行進(jìn)行開發(fā)和測(cè)試用例,官方還是建議建議將其與容器編排系統(tǒng)結(jié)合使用,以充分利用其所有優(yōu)點(diǎn)。

最簡(jiǎn)單入門方法在AWS云中,使用AWS提供的Bottlerocket AMI與Amazon EKS或Amazon ECS結(jié)合使用。

可以通過使用AWS CLI查詢SSM來找到這些AMI的ID,如下所示。

要查找Bottlerocket aws-k8s-1.17變體的最新AMI ID,請(qǐng)運(yùn)行:

aws ssm get-parameter--region us-west-2

--name"/aws/service/bottlerocket/aws-k8s-1.17/x86_64/latest/image_id"

--query Parameter.Value--output text

要查找Bottlerocket aws-ecs-1變體的最新AMI ID,運(yùn)行:

aws ssm get-parameter--region us-west-2

--name"/aws/service/bottlerocket/aws-ecs-1/x86_64/latest/image_id"

--query Parameter.Value--output text

在上述兩個(gè)示例的命令,可以指定是否在另一個(gè)區(qū)域中操作改變區(qū)域,或從x86_64的改變架構(gòu)arm64如果使用Graviton-動(dòng)力實(shí)例。

得到AMI ID后,可以啟動(dòng)EC2實(shí)例并將其連接到現(xiàn)有的EKS或ECS群集。要使用Bottlerocket的Kubernetes變體連接到EKS集群,在啟動(dòng)EC2實(shí)例時(shí),需要提供如下用戶數(shù)據(jù):

[settings.kubernetes]

api-server="Your EKS API server endpoint here"

cluster-certificate="Your base64-encoded cluster certificate here"

cluster-name="Your cluster name here"

要使用Bottlerocket的ECS變體連接到ECS群集,可以提供以下用戶數(shù)據(jù):

[settings.ecs]

cluster="Your cluster name here"

自定義編譯Bottlerocket

除了使用AWS提供的Bottlerocket AMI外,還可以使用自己的更改生成定制的Bottlerocket構(gòu)建。

作為前提步驟,首先創(chuàng)建一個(gè)Rust開發(fā)環(huán)境。建議使用安裝最新的穩(wěn)定Rust版本。要組織構(gòu)建任務(wù),要使用cargo-make和cargo-deny:

cargo install cargo-make

cargo install cargo-deny--version 0.6.2

Bottlerocket使用Docker來協(xié)調(diào)打包和映像構(gòu)建。建議使用Docker 19.03或更高版本。需要安裝Docker并以您的用戶帳戶運(yùn)行,以便能夠訪問Docker API。通常可以通過將用戶帳戶添加到docker組來啟用此功能。

要生成映像,請(qǐng)?jiān)诟脑创a后運(yùn)行:

cargo make

所有軟件包將依次構(gòu)建,然后編譯目錄中的img文件build。

接下來,要注冊(cè)在Amazon EC2上使用的Bottlerocket AMI,需要設(shè)置aws-cli并運(yùn)行:

cargo make ami

開源社區(qū)

Bottlerocket已經(jīng)完全開源,以使用戶能夠?qū)τ糜谶\(yùn)行其基礎(chǔ)架構(gòu)的操作系統(tǒng)進(jìn)行自定義(例如,與自定義協(xié)調(diào)器/內(nèi)核/容器運(yùn)行時(shí)集成),將其提交上游并生成自定義版本。所有設(shè)計(jì)文檔,代碼,構(gòu)建工具,測(cè)試和文檔都將托管在GitHub上。使用GitHub的錯(cuò)誤和功能跟蹤系統(tǒng)進(jìn)行項(xiàng)目管理。支持可以使用標(biāo)準(zhǔn)GitHub工作流程查看并為Bottlerocket源代碼做貢獻(xiàn)。構(gòu)建,發(fā)行和測(cè)試基礎(chǔ)結(jié)構(gòu)的可用性使生成包含其更改的自定義構(gòu)建變得容易。ISV合作伙伴可以在客戶更新到最新版本的Bottlerocket之前快速驗(yàn)證其軟件。

Bottlerocket包括標(biāo)準(zhǔn)的開放源代碼組件,例如Linux內(nèi)核,容器化容器運(yùn)行時(shí)等。特定于Bottlerocket的附加項(xiàng)著重于可靠的更新以及基于API的機(jī)制來進(jìn)行配置更改和觸發(fā)更新/回滾??梢赃x擇根據(jù)Apache 2.0許可證或MIT許可證來許可Bottlerocket代碼。諸如Linux內(nèi)核之類的底層第三方代碼仍受其原始許可證的約束。如果修改Bottlerocket,則可以根據(jù)策略準(zhǔn)則使用"Bottlerocket Remix"來引用構(gòu)建。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于百家號(hào),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家