
Kubernetesi esmane juurutamine hÔlmab teie rakenduse paigutamist konteinerisse. Selles seerias uurime, kuidas luua vÀikese ja turvalise konteineri pilti.
Docker'i kaudu on konteinerite piltide loomine kunagi olnud nii lihtne. MÀÀrake aluskuju, lisage oma muudatused ja looge konteiner.

Kuigi see meetod sobib suurepÀraselt alustamiseks, vÔib vaikimisi aluskujudega töötamine pÔhjustada suures suuruses piltide ebaturvalist kasutamist, mis on tÀis haavatavusi.
Lisaks kasutavad enamik Docker'i pilte alusena Debianit vĂ”i Ubuntut, ja kuigi see tagab suurepĂ€rase ĂŒhilduvuse ja lihtsa kohandamise (Docker'i fail hĂ”lmab vaid kahte koodirea), vĂ”ivad aluskujud lisada teie konteinerisse sadu megabaite lisakoormust. NĂ€iteks lihtne Node.js rakenduse Go 'hello-world' fail vĂ”tab umbes 700 megabaiti, samas kui teie rakenduse tegelik suurus on vaid paar megabaiti.

Seega on kogu see lisakoormus digitaalsete ruumide tarbetu kulu ja suurepÀrane peidupaik haavatavuste ja turvavea jaoks. Vaatame seetÔttu kahte viisi, kuidas konteineri suurust vÀhendada.
Esiteks â kasutada vĂ€ikese suurusega aluspilte, teiseks â rakendada Builder Pattern projekteerimismustrit. VĂ€iksemate aluspiltide kasutamine on tĂ”enĂ€oliselt kĂ”ige lihtsam viis teie konteineri suuruse vĂ€hendamiseks. TĂ”enĂ€oliselt pakub teie kasutatav keel vĂ”i tehnoloogiakogum algset rakenduspilti, mis on oluliselt vĂ€iksem kui vaikimisi pilt. Vaadakem meie node.js konteinerit.

Vaikimisi on Docker'i baaspildi suurus node:8 670 MB ning node:8-alpine'i suurus vaid 65 MB, mis tĂ€hendab, et see on 10 korda vĂ€iksem. Kasutades vĂ€iksemat Alpine'i baaspilti, vĂ€hendate erhebalt oma konteineri suurust. Alpine on vĂ€ike ja kerge Linuxi distributsioon, mis on Docker'i kasutajate seas vĂ€ga populaarne, sest see on ĂŒhilduv paljude rakendustega ning samal ajal sĂ€ilitab vĂ€ikese konteineri suuruse. Erinevalt standardsetest Docker'i piltidest nagu ânodeâ, eemaldab ânode:alpineâ palju teenusefaile ja programme, jĂ€ttes alles vaid need, mis on vajalikud teie rakenduse kĂ€ivitamiseks.
Smaller base image'e kasutamiseks vÀrskendage lihtsalt Docker-faili, et alustada uue baaspildiga:

NĂŒĂŒd, erinevalt vanast onbuild pildist, peate oma koodi konteinerisse kopeerima ja kĂ”ik sĂ”ltuvused paigaldama. Uues Docker-failis algab konteiner node:alpine pildist, seejĂ€rel loob kausta koodi, installib sĂ”ltuvused NPM-i pakihaldusega ja lĂ”puks kĂ€ivitab server.js.

Selle uuenduse abil saab konteineri kĂŒmme korda vĂ€iksemaks. Kui teie programmeerimiskeel vĂ”i tehnoloogia virn ei toeta pĂ”hipildi vĂ€hendamist, kasutage Alpine Linuxi. See annab ka tĂ€ieliku kontrolli konteineri sisu ĂŒle. VĂ€ikeste pĂ”hiÂpiltide kasutamine on suurepĂ€rane viis vĂ€ikeste konteinerite kiireks loomiseks. Kuid veelgi suuremat vĂ€hendust on vĂ”imalik saavutada, kasutades Builder Pattern'i.

TÔlgitavates keeltes edastatakse lÀhtekood esmalt tÔlkijale ja seejÀrel tÀidetakse. Kompileeritavates keeltes muudetakse lÀhtekood eelnevalt kompileeritud koodiks. Samuti kasutab kompileerimine sageli tööriistu, mis ei ole koodi kÀivitamiseks tegelikult vajalikud. See tÀhendab, et saate need tööriistad finaliseerimisest tÀielikult eemaldada. Selleks vÔib kasutada Builder Pattern'i.

Kood genereeritakse esimeses konteineris ja kompileeritakse. SeejĂ€rel pakitakse kompileeritud kood lĂ”ppkonteinerisse, millel puuduvad kompilaatorid ja tööriistad, mis on vajalikud selle koodi kompileerimiseks. Vaatame nĂŒĂŒd seda protsessi lĂ€bi Go rakenduse. Esiteks liigume onbuild pildilt Alpine Linuxi.

Uues Docker failis algab konteiner golang:alpine pildiga. See loob seejÀrel katalooge koodi jaoks, kopeerib selle lÀhtekoodi sisse, kompileerib selle ja kÀivitab rakenduse. See konteiner on palju vÀiksem kui onbuild konteiner, kuid sisaldab endiselt kompilaatorit ja muid Go tööriistu, mis me tegelikult ei vaja. Seega, vÔtame lihtsalt kompileeritud programmi ja paneme selle omaenda konteinerisse.

VÔite mÀrgata midagi kummalist selles Docker-failis: sellel on kaks FROM rida. Esimene osa neljast reast nÀeb vÀlja tÀpselt nagu eelmine Docker-fail, vÀlja arvatud see, et see kasutab AS vÔtit, et sellele etapile nimi anda. JÀrgmises osas on uus FROM rida, mis vÔimaldab alustada uut pilti, kasutades pÔhiosana Raw alpine'i, mitte golang:alpine'i.
Raw Alpine Linuxil ei ole mingeid SSL-sertifikaate installitud, mis pÔhjustab enamiku API HTTPS-protokolli kÔnede ebaÔnnestumise, seega laseme installida mÔned juure CA sertifikaadid.
Ja nĂŒĂŒd tuleb kĂ”ige huvitavam osa: esimesest konteinerist kompileeritud koodi kopeerimiseks teise vĂ”ib lihtsalt kasutada 5. rea COPY kĂ€sku teises osas. See kopeerib ainult ĂŒhe rakenduse faili ja ei puuduta Go teenindustööriistu. Uus mitmeastmeline Docker-fail sisaldab konteineri pilti, mille suurus on vaid 12 megabaiti, samas kui algne konteineri pilt oli 700 megabaiti, ja see on suur erinevus!
Seega, vÀikeste baasipiltide ja Builder Pattern'i kasutamine on suurepÀrased viisid luua palju vÀiksemaid konteinerite ilma suure töökoormuseta.
SĂ”ltuvalt rakenduste tehnoloogilisest virnast vĂ”ivad olla ka tĂ€iendavad viisid pildi ja konteineri suuruse vĂ€hendamiseks, kuid kas tĂ”esti vĂ€ikestel konteineritel on mÔÔdetav eelis? Vaatame kahte aspekti, kus vĂ€ikesed konteinerid on ÀÀrmiselt tĂ”husad â tootlikkus ja turvalisus.
Tootlikkuse kasvu hindamiseks vaatame konteineri loomise aega, selle registrisse sisestamise (push) ja sealt tĂ”mbamise (pull) kestust. NĂ€ete, et vĂ€iksema suurusega konteineril on ĂŒhemĂ”tteline eelis vĂ”rreldes suurema konteeriga.

Docker cache'ib oma kihte, seega jĂ€rgmised koostamisprotsessid toimuvad vĂ€ga kiiresti. Siiski paljudes CI sĂŒsteemides, mida kasutatakse konteinerite koostamiseks ja testimiseks, kihte ei cache'ita, mistĂ”ttu saavutatakse siin mĂ€rkimisvÀÀrne ajasÀÀst. Nagu nĂ€ha, sĂ”ltub suure konteineri koostamisaeg teie masina vĂ”imsusest ning varieerub 34 kuni 54 sekundi vahel, samas kui Builder Pattern'i abil vĂ€hendatud konteineri koostamisaeg on 23 kuni 28 sekundi vahemikus. Selliste operatsioonide jaoks on jĂ”udluse tĂ”us 40-50%. Seega mĂ”elge lihtsalt, kui mitu korda te oma koodi loote ja testite.
PÀrast konteineri koostamist peate selle pildi sisestama (push container image) konteineriregistrisse, et seejÀrel kasutada seda oma Kubernetes klastris. Soovitan kasutada Google'i konteineriregistrit.

Kasutades Google Container Registry (GCR), maksate ainult âtooreâ salvestamise ja vĂ”rgu eest, lisatasu konteinerite haldamise eest ei kĂŒsita. See on konfidentsiaalne, ohutu ja vĂ€ga kiire. GCR kasutab mitmeid nippe, et pull-operatsiooni kiirendada. Nagu nĂ€ete, pildi sisestamine Docker Container Image kasutades go:onbuild sĂ”ltuvalt arvuti jĂ”udlusest vĂ”tab aega 15 kuni 48 sekundit, samas kui sama operatsioon vĂ€iksema konteineriga â 14 kuni 16 sekundit, kusjuures vĂ€hem jĂ”uliste masinate jaoks suureneb operatsiooni kiirus kolm korda. Suurte masinate puhul on aeg enam-vĂ€hem sama, kuna GCR kasutab globaalset vahemĂ€lu, et jagada pilte, seega ei pea te neid ĂŒldse laadima. Madala jĂ”udlusega arvutis on CPU kitsaskohaks, seega on vĂ€ikeste konteinerite kasutamise eelised siin palju tuntavamad.
Kui kasutate GCR-i, soovitan tungivalt kasutada Google Container Builder (GCB) osana oma koostesĂŒsteemist.

Nagu nĂ€ete, vĂ”imaldab selle kasutamine saavutada palju paremaid tulemusi Build+Push operatsiooni kestuse vĂ€hendamises kui isegi vĂ”imsal masinal â sel juhul kiireneb konteinerite loomise ja saatmise protsess peaaegu kahe korra. Lisaks saate iga pĂ€ev 120 minutit tasuta ehitamist, mis enamasti rahuldab konteinerite loomise vajadusi.
Edasi liikudes on kĂ”ige olulisem jĂ”udlusnĂ€itaja â konteinerite Pull allalaadimiskiirus. Ja kui te ei muretse liiga palju push operatsiooni aja pĂ€rast, siis pull protsessi kestus mĂ”jutab tĂ”siselt sĂŒsteemi ĂŒldist jĂ”udlust. Oletame, et teil on kolm sĂ”lme sisaldav klaster ja ĂŒks neist ebaĂ”nnestub. Kui kasutate haldussĂŒsteemi, nagu Google Kubernetes Engine, asendab see automaatselt rikki lĂ€inud sĂ”lme uuega. Kuid see uus sĂ”lm on tĂ€iesti tĂŒhi, ja te peate kaaluma, kuidas sinna kĂ”ik teie konteinerid tĂ”sta, et see hakkaks tööle. Kui pull operatsioon kestab liiga kaua, töötab kogu see aeg teie klaster madalama tootlikkusega.
On olemas palju olukordi, kui selline asi vĂ”ib juhtuda: see vĂ”ib olla uue sĂ”lme lisamine klastrisse, sĂ”lmede uuendamine vĂ”i isegi uuele konteinerile ĂŒleminek. SeetĂ”ttu muutub pull-aegade minimeerimine vĂ”tmeteguriks. On vaieldamatu, et vĂ€ike konteiner laetakse alla palju kiiremini kui suur. Kui kasutate Kuberneteses mitmeid konteinerid, vĂ”ib ajasÀÀst olla tĂ”eliselt oluline.

Vaadake allolevat vĂ”rdlust: pull-operatsioon vĂ€ikeste konteinerite korral vĂ”tab sĂ”ltuvalt masina vĂ”imsusest 4â9 korda vĂ€hem aega vĂ”rreldes sama operatsiooniga, kasutades go:onbuild'i. VĂ€ikeste kontseptuaalsete aluskujundite kasutamine kiirendab oluliselt aega ja kiirus, millega uued Kubernetes-sĂ”lmed saavad ĂŒles seatud ja internetti ĂŒhendatud.
Vaatame turvalisuse kĂŒsimust. Arvatakse, et vĂ€iksemad konteinerid on palju turvalisemad kui suured, kuna neil on vĂ€iksem rĂŒnnakupind. Kas see on tĂ”si? Ăks Google Container Registry kasulikest funktsioonidest on vĂ”imalus automaatselt skaneerida teie konteinereid haavatavuste suhtes. MĂ”ned kuud tagasi lĂ”in nii onbuild kui ka mitmeastmelised konteinerid, nii et vaatame, kas seal on mingeid haavatavusi.

Tulemus on hĂ€mmastav: vĂ€iksemas konteineris leiti vaid 3 keskmist haavatavust, samas kui suures on 16 kriitilist ja 376 muud haavatavust. Kui vaadata suures konteineris olevaid komponente, on nĂ€ha, et enamik turvaprobleeme ei ole seotud meie rakendusega, vaid programmidega, mida me isegi ei kasuta. SeetĂ”ttu, kui inimesed rÀÀgivad suurest rĂŒnnakupinnast, peavad nad silmas just seda.

KokkuvĂ”te on selge: looge vĂ€ikseid konteinerid, sest need pakuvad teie sĂŒsteemi tĂ”husust ja turvalisust.

Veidi reklaami đ
AitĂ€h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nĂ€ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse vĂ”i soovitades meid tuttavatele. , ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks vĂ€lja mĂ”elnud: (saadaval on RAID1 ja RAID10 variandid, kuni 24 sĂŒdamikku ja kuni 40GB DDR4).
Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis? Ainult meie juures Hollandi turul! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â alates $99! Lugege, kuidas
Allikas: habr.com
