Apa kaendahan decoupling runtime wadhah menyang komponen perkakas kapisah? Utamane, alat kasebut bisa diwiwiti digabungake supaya bisa nglindhungi saben liyane.
Akeh wong sing kepincut karo ide kanggo nggawe gambar OCI sing ana ing njero
Mula wong-wong terus-terusan ngupayakake Buildah ing wadhah. Ing cendhak, kita digawe
imbuhan
Gambar kasebut dibangun saka Dockerfiles, sing bisa ditemokake ing gudang Buildah ing folder kasebut
Ing kene kita bakal nimbang
# 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
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.
# 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
Π£
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