Rekomendasi kanggo mlaku Buildah nang wadhah

Apa kaendahan decoupling runtime wadhah menyang komponen perkakas kapisah? Utamane, alat kasebut bisa diwiwiti digabungake supaya bisa nglindhungi saben liyane.

Rekomendasi kanggo mlaku Buildah nang wadhah

Akeh wong sing kepincut karo ide kanggo nggawe gambar OCI sing ana ing njero Kubernetes utawa sistem sing padha. Ayo kita duwe CI / CD sing terus-terusan ngumpulake gambar, banjur kaya Red Hat OpenShift/ Kubernetes bakal cukup migunani ing syarat-syarat mbukak balancing sak mbangun. Nganti saiki, umume wong mung menehi akses kontainer menyang soket Docker lan ngidini dheweke mbukak perintah mbangun docker. Sawetara taun kepungkur kita nuduhakesing iki banget insecure, nyatane, iku malah Samsaya Awon saka menehi sandi root utawa sudo.

Mula wong-wong terus-terusan ngupayakake Buildah ing wadhah. Ing cendhak, kita digawe conto carane, ing mratelakake panemume, iku paling apik kanggo mbukak Buildah nang wadhah, lan dikirim gambar sing cocog ing quay.io/buildah. Ayo miwiti ...

imbuhan

Gambar kasebut dibangun saka Dockerfiles, sing bisa ditemokake ing gudang Buildah ing folder kasebut mbangun gambar.
Ing kene kita bakal nimbang versi stabil saka Dockerfile.

# stable/Dockerfile
#
# Build a Buildah container image from the latest
# stable version of Buildah on the Fedoras Updates System.
# https://bodhi.fedoraproject.org/updates/?search=buildah
# This image can be used to create a secured container
# that runs safely with privileges within the container.
#
FROM fedora:latest

# Don't include container-selinux and remove
# directories used by dnf that are just taking
# up space.
RUN yum -y install buildah fuse-overlayfs --exclude container-selinux; rm -rf /var/cache /var/log/dnf* /var/log/yum.*

# Adjust storage.conf to enable Fuse storage.
RUN sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf

Tinimbang OverlayFS, dileksanakake ing tingkat kernel Linux inang, kita nggunakake program ing wadhah kasebut sekring-overlay, amarga saiki OverlayFS mung bisa dipasang yen sampeyan menehi ijin SYS_ADMIN nggunakake kemampuan Linux. Lan kita pengin mbukak wadhah Buildah tanpa hak istimewa root. Fuse-overlay dianggo kanthi cepet lan nduweni kinerja sing luwih apik tinimbang driver panyimpenan VFS. Elinga yen nalika mbukak wadhah Buildah sing nggunakake Fuse, sampeyan kudu nyedhiyakake piranti / dev / fuse.

podman run --device /dev/fuse quay.io/buildahctr ...
RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock

Sabanjure kita nggawe direktori kanggo panyimpenan tambahan. Wadhah / panyimpenan ndhukung konsep nyambungake toko gambar mung diwaca tambahan. Contone, sampeyan bisa ngatur area panyimpenan numpuki ing siji mesin, lan banjur nggunakake NFS kanggo Gunung panyimpenan iki ing mesin liyane lan nggunakake gambar saka iku tanpa download liwat narik. We kudu panyimpenan iki supaya bisa nyambung sawetara panyimpenan gambar saka inang minangka volume lan digunakake nang wadhah.

# Set up environment variables to note that this is
# not starting with user namespace and default to
# isolate the filesystem with chroot.
ENV _BUILDAH_STARTED_IN_USERNS="" BUILDAH_ISOLATION=chroot

Pungkasan, kanthi nggunakake variabel lingkungan BUILDAH_ISOLATION, kita ngandhani wadhah Buildah kanggo mbukak kanthi isolasi chroot kanthi standar. Insulasi tambahan ora dibutuhake ing kene, amarga kita wis nggarap wadhah. Supaya Buildah bisa nggawe wadhah sing dipisahake karo namespace dhewe, hak istimewa SYS_ADMIN dibutuhake, sing bakal mbutuhake aturan SELinux lan SECCOMP wadhah sing santai, sing bertentangan karo pilihan kita kanggo mbangun saka wadhah sing aman.

Mlaku Buildah ing njero wadhah

Diagram gambar wadhah Buildah sing dibahas ing ndhuwur ngidini sampeyan kanthi fleksibel macem-macem cara ngluncurake wadhah kasebut.

Kacepetan mungsuh safety

Keamanan komputer tansah dadi kompromi antarane kacepetan proses lan jumlah proteksi sing dibungkus. Pernyataan iki uga bener nalika ngrakit kontaner, mula ing ngisor iki kita bakal nimbang opsi kanggo kompromi kasebut.

Gambar wadhah sing dibahas ing ndhuwur bakal nyimpen panyimpenan ing /var/lib/containers. Mulane, kita kudu masang isi menyang folder iki, lan carane nindakake iki bakal banget mengaruhi kacepetan mbangun gambar wadhah.

Ayo dipikirake telung pilihan.

Pilihan 1. Yen keamanan maksimum dibutuhake, banjur kanggo saben wadhah sampeyan bisa nggawe folder dhewe kanggo wadhah / gambar lan nyambung menyang wadhah liwat volume-mount. Kajaba iku, selehake direktori konteks ing wadhah kasebut, ing folder / build:

# mkdir /var/lib/containers1
# podman run -v ./build:/build:z -v /var/lib/containers1:/var/lib/containers:Z quay.io/buildah/stable
buildah  -t image1 bud /build
# podman run -v /var/lib/containers1:/var/lib/containers:Z quay.io/buildah/stable buildah  push  image1 registry.company.com/myuser
# rm -rf /var/lib/containers1

Keamanan. Buildah sing mlaku ing wadhah kasebut nduweni keamanan maksimal: ora diwenehi hak istimewa root kanthi nggunakake kapabilitas, lan kabeh watesan SECOMP lan SELinux ditrapake. 0: 100000.

Kinerja Nanging kinerja ing kene minimal, amarga gambar saka registri wadhah disalin menyang host saben wektu, lan caching ora bisa digunakake. Nalika ngrampungake karyane, wadhah Buildah kudu ngirim gambar menyang pendaptaran lan numpes isi ing host. Ing wektu sabanjure gambar wadhah dibangun, kudu diundhuh saka registri maneh, amarga ing wektu kasebut ora bakal ana apa-apa ing host.

Pilihan 2. Yen sampeyan butuh kinerja tingkat Docker, sampeyan bisa masang wadhah / panyimpenan inang langsung menyang wadhah kasebut.

# podman run -v ./build:/build:z -v /var/lib/containers:/var/lib/containers --security-opt label:disabled quay.io/buildah/stable buildah  -t image2 bud /build
# podman run -v /var/lib/containers:/var/lib/containers --security-opt label:disabled  quay.io/buildah/stable buildah push image2 registry.company.com/myuser

Keamanan. Iki minangka cara sing paling ora aman kanggo mbangun kontaner amarga ngidini wadhah kasebut ngowahi panyimpenan host lan duweni potensi menehi gambar jahat marang Podman utawa CRI-O. Kajaba iku, sampeyan kudu mateni pamisahan SELinux supaya proses ing wadhah Buildah bisa sesambungan karo panyimpenan ing host. Elinga yen opsi iki isih luwih apik tinimbang soket Docker amarga wadhah kasebut dikunci kanthi fitur keamanan sing isih ana lan ora bisa mbukak wadhah ing host.

Kinerja Ing kene maksimal, amarga caching digunakake kanthi lengkap. Yen Podman utawa CRI-O wis ndownload gambar sing dibutuhake menyang host, proses Buildah ing wadhah kasebut ora kudu didownload maneh, lan mbangun sabanjure adhedhasar gambar iki uga bisa njupuk apa sing dibutuhake saka cache. .

Pilihan 3. Inti saka metode iki yaiku nggabungake sawetara gambar dadi siji proyek kanthi folder umum kanggo gambar wadhah.

# mkdir /var/lib/project3
# podman run --security-opt label_level=s0:C100, C200 -v ./build:/build:z 
-v /var/lib/project3:/var/lib/containers:Z quay.io/buildah/stable buildah  -t image3 bud /build
# podman run --security-opt label_level=s0:C100, C200 
-v /var/lib/project3:/var/lib/containers quay.io/buildah/stable buildah push image3  registry.company.com/myuser

Ing conto iki, kita ora mbusak folder project (/var/lib/project3) antarane mlaku, supaya kabeh mbangun sakteruse ing project entuk manfaat saka caching.

Keamanan. Soko ing antarane opsi 1 lan 2. Ing tangan siji, kontaner ora duwe akses menyang isi ing inang lan, patut, ora bisa mlebukake soko ala menyang panyimpenan gambar Podman / CRI-O. Ing sisih liya, minangka bagΓ©an saka desain, wadhah bisa ngganggu ngumpulake wadhah liyane.

Kinerja Ing kene luwih elek tinimbang nggunakake cache sing dienggo bareng ing tingkat host, amarga sampeyan ora bisa nggunakake gambar sing wis diundhuh nggunakake Podman / CRI-O. Nanging, yen Buildah ndownload gambar kasebut, gambar kasebut bisa digunakake ing bangunan sabanjure ing proyek kasebut.

panyimpenan tambahan

Π£ wadhah / panyimpenan Ana sing kelangan minangka toko tambahan (toko tambahan), amarga nalika mbukak lan mbangun kontaner, mesin wadhah bisa nggunakake toko gambar eksternal ing mode overlay mung diwaca. Ateges, sampeyan bisa nambah siji utawa luwih panyimpenan mung diwaca menyang file storage.conf supaya nalika sampeyan miwiti wadhah, mesin wadhah katon kanggo gambar sing dikarepake. Kajaba iku, bakal ndownload gambar saka registri mung yen ora ditemokake ing panyimpenan kasebut. Mesin wadhah mung bisa nulis menyang panyimpenan sing bisa ditulis...

Yen sampeyan nggulung munggah lan ndeleng Dockerfile sing digunakake kanggo mbangun gambar quay.io/buildah/stable, ana garis kaya iki:

# Adjust storage.conf to enable Fuse storage.
RUN sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf
RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock

Ing baris pisanan, kita ngowahi /etc/containers/storage.conf nang gambar wadhah, ngandhani driver panyimpenan nggunakake "additionalimagestores" ing folder /var/lib/shared. Lan ing baris sabanjure kita nggawe folder sing dienggo bareng lan nambah sawetara file kunci supaya ora ana penyalahgunaan saka wadhah / panyimpenan. Ateges, kita mung nggawe toko gambar wadhah kosong.

Yen sampeyan masang wadhah / panyimpenan ing tingkat sing luwih dhuwur tinimbang folder iki, Buildah bakal bisa nggunakake gambar kasebut.

Saiki ayo bali menyang Pilihan 2 sing dibahas ing ndhuwur, nalika wadhah Buildah bisa maca lan nulis menyang wadhah / nyimpen ing host lan, kanthi mangkono, nduweni kinerja maksimal amarga gambar caching ing tingkat Podman / CRI-O, nanging nyedhiyakake keamanan minimal. amarga bisa nulis langsung menyang panyimpenan. Saiki ayo nambah panyimpenan tambahan ing kene lan entuk sing paling apik ing jagad iki.

# mkdir /var/lib/containers4
# podman run -v ./build:/build:z -v /var/lib/containers/storage:/var/lib/shared:ro -v  /var/lib/containers4:/var/lib/containers:Z  quay.io/buildah/stable 
 buildah  -t image4 bud /build
# podman run -v /var/lib/containers/storage:/var/lib/shared:ro  
-v >/var/lib/containers4:/var/lib/containers:Z quay.io/buildah/stable buildah push image4  registry.company.com/myuser
# rm -rf /var/lib/continers4

Elinga yen host /var/lib/containers/storage wis dipasang ing /var/lib/shared nang wadhah ing mode mung diwaca. Mulane, nggarap wadhah, Buildah bisa nggunakake gambar apa wae sing sadurunge diundhuh nggunakake Podman / CRI-O (halo, kacepetan), nanging mung bisa nulis menyang panyimpenan dhewe (hello, keamanan). Elinga uga yen iki rampung tanpa mateni pamisahan SELinux kanggo wadhah kasebut.

Suasana penting

Ing kahanan apa wae, sampeyan ora kudu mbusak gambar saka repositori dhasar. Yen ora, wadhah Buildah bisa nabrak.

Lan iki ora kabeh kaluwihan

Kemungkinan panyimpenan tambahan ora diwatesi ing skenario ing ndhuwur. Contone, sampeyan bisa nyelehake kabeh gambar wadhah ing panyimpenan jaringan sambungan lan menehi akses menyang kabeh wadhah Buildah. Ayo kita duwe atusan gambar sing sistem CI/CD biasa digunakake kanggo nggawe gambar wadhah. Kita musataken kabeh gambar kasebut ing siji host panyimpenan banjur, nggunakake alat panyimpenan jaringan sing disenengi (NFS, Gluster, Ceph, ISCSI, S3 ...), kita mbukak akses umum menyang panyimpenan iki menyang kabeh simpul Buildah utawa Kubernetes.

Saiki cukup kanggo masang panyimpenan jaringan iki menyang wadhah Buildah ing /var/lib/shared lan mung - wadhah Buildah ora kudu ndownload gambar liwat narik. Mangkono, kita mbuwang fase pra-populasi lan langsung siyap kanggo nggulung kontaner.

Lan mesthi, iki bisa digunakake ing sistem Kubernetes langsung utawa infrastruktur wadah kanggo mbukak lan mbukak kontaner ing ngendi wae tanpa ngundhuh gambar. Kajaba iku, registri wadhah, nampa panjaluk push kanggo ngunggah gambar sing dianyari, kanthi otomatis bisa ngirim gambar iki menyang panyimpenan jaringan sing dienggo bareng, sing langsung kasedhiya kanggo kabeh simpul.

Gambar kontainer kadhangkala bisa nganti pirang-pirang gigabyte ukurane. Fungsi panyimpenan tambahan ngidini sampeyan ngindhari kloning gambar kasebut ing simpul lan nggawe wadah sing diluncurake meh cepet.

Kajaba iku, saiki kita nggarap fitur anyar sing diarani overlay volume mounts, sing bakal nggawe wadhah bangunan luwih cepet.

kesimpulan

Mlaku Buildah ing wadhah ing Kubernetes / CRI-O, Podman, utawa malah Docker bisa ditindakake, prasaja, lan luwih aman tinimbang nggunakake docker.socket. Kita wis nambah banget keluwesan nggarap gambar, supaya sampeyan bisa mbukak ing macem-macem cara kanggo ngoptimalake imbangan antarane keamanan lan kinerja.

Fungsi panyimpenan tambahan ngidini sampeyan nyepetake utawa malah ngilangi download gambar menyang simpul.

Source: www.habr.com

Add a comment