PÄvels Seļivanovs, Southbridge risinÄjumu arhitekts un Slurm skolotÄjs, uzstÄjÄs ar prezentÄciju DevOpsConf 2019. Å Ä« runa ir daļa no vienas no Kubernetes padziļinÄtÄ kursa tÄmÄm āSlurm Megaā.
Zem griezuma ir ziÅojuma atÅ”ifrÄjums.
Labdien, kolÄÄ£i un tie, kas viÅiem jÅ«t lÄ«dzi. Å odien es runÄÅ”u par droŔību.
Es redzu, ka Å”odien zÄlÄ ir daudz apsargu. Jau iepriekÅ” atvainojos, ja lietoju terminus no droŔības pasaules ne gluži tÄ, kÄ jums ir ierasts.
TÄ sagadÄ«jÄs, ka pirms apmÄram pusgada es uzgÄju vienu publisku Kubernetes klasteru. Publisks nozÄ«mÄ, ka ir n-tais nosaukumvietu skaits; Å”ajÄs nosaukumvietÄs ir izolÄti lietotÄji savÄ nosaukumvietÄ. Visi Å”ie lietotÄji pieder dažÄdiem uzÅÄmumiem. Tika pieÅemts, ka Å”is klasteris ir jÄizmanto kÄ CDN. Tas nozÄ«mÄ, ka viÅi dod jums kopu, viÅi tur dod lietotÄju, jÅ«s dodaties tur uz savu vÄrdu telpu, izvietojat savas frontes.
Mans iepriekÅ”Äjais uzÅÄmums mÄÄ£inÄja pÄrdot Å”Ädu pakalpojumu. Un man palÅ«dza iedurt klasteru, lai redzÄtu, vai Å”is risinÄjums ir piemÄrots vai nÄ.
Es nonÄcu Å”ajÄ klasterÄ«. Man tika dotas ierobežotas tiesÄ«bas, ierobežota vÄrdu telpa. Tur esoÅ”ie puiÅ”i saprata, kas ir droŔība. ViÅi lasÄ«ja par lomÄm balstÄ«tu piekļuves kontroli (RBAC) pakalpojumÄ Kubernetes ā un viÅi to izmainÄ«ja tÄ, lai es nevarÄtu palaist podziÅus atseviŔķi no izvietoÅ”anas. Es neatceros problÄmu, kuru mÄÄ£inÄju atrisinÄt, palaižot podziÅu bez izvietoÅ”anas, taÄu es patieÅ”Äm vÄlÄjos palaist tikai podziÅu. Lai veicas, es nolÄmu redzÄt, kÄdas tiesÄ«bas man ir klasterÄ«, ko es varu darÄ«t, ko es nevaru darÄ«t un ko viÅi tur ir sagrÄbuÅ”i. TajÄ paÅ”Ä laikÄ es jums pastÄstÄ«Å”u, ko viÅi ir nepareizi konfigurÄjuÅ”i RBAC.
SagadÄ«jÄs, ka divu minÅ«Å”u laikÄ es saÅÄmu viÅu klastera administratoru, apskatÄ«ju visas blakus esoÅ”Äs nosaukumvietas, ieraudzÄ«ju tur strÄdÄjoÅ”Äs ražoÅ”anas frontes uzÅÄmumiem, kuri jau bija iegÄdÄjuÅ”ies pakalpojumu un izvietojuÅ”i to. Es tik tikko varÄju atturÄties no kÄda priekÅ”gala un galvenajÄ lapÄ ievietot kÄdu lamuvÄrdu.
Ar piemÄriem pastÄstÄ«Å”u, kÄ es to izdarÄ«ju un kÄ no tÄ sevi pasargÄt.
Bet vispirms ļaujiet man iepazÄ«stinÄt ar sevi. Mani sauc PÄvels Seļivanovs. Es esmu Sautbridžas arhitekts. Es saprotu Kubernetes, DevOps un visÄdas smalkas lietas. Sautbridžas inženieri un es to visu veidojam, un es konsultÄju.
Papildus mÅ«su galvenajÄm aktivitÄtÄm nesen esam uzsÄkuÅ”i projektus ar nosaukumu Slurms. MÄs cenÅ”amies savu prasmi strÄdÄt ar Kubernetes nedaudz nest masÄs, mÄcÄ«t arÄ« citus cilvÄkus strÄdÄt ar K8.
Par ko es Å”odien runÄÅ”u? ZiÅojuma tÄma ir acÄ«mredzama - par Kubernetes klastera droŔību. Bet es gribu uzreiz pateikt, ka Ŕī tÄma ir ļoti liela - un tÄpÄc es gribu nekavÄjoties precizÄt, par ko es noteikti nerunÄÅ”u. Es nerunÄÅ”u par uzlauztiem terminiem, kas jau simts reizes izmantoti internetÄ. Visa veida RBAC un sertifikÄti.
Es runÄÅ”u par to, kas mani un manus kolÄÄ£us sÄpina par droŔību Kubernetes klasterÄ«. MÄs redzam Ŕīs problÄmas gan starp pakalpojumu sniedzÄjiem, kas nodroÅ”ina Kubernetes klasterus, gan starp klientiem, kas vÄrÅ”as pie mums. Un pat no klientiem, kuri pie mums ierodas no citÄm konsultÄciju admin kompÄnijÄm. Tas ir, traÄ£Ädijas mÄrogs patiesÄ«bÄ ir ļoti liels.
Burtiski ir trÄ«s punkti, par kuriem es Å”odien runÄÅ”u:
- LietotÄja tiesÄ«bas pret pod tiesÄ«bÄm. LietotÄja tiesÄ«bas un pod tiesÄ«bas nav viens un tas pats.
- InformÄcijas vÄkÅ”ana par klasteru. Es parÄdÄ«Å”u, ka jÅ«s varat savÄkt visu nepiecieÅ”amo informÄciju no klastera bez Ä«paÅ”Äm tiesÄ«bÄm Å”ajÄ klasterÄ«.
- DoS uzbrukums klasterim. Ja mÄs nevaram apkopot informÄciju, mÄs jebkurÄ gadÄ«jumÄ varÄsim ievietot klasteri. Es runÄÅ”u par DoS uzbrukumiem klasteru vadÄ«bas elementiem.
VÄl viena vispÄrÄ«ga lieta, ko pieminÄÅ”u, ir tas, uz ko es Å”o visu testÄju, uz kÄ es noteikti varu teikt, ka tas viss darbojas.
Par pamatu Åemam Kubernetes klastera uzstÄdÄ«Å”anu, izmantojot Kubespray. Ja kÄds nezina, tas patiesÄ«bÄ ir Ansible lomu kopums. MÄs to pastÄvÄ«gi izmantojam savÄ darbÄ. LabÄ lieta ir tÄ, ka to var ripinÄt jebkur - var uzrullÄt uz dzelzs gabaliÅiem vai kaut kur mÄkonÄ«. Viena instalÄÅ”anas metode principÄ darbojas visam.
Å ajÄ klasterÄ« man bÅ«s Kubernetes v1.14.5. Viss Cube klasteris, kuru mÄs apsvÄrsim, ir sadalÄ«ts nosaukumvietÄs, katra nosaukumvieta pieder atseviŔķai komandai, un Ŕīs komandas locekļiem ir piekļuve katrai nosaukumvietai. ViÅi nevar doties uz dažÄdÄm nosaukumu telpÄm, tikai uz savu. Bet ir noteikts administratora konts, kuram ir tiesÄ«bas uz visu klasteru.
Es apsolÄ«ju, ka pirmÄ lieta, ko mÄs darÄ«sim, ir iegÅ«t klastera administratora tiesÄ«bas. Mums ir nepiecieÅ”ams speciÄli sagatavots pods, kas pÄrtrauks Kubernetes kopu. Viss, kas mums jÄdara, ir jÄpiemÄro Kubernetes klasterim.
kubectl apply -f pod.yaml
Å is pods nonÄks pie viena no Kubernetes klastera meistariem. Un pÄc tam klasteris ar prieku atgriezÄ«s mums failu ar nosaukumu admin.conf. ProgrammÄ Cube Å”is fails saglabÄ visus administratora sertifikÄtus un vienlaikus konfigurÄ klastera API. TÄdÄ veidÄ ir viegli iegÅ«t administratora piekļuvi, manuprÄt, 98% Kubernetes klasteru.
Es atkÄrtoju, ka Å”o aplikumu izveidoja viens jÅ«su klastera izstrÄdÄtÄjs, kuram ir piekļuve, lai izvietotu savus priekÅ”likumus vienÄ mazÄ nosaukumvietÄ. To visu ierobežo RBAC. ViÅam nebija tiesÄ«bu. Bet tomÄr sertifikÄts tika atgriezts.
Un tagad par Ä«paÅ”i sagatavotu pÄksti. MÄs to izpildÄm uz jebkura attÄla. KÄ piemÄru Åemsim debian:jessie.
Mums ir Ŕī lieta:
tolerations:
- effect: NoSchedule
operator: Exists
nodeSelector:
node-role.kubernetes.io/master: ""
Kas ir tolerance? Kubernetes klastera meistari parasti tiek apzÄ«mÄti ar kaut ko, ko sauc par piesÄrÅojumu. Un Ŕīs āinfekcijasā bÅ«tÄ«ba ir tÄda, ka pÄkstis nevar pieŔķirt galvenajiem mezgliem. Bet neviens neuztraucas nevienÄ pÄkstÄ« norÄdÄ«t, ka tas ir tolerants pret "infekciju". SadaÄ¼Ä Pielaide tikai teikts, ka, ja kÄdam mezglam ir NoSchedule, tad mÅ«su mezgls ir izturÄ«gs pret Å”Ädu infekciju - un nekÄdu problÄmu.
TÄlÄk mÄs sakÄm, ka mÅ«su apakÅ”daļa ir ne tikai iecietÄ«ga, bet arÄ« vÄlas Ä«paÅ”i mÄrÄ·Ät uz meistaru. Jo meistariem ir visgarŔīgÄkais, kas mums vajadzÄ«gs - visi sertifikÄti. TÄpÄc mÄs sakÄm nodeSelector ā un mums ir standarta uzlÄ«me uz galvenajÄm ierÄ«cÄm, kas ļauj no visiem klastera mezgliem atlasÄ«t tieÅ”i tos mezglus, kas ir galvenie.
Ar Ŕīm divÄm sekcijÄm viÅÅ” noteikti tiks pie meistara. Un viÅam atļaus tur dzÄ«vot.
Bet ar atnÄkÅ”anu pie meistara mums nepietiek. Tas mums neko nedos. TÄlÄk mums ir Ŕīs divas lietas:
hostNetwork: true
hostPID: true
MÄs norÄdÄm, ka mÅ«su pods, kuru mÄs palaižam, atradÄ«sies kodola nosaukumvietÄ, tÄ«kla nosaukumvietÄ un PID nosaukumvietÄ. Kad pods tiks palaists galvenajÄ ierÄ«cÄ, tas varÄs redzÄt visas Ŕī mezgla reÄlÄs, dzÄ«vÄs saskarnes, klausÄ«ties visu trafiku un redzÄt visu procesu PID.
Tad runa ir par sÄ«kumiem. PaÅem etcd un lasi ko gribi.
InteresantÄkÄ lieta ir Ŕī Kubernetes funkcija, kas tur ir pieejama pÄc noklusÄjuma.
volumeMounts:
- mountPath: /host
name: host
volumes:
- hostPath:
path: /
type: Directory
name: host
Un tÄ bÅ«tÄ«ba ir tÄda, ka mÄs varam teikt, ka mÄs palaižam pat bez tiesÄ«bÄm uz Å”o klasteru, ka mÄs vÄlamies izveidot hostPath tipa sÄjumu. Tas nozÄ«mÄ izvÄlÄties ceļu no saimniekdatora, kurÄ tiks palaists, un pieÅemt to kÄ apjomu. Un tad mÄs to saucam par nosaukumu: saimnieks. MÄs uzstÄdÄm visu Å”o saimniekdatora ceļu podÄ. Å ajÄ piemÄrÄ uz /host direktoriju.
Es to atkÄrtoÅ”u vÄlreiz. MÄs likÄm podam nÄkt pie galvenÄ, iegÅ«t resursdatora tÄ«klu un resursdatora PID tur ā un Å”ajÄ podÄ ievietojiet visu galvenÄs ierÄ«ces sakni.
JÅ«s saprotat, ka Debian mums darbojas bash, un Å”is bash darbojas zem saknes. Tas ir, mÄs tikko saÅÄmÄm root uz galvenÄ, bez jebkÄdÄm tiesÄ«bÄm Kubernetes klasterÄ«.
Tad viss uzdevums ir doties uz apakÅ”direktoriju /host /etc/kubernetes/pki, ja nemaldos, paÅemt tur visus klastera galvenos sertifikÄtus un attiecÄ«gi kļūt par klastera administratoru.
Ja paskatÄs Å”Ädi, Ŕīs ir dažas no visbÄ«stamÄkajÄm tiesÄ«bÄm aplikumos ā neatkarÄ«gi no lietotÄja tiesÄ«bÄm:
Ja man ir tiesÄ«bas palaist podziÅu kÄdÄ klastera nosaukumvietÄ, tad Å”im podam ir Ŕīs tiesÄ«bas pÄc noklusÄjuma. Es varu palaist priviliÄ£Ätus apvidus, un tas parasti ir visas tiesÄ«bas, praktiski saknes mezglÄ.
Mans mīļÄkais ir Root lietotÄjs. Un Kubernetes ir Ŕī opcija Run As Non-Root. Tas ir aizsardzÄ«bas veids pret hakeriem. Vai jÅ«s zinÄt, kas ir "MoldÄvijas vÄ«russ"? Ja jÅ«s pÄkÅ”Åi esat hakeris un nonÄkat pie mana Kubernetes klastera, tad mÄs, nabaga administratori, lÅ«dzam: āLÅ«dzu, norÄdiet savos podiÅos, ar kuriem jÅ«s uzlauzÄ«sit manu klasteru, palaist kÄ ne-root. PretÄjÄ gadÄ«jumÄ jÅ«s palaidÄ«sit procesu savÄ podÄ zem saknes, un jums bÅ«s ļoti viegli mani uzlauzt. LÅ«dzu, pasargÄ sevi no sevis."
Resursdatora ceļa apjoms, manuprÄt, ir ÄtrÄkais veids, kÄ iegÅ«t vÄlamo rezultÄtu no Kubernetes klastera.
Bet ko ar to visu iesÄkt?
Ikvienam normÄlam administratoram, kurÅ” sastopas ar Kubernetes, jÄdomÄ: āJÄ, es jums teicu, Kubernetes nedarbojas. TajÄ ir caurumi. Un viss Kubs ir muļķības. PatiesÄ«bÄ ir tÄda lieta kÄ dokumentÄcija, un, ja paskatÄs, tad ir sadaļa
Å is ir yaml objekts ā mÄs to varam izveidot Kubernetes klasterÄ« ā, kas kontrolÄ droŔības aspektus Ä«paÅ”i aprakstÄ. Tas nozÄ«mÄ, ka faktiski tÄ kontrolÄ tiesÄ«bas izmantot jebkuru resursdatora tÄ«klu, resursdatora PID, noteiktus skaļuma veidus, kas startÄÅ”anas laikÄ atrodas podiÅos. Ar Pod droŔības politikas palÄ«dzÄ«bu to visu var aprakstÄ«t.
Pod droŔības politikas interesantÄkÄ lieta ir tÄda, ka Kubernetes klasterÄ« visi PSP instalÄtÄji nav vienkÄrÅ”i aprakstÄ«ti nekÄdÄ veidÄ, tie vienkÄrÅ”i ir atspÄjoti pÄc noklusÄjuma. Pod droŔības politika ir iespÄjota, izmantojot uzÅemÅ”anas spraudni.
Labi, izvietosim klasterÄ« Pod droŔības politiku, pieÅemsim, ka mums ir daži pakalpojumu podi nosaukumvietÄ, kuriem var piekļūt tikai administratori. Teiksim, visos citos gadÄ«jumos pÄkstÄ«m ir ierobežotas tiesÄ«bas. TÄ kÄ, visticamÄk, izstrÄdÄtÄjiem nav nepiecieÅ”ams jÅ«su klasterÄ« palaist priviliÄ£Ätus aplikÄcijas.
Un Ŕķiet, ka ar mums viss ir kÄrtÄ«bÄ. Un mÅ«su Kubernetes klasteru nevar uzlauzt divÄs minÅ«tÄs.
Ir problÄma. VisticamÄk, ja jums ir Kubernetes klasteris, jÅ«su klasterÄ« ir instalÄta uzraudzÄ«ba. Es pat varÄtu paredzÄt, ka, ja jÅ«su klasterim ir monitorings, to sauks par Prometeju.
Tas, ko es jums pastÄstÄ«Å”u, bÅ«s spÄkÄ gan Prometheus operatoram, gan Prometheus, kas tiek piegÄdÄts tÄ«rÄ veidÄ. JautÄjums ir tÄds, ka, ja es nevaru tik Ätri dabÅ«t klasterÄ« administratoru, tas nozÄ«mÄ, ka man ir jÄmeklÄ vairÄk. Un es varu meklÄt ar jÅ«su uzraudzÄ«bas palÄ«dzÄ«bu.
DroÅ”i vien visi lasa vienus un tos paÅ”us rakstus par HabrĆ©, un monitorings atrodas monitoringa nosaukumvietÄ. StÅ«res diagrammu visiem sauc aptuveni vienÄdi. Es domÄju, ka, ja jÅ«s instalÄjat stable/prometheus, jÅ«s saÅemsit aptuveni tÄdus paÅ”us nosaukumus. Un, visticamÄk, man pat nevajadzÄs uzminÄt DNS nosaukumu jÅ«su klasterÄ«. Jo tas ir standarts.
TÄlÄk mums ir noteikts dev ns, kurÄ varat palaist noteiktu pod. Un tad no Ŕī podiÅa ir ļoti viegli izdarÄ«t kaut ko lÄ«dzÄ«gu:
$ curl http://prometheus-kube-state-metrics.monitoring
prometheus-kube-state-metrics ir viens no Prometheus eksportÄtÄjiem, kas apkopo metriku no paÅ”as Kubernetes API. Tur ir daudz datu, kas darbojas jÅ«su klasterÄ«, kas tas ir, kÄdas problÄmas jums ir ar to.
KÄ vienkÄrÅ”s piemÄrs:
kube_pod_container_info{namespace=ākube-systemā,pod=ākube-apiserver-k8s- 1ā³,container=ākube-apiserverā,image=
"gcr.io/google-containers/kube-apiserver:v1.14.5"
,image_id=Ā»docker-pullable://gcr.io/google-containers/kube- apiserver@sha256:e29561119a52adad9edc72bfe0e7fcab308501313b09bf99df4a96 38ee634989ā³,container_id=Ā»docker://7cbe7b1fea33f811fdd8f7e0e079191110268f2 853397d7daf08e72c22d3cf8bĀ»} 1
Veicot vienkÄrÅ”u ÄokuroÅ”anÄs pieprasÄ«jumu no nepiederoÅ”as ierÄ«ces, varat iegÅ«t Å”Ädu informÄciju. Ja nezinÄt, kuru Kubernetes versiju izmantojat, tas jums viegli pateiks.
Un pats interesantÄkais ir tas, ka papildus kube-state-metrics piekļuvei jÅ«s varat tikpat viegli piekļūt arÄ« paÅ”am Prometheus. No turienes varat apkopot metriku. JÅ«s pat varat izveidot metriku no turienes. Pat teorÄtiski jÅ«s varat izveidot Å”Ädu vaicÄjumu no Prometheus klastera, kas to vienkÄrÅ”i izslÄgs. Un jÅ«su uzraudzÄ«ba pÄrtrauks darboties no kopas.
Un Å”eit rodas jautÄjums, vai kÄds ÄrÄjs monitorings uzrauga jÅ«su uzraudzÄ«bu. Es tikko saÅÄmu iespÄju darboties Kubernetes klasterÄ« bez jebkÄdÄm sekÄm sev. JÅ«s pat nezinÄsiet, ka es tur darbojos, jo vairs nav nekÄdas uzraudzÄ«bas.
TÄpat kÄ ar PSP, Ŕķiet, ka problÄma ir tajÄ, ka visas Ŕīs smalkÄs tehnoloÄ£ijas - Kubernetes, Prometheus - tÄs vienkÄrÅ”i nedarbojas un ir pilnas ar caurumiem. Ne Ä«sti.
Ir tÄda lieta -
Ja esat parasts administrators, tad, visticamÄk, jÅ«s zinÄt par tÄ«kla politiku, ka tas ir tikai vÄl viens yaml, kuru klasterÄ« jau ir daudz. Un dažas tÄ«kla politikas noteikti nav vajadzÄ«gas. Un pat ja jÅ«s izlasÄt, kas ir tÄ«kla politika, ka tas ir Kubernetes yaml ugunsmÅ«ris, tas ļauj ierobežot piekļuves tiesÄ«bas starp nosaukumvietÄm, starp podiem, tad jÅ«s noteikti nolÄmÄt, ka Kubernetes ugunsmÅ«ris yaml formÄtÄ ir balstÄ«ts uz nÄkamajÄm abstrakcijÄm. ... NÄ, nÄ. Tas noteikti nav nepiecieÅ”ams.
Pat ja neesat teicis saviem droŔības speciÄlistiem, ka, izmantojot savu Kubernetes, varat izveidot ļoti vienkÄrÅ”u un vienkÄrÅ”u ugunsmÅ«ri, turklÄt ļoti detalizÄtu. Ja viÅi to vÄl nezina un jÅ«s netraucÄ: āNu, dod man, dod man...ā Tad jebkurÄ gadÄ«jumÄ jums ir nepiecieÅ”ama tÄ«kla politika, lai bloÄ·Ätu piekļuvi dažÄm pakalpojumu vietÄm, kuras var izÅemt no jÅ«su klastera. bez jebkÄdas atļaujas.
TÄpat kÄ manis sniegtajÄ piemÄrÄ, varat iegÅ«t kube stÄvokļa metriku no jebkuras Kubernetes klastera nosaukumvietas bez jebkÄdÄm tiesÄ«bÄm to darÄ«t. TÄ«kla politikÄm ir slÄgta piekļuve no visÄm pÄrÄjÄm nosaukumvietÄm pÄrraudzÄ«bas nosaukumvietai, un tas arÄ« viss: nav piekļuves, nav problÄmu. VisÄs esoÅ”ajÄs diagrammÄs, gan standarta Prometheus, gan Prometheus, kas atrodas operatorÄ, stÅ«res vÄrtÄ«bÄs ir vienkÄrÅ”i iespÄja tiem vienkÄrÅ”i iespÄjot tÄ«kla politikas. Jums tas vienkÄrÅ”i jÄieslÄdz, un tie darbosies.
Å eit patieÅ”Äm ir viena problÄma. BÅ«dams parasts bÄrdains administrators, jÅ«s, visticamÄk, nolÄmÄt, ka tÄ«kla politikas nav vajadzÄ«gas. Un pÄc visu veidu rakstu lasÄ«Å”anas par resursiem, piemÄram, Habr, jÅ«s nolÄmÄt, ka flanelis, Ä«paÅ”i ar saimniekdatora vÄrtejas režīmu, ir labÄkÄ lieta, ko varat izvÄlÄties.
Ko darīt?
Varat mÄÄ£inÄt pÄrizvietot Kubernetes klasterÄ« esoÅ”o tÄ«kla risinÄjumu, mÄÄ£inÄt aizstÄt to ar kaut ko funkcionÄlÄku. Par to paÅ”u Calico, piemÄram. Bet es gribu uzreiz teikt, ka uzdevums mainÄ«t tÄ«kla risinÄjumu Kubernetes darba klasterÄ« ir diezgan nenozÄ«mÄ«gs. Divreiz atrisinÄju (abas reizes gan teorÄtiski), bet SlurmÄ āāpat parÄdÄ«jÄm, kÄ to izdarÄ«t. MÅ«su studentiem mÄs parÄdÄ«jÄm, kÄ mainÄ«t tÄ«kla risinÄjumu Kubernetes klasterÄ«. PrincipÄ varat mÄÄ£inÄt pÄrliecinÄties, ka ražoÅ”anas klasterÄ« nav dÄ«kstÄves. Bet, visticamÄk, jums tas neizdosies.
Un problÄma patiesÄ«bÄ tiek atrisinÄta ļoti vienkÄrÅ”i. KlasterÄ« ir sertifikÄti, un jÅ«s zinÄt, ka jÅ«su sertifikÄti beigsies pÄc gada. Nu, un parasti parasts risinÄjums ar sertifikÄtiem klasterÄ« - kÄpÄc mÄs uztraucamies, celsim blakus jaunu klasteri, ļausim vecajam sapuvÄt un visu pÄrkÄrtosim. Tiesa, kad tas sapuvis, mums bÅ«s jÄpasÄž viena diena, bet Å”eit ir jauns klasteris.
Paceļot jaunu kopu, tajÄ paÅ”Ä laikÄ flaneļa vietÄ ievietojiet Calico.
Ko darÄ«t, ja jÅ«su sertifikÄti tiek izsniegti uz simts gadiem un jÅ«s neplÄnojat pÄrdalÄ«t klasteru? Ir tÄda lieta kÄ Kube-RBAC-Proxy. Å Ä« ir ļoti forÅ”a izstrÄde, kas ļauj iegult sevi kÄ blakusvÄÄ£a konteineru jebkurÄ Kubernetes klastera podÄ. Un tas faktiski pievieno atļauju Å”im podam, izmantojot paÅ”a Kubernetes RBAC.
Ir viena problÄma. IepriekÅ” Å”is Kube-RBAC-Proxy risinÄjums tika iebÅ«vÄts operatora Prometheus. Bet tad viÅÅ” bija prom. Tagad modernÄs versijas paļaujas uz to, ka jums ir tÄ«kla politika, un aizveriet to, izmantojot tÄs. Un tÄpÄc mums diagramma bÅ«s nedaudz jÄpÄrraksta. PatiesÄ«bÄ, ja jÅ«s dodaties uz
Ir vÄl viena neliela problÄma. Prometejs nav vienÄ«gais, kas izsniedz savus rÄdÄ«tÄjus ikvienam. Visi mÅ«su Kubernetes klastera komponenti var arÄ« atgriezt savus rÄdÄ«tÄjus.
Bet, kÄ jau teicu, ja nevarat piekļūt klasterim un apkopot informÄciju, varat vismaz nodarÄ«t kaitÄjumu.
TÄpÄc es Ätri parÄdÄ«Å”u divus veidus, kÄ var sabojÄt Kubernetes kopu.
JÅ«s smiesieties, kad es jums to pateikÅ”u, Å”ie ir divi reÄli dzÄ«ves gadÄ«jumi.
PirmÄ metode. Resursu izsÄ«kÅ”ana.
PalaidÄ«sim vÄl vienu Ä«paÅ”u podiÅu. Tam bÅ«s Å”Äda sadaļa.
resources:
requests:
cpu: 4
memory: 4Gi
KÄ jÅ«s zinÄt, pieprasÄ«jumi ir CPU un atmiÅas apjoms, kas resursdatorÄ ir rezervÄts konkrÄtiem podiem ar pieprasÄ«jumiem. Ja mums ir Äetru kodolu resursdators Kubernetes klasterÄ« un Äetri CPU podi tur ierodas ar pieprasÄ«jumiem, tas nozÄ«mÄ, ka Å”im resursdatoram vairs nevarÄs nonÄkt neviens pods ar pieprasÄ«jumiem.
Ja es palaižu Å”Ädu podziÅu, es izpildÄ«Å”u komandu:
$ kubectl scale special-pod --replicas=...
Tad neviens cits nevarÄs izvietot Kubernetes klasterÄ«. Jo visiem mezgliem beigsies pieprasÄ«jumi. Un tÄdÄjÄdi es apturÄÅ”u jÅ«su Kubernetes kopu. Ja es to daru vakarÄ, es varu apturÄt izvietoÅ”anu diezgan ilgu laiku.
Ja mÄs vÄlreiz paskatÄ«simies uz Kubernetes dokumentÄciju, mÄs redzÄsim Å”o lietu, ko sauc par Limit Range. Tas nosaka resursus klasteru objektiem. JÅ«s varat uzrakstÄ«t Limit Range objektu yaml, lietot to noteiktÄm nosaukumvietÄm - un tad Å”ajÄ nosaukumvietÄ varat teikt, ka jums ir noklusÄjuma, maksimÄlie un minimÄlie resursi podiem.
Ar Å”Ädas lietas palÄ«dzÄ«bu mÄs varam ierobežot lietotÄjus konkrÄtÄs komandu produktu nosaukumvietÄs, lai savos aplikumos norÄdÄ«tu visa veida nepatÄ«kamas lietas. Bet diemžÄl, pat ja jÅ«s sakÄt lietotÄjam, ka viÅÅ” nevar palaist aplikumus ar pieprasÄ«jumiem vairÄk nekÄ vienam CPU, ir tik brÄ«niŔķīga mÄroga komanda, vai arÄ« viÅi var veikt mÄrogoÅ”anu, izmantojot informÄcijas paneli.
Un Å”eit nÄk metode numur divi. MÄs izlaižam 11 111 111 111 111 pÄkstis. Tie ir vienpadsmit miljardi. Tas nav tÄpÄc, ka es izdomÄju Å”Ädu numuru, bet gan tÄpÄc, ka es pats to redzÄju.
ÄŖsts stÄsts. VÄlu vakarÄ grasÄ«jos iziet no biroja. Es redzu kaktÄ sÄžam izstrÄdÄtÄju grupu un izmisÄ«gi kaut ko dara ar saviem klÄpjdatoriem. Es piegÄju pie puiÅ”iem un jautÄju: "Kas ar jums noticis?"
Nedaudz agrÄk, ap deviÅiem vakarÄ, viens no izstrÄdÄtÄjiem gatavojÄs doties mÄjÄs. Un es nolÄmu: "Tagad es samazinÄÅ”u savu pieteikumu lÄ«dz vienam." Nospiedu vienu, bet internets nedaudz palÄninÄjÄs. ViÅÅ” vÄlreiz nospieda vienu, viÅÅ” nospieda vienu un noklikŔķinÄja uz Enter. Es bakstÄ«ju uz visu, ko varÄju. Tad atdzÄ«vojÄs internets ā un viss sÄka samazinÄties lÄ«dz Å”im skaitlim.
Tiesa, Å”is stÄsts nenotika Kubernetes, tajÄ laikÄ tas bija Nomad. Tas beidzÄs ar faktu, ka pÄc stundas mÅ«su mÄÄ£inÄjumiem apturÄt Nomad no neatlaidÄ«giem mÄrogoÅ”anas mÄÄ£inÄjumiem Nomads atbildÄja, ka viÅÅ” nepÄrtrauks mÄrogoÅ”anu un nedarÄ«s neko citu. "Esmu noguris, es dodos prom." Un viÅÅ” saritinÄjÄs.
Protams, es mÄÄ£inÄju to darÄ«t arÄ« Kubernetes. Kubernetess nebija apmierinÄts ar vienpadsmit miljardiem pÄkstÄ«m, viÅÅ” teica: āEs nevaru. PÄrsniedz iekÅ”Äjos mutes aizsargus." Bet 1 000 000 000 pÄkstis varÄtu.
Atbildot uz vienu miljardu, Kubs neatkÄpÄs sevÄ«. ViÅÅ” patieÅ”Äm sÄka mÄrogot. Jo tÄlÄk process gÄja, jo vairÄk laika viÅam prasÄ«ja jaunu pÄkstÄ«m. Bet tomÄr process turpinÄjÄs. VienÄ«gÄ problÄma ir tÄ, ka, ja es varu neierobežoti palaist podus savÄ nosaukumvietÄ, tad pat bez pieprasÄ«jumiem un ierobežojumiem es varu palaist tik daudz podiÅu ar dažiem uzdevumiem, ka ar Å”o uzdevumu palÄ«dzÄ«bu mezgli sÄks pievienoties atmiÅÄ, CPU. Kad es palaižu tik daudz podziÅu, informÄcijai no tiem vajadzÄtu nonÄkt krÄtuvÄ, tas ir, utt. Un, kad tur nonÄk pÄrÄk daudz informÄcijas, krÄtuve sÄk atgriezties pÄrÄk lÄni - un Kubernetes sÄk kļūt blÄvi.
Un vÄl viena problÄma... KÄ zinÄms, Kubernetes vadÄ«bas elementi nav viena centrÄlÄ lieta, bet vairÄkas sastÄvdaļas. Jo Ä«paÅ”i ir kontroliera pÄrvaldnieks, plÄnotÄjs un tÄ tÄlÄk. Visi Å”ie puiÅ”i vienlaikus sÄks darÄ«t nevajadzÄ«gu, stulbu darbu, kas laika gaitÄ sÄks aizÅemt arvien vairÄk laika. Kontroliera pÄrvaldnieks izveidos jaunus aplikumus. PlÄnotÄjs mÄÄ£inÄs viÅiem atrast jaunu mezglu. VisticamÄk, drÄ«z jÅ«su klasterÄ« beigsies jauni mezgli. Kubernetes klasteris sÄks strÄdÄt arvien lÄnÄk.
Bet es nolÄmu iet vÄl tÄlÄk. KÄ zinÄms, Kubernetes ir tÄda lieta, ko sauc par servisu. Nu, pÄc noklusÄjuma jÅ«su klasteros, visticamÄk, pakalpojums darbojas, izmantojot IP tabulas.
Ja palaižat, piemÄram, vienu miljardu aplikumu un pÄc tam izmantojat skriptu, lai piespiestu Kubernetis izveidot jaunus pakalpojumus:
for i in {1..1111111}; do
kubectl expose deployment test --port 80
--overrides="{"apiVersion": "v1",
"metadata": {"name": "nginx$i"}}";
done
Visos klastera mezglos aptuveni vienlaicÄ«gi tiks Ä£enerÄti arvien vairÄk jaunu iptables noteikumu. TurklÄt katram pakalpojumam tiks Ä£enerÄts viens miljards iptables noteikumu.
Es visu Å”o lietu pÄrbaudÄ«ju uz vairÄkiem tÅ«kstoÅ”iem, lÄ«dz pat desmit. Un problÄma ir tÄ, ka jau pie Ŕī sliekÅ”Åa ir diezgan problemÄtiski veikt ssh mezglam. Jo paciÅas, ejot cauri tik daudzÄm Ä·ÄdÄm, sÄk justies ne pÄrÄk labi.
Un arÄ« tas viss tiek atrisinÄts ar Kubernetes palÄ«dzÄ«bu. Ir tÄds Resursu kvotas objekts. Iestata klastera nosaukumvietai pieejamo resursu un objektu skaitu. MÄs varam izveidot yaml objektu katrÄ Kubernetes klastera nosaukumvietÄ. Izmantojot Å”o objektu, mÄs varam teikt, ka Å”ai nosaukumvietai mums ir pieŔķirts noteikts pieprasÄ«jumu un ierobežojumu skaits, un tad mÄs varam teikt, ka Å”ajÄ nosaukumu telpÄ ir iespÄjams izveidot 10 pakalpojumus un 10 podi. Un atseviŔķs izstrÄdÄtÄjs var vismaz sevi vakaros nosmakt. Kubernetes viÅam pateiks: "JÅ«s nevarat mÄrogot savus pÄkstis lÄ«dz Å”Ädai summai, jo resurss pÄrsniedz kvotu." Tas arÄ« viss, problÄma atrisinÄta.
Å ajÄ sakarÄ rodas viens problemÄtisks punkts. JÅ«s jÅ«tat, cik grÅ«ti kļūst izveidot nosaukumvietu Kubernetes. Lai to izveidotu, mums ir jÄÅem vÄrÄ daudzas lietas.
Resursu kvota + ierobežojuma diapazons + RBAC
ā¢ Izveidojiet nosaukumvietu
ā¢ Izveidojiet ierobežojuma diapazonu iekÅ”pusÄ
ā¢ Izveidot resursu kvotas ietvaros
ā¢ Izveidojiet pakalpojuma kontu CI
ā¢ Izveidot lomu piesaisti CI un lietotÄjiem
ā¢ PÄc izvÄles palaidiet nepiecieÅ”amos servisa blokus
TÄpÄc vÄlos izmantot iespÄju, lai padalÄ«tos ar saviem notikumiem. Ir tÄda lieta, ko sauc par SDK operatoru. Tas ir veids, kÄ Kubernetes klasteris var rakstÄ«t operatorus. JÅ«s varat rakstÄ«t paziÅojumus, izmantojot Ansible.
SÄkumÄ tas tika rakstÄ«ts Ansible, un tad es redzÄju, ka ir SDK operators, un Ansible lomu pÄrrakstÄ«ju par operatoru. Å is paziÅojums ļauj izveidot objektu Kubernetes klasterÄ«, ko sauc par komandu. KomandÄ tas ļauj aprakstÄ«t Ŕīs komandas vidi yaml valodÄ. Un komandas vidÄ tas ļauj mums aprakstÄ«t, ka mÄs pieŔķiram tik daudz resursu.
Mazliet
Un noslÄgumÄ. Ko darÄ«t ar Å”o visu?
PirmkÄrt. Pod droŔības politika ir laba. Un, neskatoties uz to, ka neviens no Kubernetes instalÄtÄjiem tos neizmanto lÄ«dz Å”ai dienai, jums tie joprojÄm ir jÄizmanto savÄs kopÄs.
TÄ«kla politika nav tikai vÄl viena nevajadzÄ«ga funkcija. Tas ir tas, kas patieÅ”Äm ir vajadzÄ«gs klasterÄ«.
LimitRange/ResourceQuota ā ir pienÄcis laiks to izmantot. MÄs sÄkÄm to lietot jau sen, un ilgu laiku es biju pÄrliecinÄts, ka visi to lieto. IzrÄdÄ«jÄs, ka tas notiek reti.
Papildus tam, ko minÄju ziÅojuma laikÄ, ir arÄ« nedokumentÄtas funkcijas, kas ļauj uzbrukt klasterim. Nesen izlaists
Dažas lietas ir tik skumjas un sÄpÄ«gas. PiemÄram, noteiktos apstÄkļos Kubernetes klastera kubeleti var nodot warlocks direktorijas saturu neautorizÄtam lietotÄjam.
Paldies visiem.
Avots: www.habr.com