Mga giya sa pagpadagan sa Buildah sulod sa sudlanan

Unsa ang katahum sa pag-decoupling sa container runtime ngadto sa lain nga mga sangkap sa tooling? Sa partikular, kini nga mga himan mahimong magsugod sa paghiusa aron mapanalipdan nila ang usag usa.

Mga giya sa pagpadagan sa Buildah sulod sa sudlanan

Daghang mga tawo ang nadani sa ideya sa pagtukod sa mga sulud nga mga imahe sa OCI sa sulod Kubernetes o susama nga sistema. Ingnon ta nga naa tay CI/CD nga sigeg kolekta ug mga hulagway, unya murag Red Hat OpenShift/Kubernetes mahimong mapuslanon kaayo sa termino sa pagbalanse sa load sa panahon sa pagtukod. Hangtud bag-o lang, kadaghanan sa mga tawo naghatag lamang sa mga sudlanan og access sa usa ka Docker socket ug gitugotan sila sa pagpadagan sa docker build command. Pipila ka tuig ang milabay nagpakita kaminga kini mao ang kaayo insecure, sa pagkatinuod, kini mao ang mas grabe pa kay sa walay password nga gamut o sudo.

Mao nga ang mga tawo kanunay nga naningkamot sa pagpadagan sa Buildah sa usa ka sudlanan. Sa laktud, naghimo kami usa ka panig-ingnan sa unsa nga paagi, sa among opinyon, mao ang labing maayo sa pagdagan Buildah sa sulod sa usa ka sudlanan, ug posted sa katugbang nga mga larawan sa quay.io/buildah. Magsugod na ta...

kausaban

Kini nga mga hulagway gitukod gikan sa Dockerfiles, nga makita sa Buildah repository sa folder buildahimage.
Dinhi atong hisgotan stable nga bersyon sa 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

Imbis nga OverlayFS, gipatuman sa lebel sa kernel sa host Linux, gigamit namon ang programa sa sulod sa sudlanan fuse-overlay, tungod kay sa pagkakaron ang OverlayFS mahimo ra nga mo-mount kung hatagan nimo kini og SYS_ADMIN permiso gamit ang mga kapabilidad sa Linux. Ug gusto namong ipadagan ang among mga sudlanan sa Buildah nga walay bisan unsang mga pribilehiyo sa gamut. Ang fuse-overlay dali nga molihok ug adunay mas maayo nga performance kaysa VFS storage driver. Palihug timan-i nga kung nagdagan ang usa ka sudlanan sa Buildah nga naggamit Fuse, kinahanglan nimo nga ihatag ang /dev/fuse device.

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

Sunod maghimo kami usa ka direktoryo alang sa dugang nga pagtipig. Sudlanan/tipiganan nagsuporta sa konsepto sa pagkonektar sa dugang nga read-only nga mga tindahan sa imahe. Pananglitan, mahimo nimong i-configure ang usa ka overlay storage area sa usa ka makina, ug dayon gamiton ang NFS aron i-mount kini nga storage sa laing makina ug gamiton ang mga imahe gikan niini nga dili mag-download pinaagi sa pagbitad. Kinahanglan namon kini nga pagtipig aron makonektar ang pipila nga pagtipig sa imahe gikan sa host ingon usa ka volume ug magamit kini sa sulod sa sudlanan.

# 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

Sa katapusan, pinaagi sa paggamit sa BUILDAH_ISOLATION environment variable, among gisultihan ang Buildah container nga modagan sa chroot isolation pinaagi sa default. Dili kinahanglan ang dugang nga pagkakabukod dinhi, tungod kay nagtrabaho na kami sa usa ka sudlanan. Aron ang Buildah makamugna ug kaugalingong namespace-separated containers, gikinahanglan ang SYS_ADMIN privilege, nga magkinahanglan og pagpahayahay sa mga lagda sa SELinux ug SECCOMP sa sudlanan, nga sukwahi sa among gusto nga magtukod gikan sa luwas nga sudlanan.

Pagdagan sa Buildah sulod sa usa ka sudlanan

Ang Buildah container image diagram nga gihisgutan sa ibabaw nagtugot kanimo sa flexible nga pag-usab-usab sa mga pamaagi sa paglansad sa maong mga sudlanan.

Katulin batok sa kaluwasan

Ang seguridad sa kompyuter kanunay nga usa ka pagkompromiso tali sa katulin sa proseso ug kung unsa ka dako ang proteksyon nga giputos niini. Tinuod usab kini nga pahayag kung mag-assemble sa mga sudlanan, mao nga sa ubos atong tagdon ang mga kapilian alang sa ingon nga pagkompromiso.

Ang hulagway sa sudlanan nga gihisgutan sa ibabaw magpabilin sa pagtipig niini sa /var/lib/containers. Busa, kinahanglan natong i-mount ang sulod niini nga folder, ug kung unsaon nato pagbuhat niini makaapekto pag-ayo sa katulin sa paghimo og mga hulagway sa sudlanan.

Atong tagdon ang tulo ka kapilian.

1 nga kapilian. Kung gikinahanglan ang labing kataas nga seguridad, nan alang sa matag sudlanan mahimo ka maghimo sa imong kaugalingon nga folder alang sa mga sulud / imahe ug ikonektar kini sa sulud pinaagi sa volume-mount. Ug gawas pa, ibutang ang direktoryo sa konteksto sa sudlanan mismo, sa / build folder:

# 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

Kasegurohan. Ang Buildah nga nagdagan sa ingon nga sudlanan adunay labing kataas nga seguridad: wala kini gihatagan bisan unsang mga pribilehiyo sa gamut gamit ang mga kapabilidad, ug ang tanan nga mga pagdili sa SECOMP ug SELinux magamit niini. Ang ingon nga sudlanan mahimo pa gani nga ipadagan sa User Namespace isolation pinaagi sa pagdugang og opsyon sama sa β€”uidmap 0: 100000:10000.

Pagganap. Apan ang pasundayag dinhi gamay ra, tungod kay ang bisan unsang mga imahe gikan sa mga rehistro sa sulud gikopya sa host matag higayon, ug ang pag-cache dili molihok. Kung nahuman na ang trabaho niini, kinahanglan ipadala sa sudlanan sa Buildah ang imahe sa rehistro ug gub-on ang sulud sa host. Sa sunod higayon nga matukod ang imahen sa sudlanan, kinahanglan nga i-download kini pag-usab gikan sa rehistro, tungod kay nianang panahona wala nay nahabilin sa host.

2 nga kapilian. Kung kinahanglan nimo ang pasundayag sa lebel sa Docker, mahimo nimong i-mount ang sulud sa host / pagtipig direkta sa sulud.

# 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

Kasegurohan. Kini ang dili kaayo luwas nga paagi sa paghimo og mga sudlanan tungod kay gitugotan niini ang sudlanan nga usbon ang pagtipig sa host ug mahimo’g makapakaon sa Podman o CRI-O usa ka makadaot nga imahe. Dugang pa, kinahanglan nimo nga i-disable ang SELinux separation aron ang mga proseso sa Buildah container mahimong makig-interact sa storage sa host. Timan-i nga kini nga kapilian mas maayo pa kay sa usa ka Docker socket tungod kay ang sudlanan gi-lock pinaagi sa nahabilin nga mga bahin sa seguridad ug dili na makadagan sa usa ka sudlanan sa host.

Pagganap. Dinhi kini ang labing kadaghan, tungod kay ang pag-cache hingpit nga gigamit. Kung na-download na ni Podman o CRI-O ang gikinahanglan nga imahe sa host, nan ang proseso sa Buildah sa sulod sa sudlanan dili na kinahanglan nga i-download kini pag-usab, ug ang sunod nga mga pagtukod base sa kini nga imahe mahimo usab nga makuha ang ilang kinahanglan gikan sa cache .

3 nga kapilian. Ang diwa sa kini nga pamaagi mao ang paghiusa sa daghang mga imahe sa usa ka proyekto nga adunay usa ka sagad nga folder alang sa mga imahe sa sulud.

# 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

Niini nga pananglitan, dili namo tangtangon ang folder sa proyekto (/var/lib/project3) tali sa mga run, mao nga ang tanan nga nagsunod nga pagtukod sulod sa proyekto makabenepisyo gikan sa pag-cache.

Kasegurohan. Usa ka butang sa taliwala sa mga kapilian 1 ug 2. Sa usa ka bahin, ang mga sudlanan walay access sa sulod sa host ug, sumala niana, dili makalusot sa usa ka butang nga dili maayo ngadto sa Podman/CRI-O image storage. Sa laing bahin, isip bahin sa disenyo niini, ang usa ka sudlanan mahimong makabalda sa pagtigom sa ubang mga sudlanan.

Pagganap. Dinhi kini mas grabe kay sa paggamit sa usa ka shared cache sa lebel sa host, tungod kay dili nimo magamit ang mga hulagway nga na-download na gamit ang Podman/CRI-O. Bisan pa, sa higayon nga ma-download ni Buildah ang imahe, ang imahe mahimong magamit sa bisan unsang sunod nga pagtukod sulod sa proyekto.

Dugang storage

Π£ mga sudlanan/tipiganan Adunay usa ka cool nga butang sama sa dugang nga mga tindahan (dugang nga mga tindahan), salamat nga kung maglansad ug magtukod mga sudlanan, ang mga makina sa sulud mahimo’g mogamit sa gawas nga mga tindahan sa imahe sa read-only overlay mode. Sa tinuud, mahimo nimong idugang ang usa o daghang mga read-only storage sa storage.conf file aron kung sugdan nimo ang sudlanan, ang makina sa container mangita sa gusto nga imahe sa kanila. Dugang pa, kini mag-download sa imahe gikan sa rehistro lamang kung dili kini makit-an sa bisan unsang mga pagtipig. Ang makina sa sudlanan makahimo lamang sa pagsulat sa masulat nga pagtipig...

Kung mag-scroll ka ug tan-awon ang Dockerfile nga among gigamit sa paghimo sa imahe quay.io/buildah/stable, adunay mga linya nga sama niini:

# 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

Sa unang linya, atong usbon ang /etc/containers/storage.conf sulod sa container image, nga nagsulti sa storage driver sa paggamit sa "additionalimagestores" sa /var/lib/shared folder. Ug sa sunod nga linya maghimo kami usa ka gipaambit nga folder ug magdugang usa ka pares nga mga lock file aron wala’y pag-abuso gikan sa mga sudlanan / pagtipig. Sa tinuud, naghimo lang kami usa ka walay sulod nga tindahan sa imahe sa sulud.

Kung imong i-mount ang mga sudlanan / pagtipig sa lebel nga mas taas kaysa kini nga folder, magamit ni Buildah ang mga imahe.

Karon mobalik kita sa Opsyon 2 nga gihisgutan sa ibabaw, kung ang sudlanan sa Buildah makabasa ug makasulat sa mga sudlanan / tindahan sa mga host ug, sa ingon, adunay labing kadaghan nga pasundayag tungod sa mga imahe sa pag-cache sa lebel sa Podman / CRI-O, apan naghatag usa ka minimum nga seguridad tungod kay kini makasulat direkta ngadto sa storage. Karon magdugang kita og dugang nga storage dinhi ug makuha ang pinakamaayo sa duha ka kalibutan.

# 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

Timan-i nga ang /var/lib/containers/storage sa host gi-mount sa /var/lib/shared sulod sa sudlanan sa read-only mode. Busa, nagtrabaho sa usa ka sudlanan, ang Buildah mahimong mogamit sa bisan unsang mga imahe nga na-download kaniadto gamit ang Podman/CRI-O (hello, speed), apan mahimo ra magsulat sa kaugalingon nga pagtipig (hello, seguridad). Timan-i usab nga kini gihimo nga walay pag-disable sa SELinux separation alang sa sudlanan.

Importante nga nuon

Sa bisan unsang kahimtang kinahanglan nimo nga tangtangon ang bisan unsang mga imahe gikan sa nagpahiping repositoryo. Kay kon dili, ang sudlanan sa Buildah mahimong ma-crash.

Ug dili kini ang tanan nga mga bentaha

Ang mga posibilidad sa dugang nga pagtipig dili limitado sa senaryo sa ibabaw. Pananglitan, mahimo nimong ibutang ang tanan nga mga imahen sa sulud sa usa ka gipaambit nga pagtipig sa network ug hatagan kini pag-access sa tanan nga mga sulud sa Buildah. Ingnon ta nga aduna kitay gatosan ka mga hulagway nga kanunayng gigamit sa atong CI/CD nga sistema sa paghimo og mga hulagway sa sudlanan. Among gikonsentrar kining tanan nga mga hulagway sa usa ka storage host ug dayon, gamit ang gipalabi nga network storage tools (NFS, Gluster, Ceph, ISCSI, S3...), among giablihan ang kinatibuk-ang access niini nga storage sa tanang Buildah o Kubernetes nodes.

Karon igo na nga i-mount kini nga pagtipig sa network sa sulud sa Buildah sa /var/lib/shared ug mao na kini - Ang mga sudlanan sa Buildah dili na kinahanglan mag-download sa mga imahe pinaagi sa pagbitad. Sa ingon, gilabay namon ang yugto sa pre-populasyon ug andam dayon nga i-roll out ang mga sudlanan.

Ug siyempre, magamit kini sulod sa usa ka buhi nga sistema sa Kubernetes o imprastraktura sa sudlanan aron maglansad ug magpadagan sa mga sudlanan bisan asa nga wala’y bisan unsang pag-download sa mga imahe. Dugang pa, ang rehistro sa sudlanan, nga nakadawat usa ka hangyo sa pagduso aron ma-upload ang usa ka na-update nga imahe niini, mahimo nga awtomatiko nga ipadala kini nga imahe sa usa ka gipaambit nga pagtipig sa network, diin kini magamit dayon sa tanan nga mga node.

Ang mga hulagway sa sudlanan usahay moabot ug daghang gigabytes ang gidak-on. Ang pag-andar sa dugang nga pagtipig nagtugot kanimo nga malikayan ang pag-clone sa ingon nga mga imahe sa mga node ug himuon ang paglansad sa mga sulud nga hapit dayon.

Dugang pa, kami karon nagtrabaho sa usa ka bag-ong bahin nga gitawag nga overlay volume mounts, nga maghimo sa mga sudlanan nga mas paspas.

konklusyon

Ang pagpadagan sa Buildah sulod sa usa ka sudlanan sa Kubernetes/CRI-O, Podman, o bisan Docker kay mahimo, yano, ug mas luwas kay sa paggamit sa docker.socket. Gidugangan namo pag-ayo ang pagka-flexible sa pagtrabaho sa mga hulagway, aron mapadagan nimo kini sa lain-laing mga paagi aron ma-optimize ang balanse tali sa seguridad ug performance.

Ang pag-andar sa dugang nga pagtipig nagtugot kanimo sa pagpadali o bisan sa hingpit nga pagwagtang sa pag-download sa mga imahe sa mga node.

Source: www.habr.com

Idugang sa usa ka comment