Rakkomandazzjonijiet għat-tħaddim ta' Buildah ġewwa kontenitur

X'inhi s-sbuħija tad-diżakkoppjar tar-runtime tal-kontenitur f'komponenti ta 'għodda separati? B'mod partikolari, dawn l-għodod jistgħu jibdew jingħaqdu sabiex jipproteġu lil xulxin.

Rakkomandazzjonijiet għat-tħaddim ta' Buildah ġewwa kontenitur

Ħafna nies huma attirati mill-idea li jibnu immaġini OCI fil-kontejners ġewwa Kubernetes jew sistema simili. Ejja ngħidu li għandna CI/CD li kontinwament jiġbor immaġini, imbagħad xi ħaġa simili RedHat OpenShift/ Kubernetes ikun pjuttost utli f'termini ta 'ibbilanċjar tat-tagħbija waqt il-bini. Sa ftit ilu, ħafna nies sempliċement taw lill-kontenituri aċċess għal socket Docker u ħallewhom imexxu l-kmand tal-bini tad-docker. Diversi snin ilu urejnali dan huwa inċert ħafna, fil-fatt, huwa saħansitra agħar milli tagħti għeruq jew sudo mingħajr password.

Huwa għalhekk li n-nies kontinwament jippruvaw imexxu Buildah f'kontenitur. Fil-qosor, ħloqna eżempju kif, fl-opinjoni tagħna, huwa aħjar li tmexxi Buildah ġewwa kontenitur, u tpoġġi l-immaġini korrispondenti fuq quay.io/buildah. Ejja nibdew...

aġġustament

Dawn l-immaġini huma mibnija minn Dockerfiles, li jistgħu jinstabu fir-repożitorju Buildah fil-folder buildahimage.
Hawnhekk se nikkunsidraw verżjoni stabbli ta '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

Minflok OverlayFS, implimentat fil-livell tal-kernel Linux ospitanti, nużaw il-programm ġewwa l-kontenitur fjus-overlay, għax bħalissa OverlayFS jista' jintramaw biss jekk tagħtiha permessi SYS_ADMIN billi tuża l-kapaċitajiet tal-Linux. U rridu nħaddmu l-kontenituri Buildah tagħna mingħajr ebda privileġġ ta 'għeruq. Fjus-overlay jaħdem pjuttost malajr u għandu prestazzjoni aħjar mis-sewwieq tal-ħażna VFS. Jekk jogħġbok innota li meta tħaddem kontenitur Buildah li juża Fuse, trid tipprovdi l-apparat /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

Sussegwentement noħolqu direttorju għal ħażna addizzjonali. Kontenitur/ħażna jappoġġja l-kunċett tal-konnessjoni ta' ħwienet tal-immaġni addizzjonali li jinqraw biss. Pereżempju, tista 'tikkonfigura żona ta' ħażna ta 'overlay fuq magna waħda, u mbagħad tuża NFS biex timmonta din il-ħażna fuq magna oħra u tuża immaġini minnha mingħajr ma tniżżel permezz ta' pull. Neħtieġu din il-ħażna sabiex inkunu nistgħu nikkonnettjaw xi ħażna ta 'immaġni mill-host bħala volum u nużawha ġewwa l-kontenitur.

# 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

Fl-aħħarnett, billi nużaw il-varjabbli tal-ambjent BUILDAH_ISOLATION, qed ngħidu lill-kontenitur Buildah biex jaħdem b'iżolament chroot awtomatikament. Insulazzjoni addizzjonali mhix meħtieġa hawnhekk, peress li diġà qed naħdmu f'kontenitur. Sabiex Buildah toħloq il-kontenituri separati mill-ispazji tal-isem tagħha stess, huwa meħtieġ il-privileġġ SYS_ADMIN, li jkun jeħtieġ li jiġu rilassati r-regoli SELinux u SECCOMP tal-kontenitur, li jmur kontra l-preferenza tagħna li nibnu minn kontenitur sigur.

Tmexxi Buildah ġewwa kontenitur

Id-dijagramma tal-immaġni tal-kontenitur Buildah diskussa hawn fuq tippermettilek tvarja b'mod flessibbli l-metodi ta 'tnedija ta' kontenituri bħal dawn.

Veloċità kontra s-sigurtà

Is-sigurtà tal-kompjuter hija dejjem kompromess bejn il-veloċità tal-proċess u kemm protezzjoni hija mgeżwra madwaru. Din id-dikjarazzjoni hija vera wkoll meta jiġu mmuntati kontenituri, għalhekk hawn taħt se nikkunsidraw għażliet għal tali kompromess.

L-immaġni tal-kontenitur diskussa hawn fuq se żżomm il-ħażna tagħha f'/var/lib/containers. Għalhekk, għandna bżonn li jintramaw il-kontenut f'dan il-folder, u kif nagħmlu dan se jaffettwa ħafna l-veloċità tal-bini ta 'immaġini tal-kontenitur.

Ejja nikkunsidraw tliet għażliet.

Għażla 1. Jekk tkun meħtieġa sigurtà massima, allura għal kull kontenitur tista 'toħloq il-folder tiegħek stess għall-kontenituri/immaġni u qabbadha mal-kontenitur permezz ta' volum-mount. U barra minn hekk, poġġi d-direttorju tal-kuntest fil-kontenitur innifsu, fil-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

Sigurtà. Buildah li jaħdem f'kontenitur bħal dan għandu sigurtà massima: ma jingħata l-ebda privileġġ tal-għeruq bl-użu tal-kapaċitajiet, u r-restrizzjonijiet kollha tas-SECOMP u SELinux japplikaw għaliha. Kontenitur bħal dan jista 'saħansitra jitħaddem bl-iżolament tal-User Namespace billi żżid għażla bħal —uidmap 0: 100000:10000.

Prestazzjoni. Iżda l-prestazzjoni hawnhekk hija minima, peress li kwalunkwe immaġni mir-reġistri tal-kontejners tiġi kkupjata lill-host kull darba, u l-caching ma jaħdimx xejn. Meta jlesti x-xogħol tiegħu, il-kontenitur Buildah għandu jibgħat l-immaġni lir-reġistru u jeqred il-kontenut fuq il-host. Il-ħin li jmiss li tinbena l-immaġni tal-kontejner, trid terġa' titniżżel mir-reġistru, peress li sa dak iż-żmien ma jkun fadal xejn fuq il-host.

Għażla 2. Jekk għandek bżonn prestazzjoni fil-livell Docker, tista 'timmonta l-kontenitur/ħażna ospitanti direttament fil-kontenitur.

# 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

Sigurtà. Dan huwa l-inqas mod sigur biex jinbnew kontenituri minħabba li jippermetti li l-kontenitur jimmodifika l-ħażna fuq l-ospitant u jista 'potenzjalment jitma' immaġni malizzjuża lil Podman jew CRI-O. Barra minn hekk, ser ikollok bżonn tiddiżattiva s-separazzjoni SELinux sabiex il-proċessi fil-kontenitur Buildah ikunu jistgħu jinteraġixxu mal-ħażna fuq il-host. Innota li din l-għażla għadha aħjar minn socket Docker minħabba li l-kontenitur huwa msakkar mill-karatteristiċi tas-sigurtà li fadal u ma jistax sempliċement iħaddem kontenitur fuq l-ospitant.

Prestazzjoni. Hawnhekk huwa massimu, peress li l-caching jintuża bis-sħiħ. Jekk Podman jew CRI-O diġà niżżlu l-immaġni meħtieġa lill-ospitant, allura l-proċess Buildah ġewwa l-kontenitur ma jkollux għalfejn jerġa' jniżżlu, u l-bini sussegwenti bbażati fuq din l-immaġni se jkunu jistgħu wkoll jieħdu dak li għandhom bżonn mill-cache. .

Għażla 3. L-essenza ta 'dan il-metodu hija li tgħaqqad diversi stampi fi proġett wieħed b'folder komuni għall-immaġini tal-kontenituri.

# 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

F'dan l-eżempju, aħna ma nħassrux il-folder tal-proġett (/var/lib/project3) bejn il-ġirjiet, għalhekk il-bini sussegwenti kollha fi ħdan il-proġett jibbenefikaw minn caching.

Sigurtà. Xi ħaġa bejn l-għażliet 1 u 2. Min-naħa waħda, il-kontenituri m'għandhomx aċċess għall-kontenut fuq il-host u, għalhekk, ma jistgħux jiżolqu xi ħaġa ħażina fil-ħażna tal-immaġni Podman/CRI-O. Min-naħa l-oħra, bħala parti mid-disinn tiegħu, kontenitur jista 'jinterferixxi mal-assemblaġġ ta' kontenituri oħra.

Prestazzjoni. Hawnhekk huwa agħar milli meta tuża cache kondiviża fil-livell tal-host, peress li ma tistax tuża immaġini li diġà ġew imniżżla bl-użu ta 'Podman/CRI-O. Madankollu, ladarba Buildah tniżżel l-immaġni, l-immaġni tista 'tintuża fi kwalunkwe bini sussegwenti fi ħdan il-proġett.

Ħażna addizzjonali

У kontenituri/ħażna Hemm ħaġa tant friska bħal ħwienet addizzjonali (ħwienet addizzjonali), li grazzi għalihom meta jniedu u jibnu kontenituri, il-magni tal-kontejners jistgħu jużaw ħwienet tal-immaġini esterni f'modalità ta 'overlay li jinqara biss. Essenzjalment, tista 'żżid ħażniet wieħed jew aktar li jinqraw biss mal-fajl storage.conf sabiex meta tibda l-kontenitur, il-magna tal-kontenitur tfittex l-immaġni mixtieqa fihom. Barra minn hekk, se tniżżel l-immaġni mir-reġistru biss jekk ma ssibha f'xi waħda minn dawn il-ħażniet. Il-magna tal-kontejner tkun tista' tikteb biss f'ħażna li tista' tinkiteb...

Jekk tiskrollja 'l fuq u tħares lejn id-Dockerfile li nużaw biex nibnu l-immaġni quay.io/buildah/stable, hemm linji bħal dawn:

# 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

Fl-ewwel linja, aħna nimmodifikaw /etc/containers/storage.conf ġewwa l-immaġni tal-kontenitur, billi ngħidu lis-sewwieq tal-ħażna juża "additionalimagestores" fil-folder /var/lib/shared. U fil-linja li jmiss noħolqu folder kondiviż u żid ftit fajls lock sabiex ma jkunx hemm abbuż minn kontenituri/ħażna. Essenzjalment, aħna sempliċement noħolqu maħżen tal-immaġni tal-kontenitur vojt.

Jekk timmonta kontenituri/ħażna f'livell ogħla minn dan il-folder, Buildah tkun tista 'tuża l-immaġini.

Issa ejja nerġgħu lura għall-Għażla 2 diskussa hawn fuq, meta l-kontenitur Buildah jista 'jaqra u jikteb lill-kontenituri/jaħżen fuq l-ospiti u, għalhekk, għandu prestazzjoni massima minħabba immaġini caching fil-livell Podman/CRI-O, iżda jipprovdi minimu ta' sigurtà peress li tista 'tikteb direttament lill-ħażna. Issa ejja nżidu ħażna addizzjonali hawn u nikseb l-aħjar taż-żewġ dinjiet.

# 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

Innota li /var/lib/containers/storage tal-host huwa mmuntat fuq /var/lib/shared ġewwa l-kontenitur fil-modalità ta' qari biss. Għalhekk, li jaħdem f'kontenitur, Buildah jista 'juża kwalunkwe immaġini li qabel kienu mniżżla bl-użu ta' Podman/CRI-O (hello, veloċità), iżda jista 'jikteb biss fil-ħażna tiegħu stess (hello, sigurtà). Innota wkoll li dan isir mingħajr ma tiddiżattiva s-separazzjoni SELinux għall-kontenitur.

Uġigħ importanti

Taħt l-ebda ċirkostanza m'għandek tħassar xi immaġini mir-repożitorju sottostanti. Inkella, il-kontenitur Buildah jista 'jiġġarraf.

U dawn mhumiex il-vantaġġi kollha

Il-possibbiltajiet ta 'ħażna addizzjonali mhumiex limitati għax-xenarju ta' hawn fuq. Pereżempju, tista 'tpoġġi l-immaġini kollha tal-kontejners fuq ħażna ta' netwerk kondiviża u tagħti aċċess għaliha lill-kontenituri kollha Buildah. Ejja ngħidu li għandna mijiet ta 'immaġini li s-sistema CI/CD tagħna tuża regolarment biex tibni immaġini tal-kontejners. Aħna nikkonċentraw dawn l-immaġini kollha fuq ospitanti tal-ħażna waħda u mbagħad, bl-użu tal-għodod preferuti tal-ħażna tan-netwerk (NFS, Gluster, Ceph, ISCSI, S3...), niftħu aċċess ġenerali għal din il-ħażna għan-nodi kollha Buildah jew Kubernetes.

Issa huwa biżżejjed li jintramaw din il-ħażna tan-netwerk fil-kontenitur Buildah fuq /var/lib/shared u dan huwa - Il-kontenituri Buildah m'għadhomx ikollhom iniżżlu immaġini permezz ta 'pull. Għalhekk, aħna tarmi l-fażi ta 'qabel il-popolazzjoni u huma immedjatament lesti li roll out il-kontenituri.

U ovvjament, dan jista 'jintuża f'sistema Kubernetes ħaj jew infrastruttura tal-kontejners biex tniedi u tħaddem kontenituri kullimkien mingħajr ebda tniżżil ta' immaġini. Barra minn hekk, ir-reġistru tal-kontejners, li jirċievi talba push biex ittella 'immaġni aġġornata miegħu, jista' awtomatikament jibgħat din l-immaġni lil ħażna ta 'netwerk kondiviża, fejn istantanjament issir disponibbli għan-nodi kollha.

L-immaġini tal-kontenituri kultant jistgħu jilħqu ħafna gigabytes fid-daqs. Il-funzjonalità ta 'ħażna addizzjonali tippermettilek tevita l-ikklonar ta' immaġini bħal dawn fuq in-nodi u tagħmel it-tnedija tal-kontenituri kważi istantanja.

Barra minn hekk, bħalissa qed naħdmu fuq karatteristika ġdida msejħa overlay volume mounts, li se tagħmel kontenituri tal-bini saħansitra aktar malajr.

Konklużjoni

It-tmexxija ta 'Buildah ġewwa kontenitur f'Kubernetes/CRI-O, Podman, jew saħansitra Docker hija fattibbli, sempliċi, u ħafna aktar sigura milli tuża docker.socket. Żidna bil-kbir il-flessibilità ta' xogħol bl-immaġini, sabiex tkun tista' tmexxihom f'varjetà ta' modi biex tottimizza l-bilanċ bejn is-sigurtà u l-prestazzjoni.

Il-funzjonalità ta 'ħażna addizzjonali tippermettilek tħaffef jew saħansitra telimina kompletament it-tniżżil ta' immaġini għal nodi.

Sors: www.habr.com

Żid kumment