Rekòmandasyon pou kouri Buildah andedan yon veso

Ki sa ki nan bote nan dekoupleman nan ègzekutabl veso a nan eleman zouti separe? An patikilye, zouti sa yo ka kòmanse konbine pou yo pwoteje youn ak lòt.

Rekòmandasyon pou kouri Buildah andedan yon veso

Anpil moun atire nan lide pou konstwi imaj OCI nan kontenè Kubernetes oswa sistèm menm jan an. Ann di nou gen yon CI/CD ki toujou ap kolekte imaj, Lè sa a, yon bagay tankou Sou entènèt jwèt Red Hat OpenShift/ Kubernetes ta byen itil an tèm de balans chaj pandan bati. Jiska dènyèman, pifò moun tou senpleman te bay resipyan aksè nan yon priz Docker epi yo te pèmèt yo kouri lòd la bati Docker. Plizyè ane de sa nou te montreke sa a se trè ensekirite, an reyalite, li se menm pi mal pase bay rasin san modpas oswa sudo.

Se poutèt sa moun yo toujou ap eseye kouri Buildah nan yon veso. Nan ti bout tan, nou te kreye egzanp ki jan, nan opinyon nou an, se pi bon kouri Buildah andedan yon veso, epi afiche imaj ki koresponn yo sou quay.io/buildah. An n kòmanse...

ajisteman

Imaj sa yo bati nan Dockerfiles, ki ka jwenn nan depo Buildah nan katab la bati imaj.
Isit la nou pral konsidere vèsyon ki estab nan 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

Olye pou yo OverlayFS, aplike nan nivo nwayo Linux lame a, nou itilize pwogram nan andedan veso a fuse-overlay, paske kounye a OverlayFS ka monte sèlman si ou ba li otorizasyon SYS_ADMIN lè l sèvi avèk kapasite Linux. Epi nou vle kouri kontenè Buildah nou yo san okenn privilèj rasin. Fuse-overlay travay byen vit epi li gen pi bon pèfòmans pase chofè depo VFS la. Tanpri sonje ke lè w ap kouri yon veso Buildah ki sèvi ak Fuse, ou dwe bay aparèy /dev/fuse la.

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

Apre sa, nou kreye yon anyè pou depo adisyonèl. Veso/depo sipòte konsèp pou konekte magazen imaj adisyonèl pou lekti sèlman. Pou egzanp, ou ka configured yon zòn depo kouvri sou yon machin, ak Lè sa a, sèvi ak NFS pou monte depo sa a sou yon lòt machin epi sèvi ak imaj ki soti nan li san yo pa telechaje atravè rale. Nou bezwen depo sa a pou nou kapab konekte kèk depo imaj ki soti nan lame a kòm yon volim epi sèvi ak li andedan veso a.

# 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

Finalman, lè nou itilize varyab anviwònman BUILDAH_ISOLATION, nou ap di veso Buildah la pou li kouri ak izòlman chroot pa default. Izolasyon adisyonèl pa obligatwa isit la, paske nou deja ap travay nan yon veso. Pou Buildah kreye pwòp kontenè ki separe ak espas non li yo, privilèj SYS_ADMIN obligatwa, sa ki ta mande pou detann règ SELinux ak SECCOMP veso a, sa ki kontrè ak preferans nou pou bati nan yon veso ki an sekirite.

Kouri Buildah andedan yon veso

Dyagram imaj veso Buildah yo diskite pi wo a pèmèt ou varye ak fleksib metòd pou lanse veso sa yo.

Vitès kont sekirite

Sekirite òdinatè se toujou yon konpwomi ant vitès la nan pwosesis la ak konbyen pwoteksyon ki vlope alantou li. Deklarasyon sa a se vre tou lè rasanble kontenè, kidonk pi ba a nou pral konsidere opsyon pou yon konpwomi konsa.

Imaj veso ki diskite pi wo a pral kenbe depo li nan /var/lib/containers. Se poutèt sa, nou bezwen monte kontni an nan katab sa a, ak ki jan nou fè sa a pral anpil afekte vitès la nan bati imaj veso.

Ann konsidere twa opsyon.

Opsyon 1. Si sekirite maksimòm obligatwa, Lè sa a, pou chak veso ou ka kreye pwòp katab ou pou resipyan / imaj epi konekte li nan veso a atravè volim-mount. Epi anplis, mete anyè kontèks la nan veso a li menm, nan katab /build la:

# 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

Sekirite. Buildah kouri nan yon veso konsa gen sekirite maksimòm: li pa bay okenn privilèj rasin lè l sèvi avèk kapasite, epi tout restriksyon SECOMP ak SELinux aplike nan li. Yon veso sa a ka menm kouri ak izolasyon User Namespace lè w ajoute yon opsyon tankou —uidmap 0: 100000:10000.

Pèfòmans. Men, pèfòmans isit la se minim, paske nenpòt imaj ki soti nan rejis veso yo kopye nan lame a chak fwa, ak kachèt pa travay ditou. Lè w ap fini travay li, veso Buildah la dwe voye imaj la nan rejis la epi detwi kontni an sou lame a. Pwochen fwa imaj veso a bati, li pral oblije telechaje nan rejis la ankò, depi lè sa a pa pral gen anyen ki rete sou lame a.

Opsyon 2. Si ou bezwen pèfòmans Docker-nivo, ou ka monte veso / depo lame a dirèkteman nan veso a.

# 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

Sekirite. Sa a se pi piti fason an sekirite yo bati resipyan paske li pèmèt veso a modifye depo a sou lame a epi li ka potansyèlman manje Podman oswa CRI-O yon imaj move. Anplis de sa, w ap bezwen enfim separasyon SELinux pou pwosesis ki nan veso Buildah la ka kominike avèk depo ki sou lame a. Remake byen ke opsyon sa a toujou pi bon pase yon priz Docker paske veso a fèmen anba karakteristik sekirite ki rete yo epi li pa ka tou senpleman kouri yon veso sou lame a.

Pèfòmans. Isit la li se maksimòm, depi kachèt se konplètman itilize. Si Podman oswa CRI-O te deja telechaje imaj obligatwa a nan lame a, Lè sa a, pwosesis Buildah andedan veso a pa pral oblije telechaje li ankò, ak bati ki vin apre ki baze sou imaj sa a pral kapab tou pran sa yo bezwen nan kachèt la. .

Opsyon 3. Sans nan metòd sa a se konbine plizyè imaj nan yon pwojè ak yon katab komen pou imaj veso.

# 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

Nan egzanp sa a, nou pa efase katab pwojè a (/var/lib/project3) ant kouri, kidonk tout bati ki vin apre nan pwojè a benefisye de kachèt.

Sekirite. Yon bagay nan ant opsyon 1 ak 2. Sou yon bò, resipyan yo pa gen aksè a kontni sou lame a epi, kòmsadwa, pa ka glise yon move bagay nan depo imaj Podman/CRI-O. Nan lòt men an, kòm yon pati nan konsepsyon li yo, yon veso ka entèfere ak asanble a nan lòt resipyan.

Pèfòmans. Isit la li pi mal pase lè w ap itilize yon kachèt pataje nan nivo lame a, paske ou pa ka itilize imaj ki deja telechaje lè l sèvi avèk Podman/CRI-O. Sepandan, yon fwa Buildah telechaje imaj la, imaj la ka itilize nan nenpòt ki bati ki vin apre nan pwojè a.

Depo adisyonèl

У kontenè/depo Gen yon bagay ki fre tankou magazen adisyonèl (magazen adisyonèl), gras a ki lè lanse ak bati resipyan, motè veso ka itilize magazen imaj ekstèn nan mòd lekti sèlman kouvri. Esansyèlman, ou ka ajoute youn oswa plis depo pou lekti sèlman nan fichye storage.conf pou lè ou kòmanse veso a, motè veso a chèche imaj ou vle a ladan yo. Anplis, li pral telechaje imaj la nan rejis la sèlman si li pa jwenn li nan nenpòt nan depo sa yo. Motè veso a pral sèlman kapab ekri nan depo ekri ...

Si w woule epi gade Dockerfile ke nou itilize pou konstwi imaj quay.io/buildah/stable, gen liy tankou sa a:

# 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

Nan premye liy lan, nou modifye /etc/containers/storage.conf andedan imaj veso a, di chofè depo a pou yo itilize "additionalimagestores" nan /var/lib/shared folder. Ak nan liy kap vini an nou kreye yon katab pataje epi ajoute yon koup nan dosye fèmen pou pa gen okenn abi nan resipyan / depo. Esansyèlman, nou senpleman kreye yon magazen imaj veso vid.

Si ou monte kontenè/depo nan yon nivo ki pi wo pase katab sa a, Buildah pral kapab sèvi ak imaj yo.

Koulye a, ann retounen nan Opsyon 2 diskite pi wo a, lè veso Buildah la ka li ak ekri nan resipyan/magazen sou lame yo epi, kòmsadwa, gen pèfòmans maksimòm akòz imaj kachèt nan nivo Podman/CRI-O, men li bay yon minimòm sekirite. depi li ka ekri dirèkteman nan depo. Koulye a, ann ajoute depo adisyonèl isit la epi jwenn pi bon nan tou de mond.

# 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

Remake byen ke /var/lib/containers/storage lame a monte nan /var/lib/shared andedan veso a nan mòd lekti sèlman. Se poutèt sa, k ap travay nan yon veso, Buildah ka itilize nenpòt imaj ki te deja telechaje lè l sèvi avèk Podman/CRI-O (alo, vitès), men li ka sèlman ekri nan depo pwòp li yo (alo, sekirite). Epitou sonje ke sa a se fè san yo pa enfim separasyon SELinux pou veso a.

Enpòtan nuans

Anba okenn sikonstans ou ta dwe efase nenpòt imaj nan repozitwa ki kache a. Sinon, veso Buildah la ka fè aksidan.

Ak sa yo se pa tout avantaj yo

Posiblite yo nan depo adisyonèl yo pa limite a senaryo ki anwo a. Pou egzanp, ou ka mete tout imaj veso sou yon depo rezo pataje epi bay aksè a li nan tout resipyan Buildah. Ann di nou gen plizyè santèn imaj ke sistèm CI/CD nou an itilize regilyèman pou konstwi imaj veso. Nou konsantre tout imaj sa yo sou yon sèl lame depo ak Lè sa a, lè l sèvi avèk zouti yo pi pito depo rezo (NFS, Gluster, Ceph, ISCSI, S3...), nou louvri aksè jeneral nan depo sa a nan tout nœuds Buildah oswa Kubernetes.

Koulye a, li ase yo monte depo rezo sa a nan veso Buildah la sou /var/lib/shared e se li - kontenè Buildah pa gen pou telechaje imaj atravè rale ankò. Kidonk, nou jete faz pre-populasyon an epi imedyatman pare pou woule kontenè yo.

Ak nan kou, sa a ka itilize nan yon sistèm Kubernetes ap viv oswa enfrastrikti veso pou lanse ak kouri kontenè nenpòt kote san okenn rale telechaje imaj. Anplis, rejis veso a, k ap resevwa yon demann pouse pou telechaje yon imaj mete ajou sou li, ka otomatikman voye imaj sa a nan yon depo rezo pataje, kote li imedyatman vin disponib nan tout nœuds.

Imaj veso ka pafwa rive nan anpil jigokte nan gwosè. Fonksyonalite depo adisyonèl pèmèt ou evite klonaj imaj sa yo atravè nœuds epi fè lansman veso yo prèske enstantane.

Anplis de sa, kounye a nou ap travay sou yon nouvo karakteristik ki rele superpose volim mòn, ki pral fè bati veso yo menm pi vit.

Konklizyon

Kouri Buildah andedan yon veso nan Kubernetes/CRI-O, Podman, oswa menm Docker se posib, senp, ak pi an sekirite pase lè l sèvi avèk docker.socket. Nou te ogmante anpil fleksibilite nan travay ak imaj, konsa ou ka kouri yo nan yon varyete fason yo optimize balans ki genyen ant sekirite ak pèfòmans.

Fonksyonalite nan depo adisyonèl pèmèt ou pi vit oswa menm konplètman elimine telechaje imaj la nan nœuds.

Sous: www.habr.com

Add nouvo kòmantè