Линуксийн минималист түгээлт болох Bottlerocket нь контейнер ажиллуулахад зориулагдсан. Түүний тухай хамгийн чухал зүйл

Линуксийн минималист түгээлт болох Bottlerocket нь контейнер ажиллуулахад зориулагдсан. Түүний тухай хамгийн чухал зүйл

Амазон компани зарласан эцсийн хувилбарын тухай Савны сав - савыг ажиллуулах, тэдгээрийг үр дүнтэй удирдах тусгай түгээлт.

Bottlerocket (дашрамд хэлэхэд, жижиг гар хийцийн хар нунтаг пуужинд өгсөн нэр) нь чингэлэгт зориулсан анхны үйлдлийн систем биш боловч AWS үйлчилгээтэй анхдагч интеграцийн ачаар өргөн тархсан байх магадлалтай. Хэдийгээр систем нь Amazon үүлэн дээр төвлөрсөн боловч нээлттэй эх код нь үүнийг хаана ч бий болгох боломжийг олгодог: дотооддоо сервер дээр, Raspberry Pi дээр, ямар ч өрсөлдөгч үүлэнд, тэр ч байтугай контейнергүй орчинд.

Энэ нь Red Hat-ийн булсан CoreOS түгээлтийн бүрэн зохистой орлуулалт юм.

Үнэн хэрэгтээ Amazon Web Services хэлтэс нь Amazon Linux-тэй болсон бөгөөд саяхан хоёр дахь хувилбараа гаргасан: энэ нь Docker контейнер эсвэл Linux KVM, Microsoft Hyper-V, VMware-тай ажиллах боломжтой ерөнхий зориулалтын түгээлт юм. ESXi гипервизорууд. Үүнийг AWS үүлэн дээр ажиллуулахаар оновчтой болгосон боловч Bottlerocket-г гаргаснаар хүн бүр илүү аюулгүй, орчин үеийн, бага нөөц ашигладаг шинэ систем рүү шинэчлэхийг уриалж байна.

AWS Bottlerocket-ийг зарлалаа 2020 оны 3 дугаар сард. Тэрээр CoreOS, Rancher OS болон Project Atomic-ийг урам зориг өгөх эх сурвалж болгон дурдаж, энэ нь анхны "контейнерд зориулсан Linux" биш гэдгийг тэр даруй хүлээн зөвшөөрсөн. Үйлдлийн систем нь "Амазон-ын хэмжээнд үйлдвэрлэлийн үйлчилгээг удаан хугацаанд ажиллуулж сурсан сургамж, сүүлийн зургаан жилийн хугацаанд чингэлэг хэрхэн ажиллуулах талаар олж авсан туршлага" гэж хөгжүүлэгчид бичжээ.

Хэт минимализм

Линукс нь контейнер ажиллуулахад шаардлагагүй бүх зүйлээс хасагдсан. Энэхүү загвар нь компанийн үзэж байгаагаар халдлагын гадаргууг багасгадаг.

Энэ нь үндсэн систем дээр цөөн тооны багц суулгасан гэсэн үг бөгөөд энэ нь OS-ийн засвар үйлчилгээ, шинэчлэлтийг хөнгөвчлөхөөс гадна хараат байдлаас үүдэлтэй асуудлын магадлалыг бууруулж, нөөцийн хэрэглээг бууруулдаг. Үндсэндээ энд бүх зүйл тусдаа саванд ажилладаг бөгөөд үндсэн систем нь бараг нүцгэн байдаг.

Амазон мөн бүх бүрхүүл, орчуулагчийг устгаж, тэдгээрийг ашиглах, эсвэл хэрэглэгчид санамсаргүйгээр давуу эрхээ нэмэгдүүлэх эрсдлийг арилгасан. Минимализм, аюулгүй байдлын үүднээс үндсэн зураг нь тушаалын бүрхүүл, SSH сервер эсвэл Python гэх мэт тайлбарласан хэлийг агуулаагүй болно. Администраторын хэрэгслийг тусдаа үйлчилгээний саванд байрлуулсан бөгөөд энэ нь анхдагчаар идэвхгүй байдаг.

Системийг API болон зохион байгуулалтаар дамжуулан хоёр аргаар удирддаг.

Тусдаа програм хангамжийн хэсгүүдийг шинэчилдэг багц менежерийн оронд Bottlerocket файлын системийн бүрэн дүрсийг татаж аваад дахин ачаална. Ачаалал бүтэлгүйтвэл автоматаар буцаах ба ажлын ачаалал алдаа гарвал буцаалтыг гараар өдөөж болно (API-ээр дамжуулан тушаал).

Хүрээ TUF (Шинэчлэх хүрээ) зураг дээр суурилсан шинэчлэлтүүдийг өөр эсвэл "салгагдаагүй" хуваалтуудад татаж авдаг. Системд хоёр дискний хуваалт хуваарилагдсан бөгөөд тэдгээрийн нэг нь идэвхтэй системийг агуулдаг бөгөөд шинэчлэлтийг хоёр дахь хэсэгт хуулж авдаг. Энэ тохиолдолд үндсэн хуваалт нь зөвхөн унших горимд суурилагдсан бөгөөд хуваалт /etc RAM-д файлын системд суурилуулсан tmpfs дахин эхлүүлсний дараа анхны төлөвийг нь сэргээнэ. Тохиргооны файлуудыг шууд өөрчлөх /etc дэмжигдээгүй: тохиргоог хадгалахын тулд та API ашиглах эсвэл функцийг тусдаа саванд шилжүүлэх хэрэгтэй.

Линуксийн минималист түгээлт болох Bottlerocket нь контейнер ажиллуулахад зориулагдсан. Түүний тухай хамгийн чухал зүйл
API шинэчлэх схем

Аюулгүй байдал

Контейнерууд нь Линуксийн цөмийн стандарт механизмууд - бүлгүүд, нэрийн орон зай, seccomp-ээр бүтээгдсэн бөгөөд албадан нэвтрэх хяналтын систем, өөрөөр хэлбэл нэмэлт тусгаарлалтанд ашиглагддаг. SELinux "хэрэгжүүлэх" горимд.

Анхдагчаар бол контейнер болон цөмийн хооронд нөөцийг хуваалцах бодлогыг идэвхжүүлсэн. Хоёртын файлууд нь хэрэглэгч эсвэл программыг гүйцэтгэхээс урьдчилан сэргийлэхийн тулд тугаар хамгаалагдсан байдаг. Хэрэв хэн нэгэн файлын системд нэвтэрсэн тохиолдолд Bottlerocket нь хийсэн өөрчлөлтийг шалгах, хянах хэрэгслийг санал болгодог.

"Баталгаажсан ачаалах" горим нь төхөөрөмж-mapper-verity функцээр хэрэгждэг (dm - үнэн), ачаалах үед root хуваалтын бүрэн бүтэн байдлыг шалгадаг. AWS нь dm-verity-ийг "Системийн үндсэн программ хангамжийг дарж бичих гэх мэт үйлдлийн систем дээр хортой програм ажиллуулахаас сэргийлэхийн тулд бүрэн бүтэн байдлыг шалгадаг Линуксийн цөмийн онцлог" гэж тодорхойлсон.

Мөн системд шүүлтүүр байдаг eGMP (өргөтгөсөн BPF, Алексей Старовойтов боловсруулсан), энэ нь цөмийн модулиудыг доод түвшний системийн үйл ажиллагаанд илүү найдвартай BPF програмаар солих боломжийг олгодог.

Гүйцэтгэлийн загвар
Хэрэглэгчийн тодорхойлсон
Эмхэтгэл
Аюулгүй байдал
Алдаа гарах горим
Нөөцөд хандах

Хэрэглэгч
даалгавар
Хэрэв тийм бол
ямар ч
хэрэглэгчийн эрх
гүйцэтгэлийг тасалдуулах
системийн дуудлага, алдаа

Гол нь
даалгавар
ямар ч
статик
ямар ч
цөмийн сандрал
шулуун

GMP
үйл явдал
Хэрэв тийм бол
JIT, CO-RE
баталгаажуулалт, JIT
алдааны мэдэгдэл
хязгаарлагдмал туслахууд

BPF нь энгийн хэрэглэгчийн эсвэл цөмийн түвшний кодоос юугаараа ялгаатай вэ эх сурвалж

AWS-ийн хэлснээр Bottlerocket нь "захиргааны эрхтэй үйлдвэрлэлийн серверүүдтэй холбогдохоос сэргийлж аюулгүй байдлыг улам сайжруулдаг үйлдлийн загварыг ашигладаг" бөгөөд "хост тус бүрийг хянах нь хязгаарлагдмал байдаг том тархсан системд тохиромжтой".

Системийн администраторуудад администраторын савыг өгсөн. Гэхдээ AWS нь админыг Bottlerocket дотор ажиллах шаардлагагүй гэж боддог: "Тусдаа Bottlerocket-д нэвтрэх үйлдэл нь ховор үйлдлүүдэд зориулагдсан: дэвшилтэт дибаг хийх, алдааг олж засварлах," бичих хөгжүүлэгчид.

Зэв хэл

Цөмийн дээд хэсэгт байрлах үйлдлийн системийн багаж хэрэгсэл нь ихэвчлэн Rust дээр бичигдсэн байдаг. Энэ хэл нь мөн чанараараа байдаг санах ойд аюултай нэвтрэх магадлалыг бууруулдагТэгээд утас хоорондын уралдааны нөхцлийг арилгадаг.

Барилга барихдаа тугуудыг анхдагч байдлаар ашигладаг --enable-default-pie и --enable-default-ssp гүйцэтгэгдэх файлуудын хаягийн зайг санамсаргүй байдлаар идэвхжүүлэх (байрлалаас хамааралгүй гүйцэтгэх боломжтой, PIE) болон стек халих хамгаалалт.

C/C++ багцуудын хувьд нэмэлт тугуудыг оруулсан болно -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS и -fstack-clash-protection.

Rust болон C/C++-ээс гадна зарим багцуудыг Go дээр бичсэн байдаг.

AWS үйлчилгээтэй нэгтгэх

Ижил төрлийн контейнер үйлдлийн системүүдээс ялгаатай нь Amazon нь Bottlerocket-ийг AWS дээр ажиллаж, бусад AWS үйлчилгээнүүдтэй нэгтгэхийн тулд оновчтой болгосон явдал юм.

Хамгийн алдартай чингэлэг найруулагч бол Kubernetes тул AWS нь өөрийн Enterprise Kubernetes Service (EKS)-тай нэгтгэсэн. Оркестрийн хэрэгслүүд нь тусдаа хяналтын саванд ирдэг bottlerocket-control-container, энэ нь анхдагчаар идэвхжсэн бөгөөд API болон AWS SSM агентаар дамжуулан удирддаг.

Өмнө нь үүнтэй төстэй зарим санаачилга бүтэлгүйтсэнийг харгалзан Bottlerocket хөөрөх эсэх нь сонирхолтой байх болно. Жишээлбэл, Vmware-ийн PhotonOS нь нэхэмжлээгүй болж, RedHat CoreOS болон төслийг хаасан, энэ салбарт анхдагч гэж тооцогддог байсан.

Bottlerocket-ийг AWS үйлчилгээнд нэгтгэсэн нь энэ системийг өөрийн гэсэн өвөрмөц болгодог. Энэ нь магадгүй зарим хэрэглэгчид Bottlerocket-ийг CoreOS эсвэл Alpine гэх мэт бусад түгээлтүүдээс илүүд үзэх гол шалтгаан байж болох юм. Уг систем нь анх EKS болон ECS-тэй ажиллахаар бүтээгдсэн боловч энэ нь шаардлагагүй гэдгийг бид давтан хэлье. Нэгдүгээрт, Bottlerocket can өөрөө угсарна мөн үүнийг жишээ нь хост шийдэл болгон ашиглах. Хоёрдугаарт, EKS болон ECS хэрэглэгчид үйлдлийн системээ сонгох боломжтой хэвээр байх болно.

Bottlerocket эх кодыг Apache 2.0 лицензийн дагуу GitHub дээр нийтэлсэн. Хөгжүүлэгчид аль хэдийн хийсэн алдааны мэдээ болон функцийн хүсэлтэд хариу өгөх.

Сурталчилгааны эрх

VDSina санал болгодог Өдөр тутмын төлбөртэй VDS. Ямар ч үйлдлийн систем, түүний дотор өөрийн дүрсээс суулгах боломжтой. Сервер бүр 500 мегабитийн интернет сувагт холбогдсон бөгөөд DDoS халдлагаас үнэ төлбөргүй хамгаалагдсан!

Линуксийн минималист түгээлт болох Bottlerocket нь контейнер ажиллуулахад зориулагдсан. Түүний тухай хамгийн чухал зүйл

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх