Pelnas:
- Gebėjimas suprasti pagrindinius objektus (Pod, Deployment, Service, ConfigMap, Secret, Namespace) ir deklaratyviąją Kubernetes filosofiją bei sukurti tvirtus dirbtinio intelekto manifestus.
- Galimybė paruošti manifestus gamybai ir apsaugoti naudojant išteklių apribojimus, sveikatos patikrinimus (zondus), fiksuotas vaizdo žymas ir siaurą RBAC
- Gebėjimas patikrinti teisingą kontekstą prieš vykdymą ir taikyti sausosios eigos drausmę su sausuoju paleidimu/diff
Lengva paleisti vieną konteinerį. Tačiau sukurti sistemą, kuri paskirsto šimtus konteinerių dešimtyse serverių, automatiškai paleidžiama iš naujo, kai vienas iš jų sugenda, kartoja ją, kai apkrova didėja, ir atnaujina ją be prastovų? Tai orkestravimas, o pramonės standartinis įrankis yra Kubernetes (sutrumpintai K8s) – platforma, kuri automatiškai diegia, keičia mastelį ir tvarko konteinerius visame klasteryje. „Kubernetes“ yra galingas, bet sudėtingas: viską apibrėžia ilgi, įtraukoms jautrūs YAML failai, vadinami manifestais. Čia dirbtinis intelektas suteikia gaivaus oro gurkšnį; Turėdamas tinkamą kontekstą, jis greitai sukuria šiuos manifestus ir iššifruoja jų paslaptingas klaidas.
Tačiau „Kubernetes“ neteisingas manifestas reiškia, kad nepavyksta išlaikyti visos paslaugos, netinkamai keičiamas mastelis arba paliekamas pažeidžiamumas. Jūs privalote suprasti ir patikrinti kiekvieną AI sukurtą manifestą – ypač prieš taikant kubectl.
„Kubernetes“ pagrindiniai objektai
Norėdami atlikti Kubernetes auditą, turėtumėte žinoti pagrindines sąvokas:
- Pod: mažiausias darbinis blokas; Jame yra vienas ar keli konteineriai. Paprastai Pod nėra naudojamas tiesiogiai, bet naudojami jį valdantys pirminiai objektai.
- Diegimas: apibrėžia, kiek programos kopijų bus paleista, kuris vaizdas bus naudojamas ir kaip jis bus atnaujintas. Jei Pod sugenda, jis bus automatiškai sukurtas iš naujo.
- Paslauga: suteikia fiksuotą tinklo adresą ir apkrovos balansavimą ankštims; Net jei ankštys ateina ir išeina, prieigos adresas nesikeičia.
- ConfigMap ir Secret: Konfigūracijos vertes ir slaptą informaciją išlaiko atskirai nuo Pods. „ConfigMap“ skirta aiškiems nustatymams, „Secret“ skirta jautrioms reikšmėms.
- Vardų erdvė: sritis, logiškai padalijanti ir izoliuojanti išteklius (pvz., dev, prod).
- Įėjimas: taisyklių rinkinys, nukreipiantis HTTP srautą iš išorinio pasaulio į klasterio paslaugas.
„Helm“ yra „Kubernetes“ „paketų tvarkyklė“: ji leidžia sukurti pasikartojančių manifestų (diagramų) šablonus ir su viena komanda įdiegti juos su skirtingomis reikšmėmis skirtingose aplinkose. AI sukuria ir neapdorotą manifestą, ir Helm diagramą.
Kodėl tiek daug objektų? Kadangi pagrindinė „Kubernetes“ filosofija yra deklaratyvi: jūs apibrėžiate „kaip norite, kad sistema galiausiai atrodytų“ (pvz., „visada turi veikti 3 šios programos kopijos“), o „Kubernetes“ nuolat perkelia esamą būseną arčiau norimos būsenos. Jei Pod miršta, jis sukuria naują; jei mazgas nusileidžia, jis perkelia darbo krūvį į kitą mazgą. Štai kodėl manifestai yra ne komandos „daryk“, o „tebūnie taip“ receptai. Šio skirtumo suvokimas yra labai svarbus skaitant manifestus, kuriuos sukuria AI: kiekviena sritis apibūdina dalį norimos sistemos būsenos. Neteisingas domenas reiškia, kad „Kubernetes“ siekia neteisingo tikslo – ir tas tikslas tyliai, atkakliai vykdomas.
Patarimas: „Kubernetes“ sistemoje svarbiausias saugaus testavimo įrankis yra kubectl apply --dry-run=server -f file.yaml: jis parodo, ar serveris priims ir ką daryti netaikant manifesto. Prieš taikydami manifestą gaminiui būtinai paleiskite sausą paleidimą ir kubectl diff.
Žingsnis po žingsnio: manifestų kūrimas naudojant AI
- Apibūdinkite paraišką ir poreikį. Vaizdo pavadinimas, prievadas, kiek kopijų, išteklių limitai (CPU/atmintis).
- Prašyti diegimo + paslaugos. Paprastai abu reikalingi kartu.
- Atskira konfigūracija ir paslaptis. Nustatymai į ConfigMap, jautrios reikšmės į Secret.
- Pridėkite sveikatos patikrinimus. livenessProbe (ar jis veikia) ir ReadinessProbe (ar jis paruoštas srautui) yra labai svarbūs.
- Nustatykite išteklių limitą. Be užklausų / apribojimų Pod gali sunaudoti visą mazgą.
- Patvirtinkite naudodami „--dry-run“ ir „diff“, tada pritaikykite. Pirmiausia bandymo vardų erdvėje.
Sauga: „Kubernetes“ specifinė rizika
- Paslaptis tikrai nėra paslaptis – tai tik bazė64. Kubernetes Secret objektas base64 koduoja reikšmes; Tai nėra šifravimas, jis lengvai iššifruojamas. Kad būtų užtikrintas tikras privatumas, reikalingas etcd šifravimas ir išorinė saugykla (Vault, debesies paslapčių tvarkyklė). Niekada nepateikite slaptų manifestų tiesiogiai Git (yra tam tikrų sprendimų, pvz., „Sealed Secrets“ / „External Secrets“).
- Nustatykite išteklių limitą. Pod be apribojimų gali sugadinti visą mazgą dėl atminties nutekėjimo.
- Minimalus autoritetas (RBAC). Naudojant vaidmenimis pagrįstą prieigos valdymą, kiekviena paslauga / vartotojas turi tik jai reikalingus leidimus. AI kartais suteikia didelį klasterį-admin; susiaurinti tai.
- Nenaudokite „naujausios“ vaizdo žymos. Nežinote, kuri versija veikia, ir negalite jos grąžinti.
Įspėjimas: kubectl trynimas arba neteisingas pritaikymas gali sunaikinti tiesioginį diegimą. Prieš paleisdami komandas būtinai patikrinkite, kurioje vardų erdvėje esate (kubectl config current-context); Atsitiktinis darbas yra dažna nelaimė gamybos kontekste.
Neapdorotas manifestas ir vairo lentelė
kriterijus
Neapdorotas YAML manifestas
Vairo diagrama
Montavimas
kubectl taikyti -f
vairo montavimas
Multimedija (kurėjas / gaminys)
Kopijuoti-įklijuoti, yra klaidų
Viena diagrama, skirtingos reikšmės.yaml
Versija / atšaukimas
ranka
lengva su vairo atsukimu
Mokymosi kreivė
žemas
vidutinis
kada
Maža, vieninga aplinka
Multimedija, pasikartojantis aptarnavimas
trys mini dėklai
1 atvejis – sugedusios paslaugos paslaptis. Pod buvo nuolat paleistas iš naujo (CrashLoopBackOff). Komanda atidavė žurnalus ir manifestą AI; AI parodė, kad Pod niekada nebuvo laikomas "paruoštu", nes parengtisProbe'as žiūrėjo į netinkamą prievadą. Sutvarkė prievadą, per 10 minučių paslauga tapo stabili. Šių santykių užmezgimas rankiniu būdu gali užtrukti kelias valandas.
2 atvejis – ribų nenustatymas sulaužė mazgą. Diegime nebuvo jokių apribojimų; Dėl atminties nutekėjimo „Pod“ išpūtė ir sudužo visas mazgas, taip pat sugriuvo ir kaimyninės paslaugos. Po incidento jie privertė dirbtinį intelektą pasakyti „pridėkite pagrįstų procesoriaus / atminties užklausų ir apribojimų visiems diegimams“ ir padarė jį standartiniu. Viena trūkstama linija kainavo valandas prastovos.
3 atvejis – užfiksuotas didelis RBAC. Tyrimo metu buvo nustatyta, kad AI sukurtas ServiceAccount manifestas yra susietas su klasterio administratoriaus vaidmeniu – tai reiškia, kad paslauga gali valdyti visą klasterį. Komanda susiaurino leidimą skaityti tik Pods savo vardų srityje. Mažiausių privilegijų principas pašalino saugumo spragą.
Keturi kopijuojami šablonai
1) Diegimas + paslaugų teikimas:
Parašykite „Kubernetes“ diegimo ir aptarnavimo manifestą. Taikymas: [AD], vaizdas: [vaizdas: fiksuota versija], prievadas: [X], kopija: [N]. Taisyklės: - Pridėti procesoriaus/atminties užklausas ir apribojimus. - Apibrėžkite gyvumą ir parengtį. - Skaitykite konfigūraciją iš ConfigMap, slaptą iš slaptojo objekto; Neįterpkite verčių į manifestą, naudokite vietos rezervavimo ženklus. - NENAUDOKITE vaizdo žymos ":latest". Pateikite su aprašymu.
2) Akivaizdžių klaidų sprendimas:
Dabartinis Pod yra [CrashLoopBackOff / Laukiama / ImagePullBackOff] būsenos. Remdamiesi toliau pateiktu manifestu ir „kubectl description“ išvestimi, išvardykite galimas pagrindines priežastis pagal tikimybę ir kiekvienai išleiskite patvirtinimo komandą. Manifestas: [YAML] Apibūdinkite: [OUTPUT]
3) Saugumo / vientisumo patikrinimas:
Patikrinkite šį „Kubernetes“ aprašą: ar trūksta išteklių limito, ar nėra problemos, ar yra :latest žyma, ar yra per platus RBAC / leidimas, ar paslaptis įterpta manifeste? Išvadas surašykite pagal svarbą ir pataisykite. Manifestas: [YAML]
4) Konvertavimas į vairo diagramą:
Konvertuoti šiuos neapdorotus aprašus į daugkartinio naudojimo Helm diagramą: kurios reikšmės turėtų būti perduotos į value.yaml (vaizdas, kopija, šaltinis, aplinka)? Rodyti diagramos struktūrą ir pavyzdines vertybes.yaml.Manifests: [YAML]
Silpnas raginimas / Stiprus raginimas
Silpna: „Parašykite Kubernetes YAML mano programai“.
Rezultatas: nekontroliuojamas, neribojamas diegimas su :latest žyma, įterpiant slaptą lygumą; Nesaugus ir trapus gamyboje.
Stiprus: „Rašykite „Kubernetes“ diegimą + paslaugą. Vaizdo mano programa: 1.4.2, 3 kopijos, 8080 prievadų. CPU 100–500 m, atmintis 128Mi-512Mi pridėti užklausų / apribojimų. Įdėkite gyvumo zondą /healthz, parengties zondą /ready. Perskaitykite jį su slaptu objektu, su aprašymu.
Skirtumas: antroji greitoji versija suteikia mastą, išteklių limitus, sveikatos patikrinimus ir slaptą taisyklę; Išeiga yra artima gamybai ir saugi.
Dažnos klaidos
- Nenustatoma išteklių apribojimų. Vienas Pod gali sunaudoti visą mazgą.
- Nepridedant sveikatos patikrinimo (zondo). „Kubernetes“ negali aptikti sudužusio / neparengto Pod.
- `:naujausia` žyma. Pasidaro neaišku, kuri versija veikia, jos negalima atšaukti.
- Paslapties perdavimas tiesiai Gitui. Base64 nėra šifravimas; visi tai sprendžia.
- Vykdomos komandos netinkamame kontekste / vardų erdvėje. Dažniausias būdas sudužti gaminant.
- praleidžiant „--dry-run“/„diff“. Prieš įgyvendinimą nematyti, kas bus.
Apibendrinant
Kubernetes yra galingas, bet sudėtingas orkestrantas, kuris automatiškai diegia, keičia ir optimizuoja konteinerius visoje grupėje; Viską apibrėžia manifestai YAML, kuriuos Helm šablonuoja. AI greitai sukuria diegimo/paslaugų manifestus ir vairo diagramas, išsprendžia paslaptingas klaidas, tačiau jūs turite aiškiai paprašyti išteklių apribojimo, būklės patikrinimo, nekeičiamos vaizdo žymos, siauros RBAC ir slaptų saugumo taisyklių. -- Sausas veikimas, diferencijavimas ir teisingas konteksto tikrinimas yra įpročiai, užkertantys kelią gaminių gedimams.
Taikymo užduotis
Leiskite dirbtiniu intelektu sugeneruoti pavyzdinės programos manifestą su šablonu „Diegimas ir paslaugos generavimas“. Tada: (1) patikrinkite, ar nėra išteklių limito, patikrinimo, :naujausio ir slaptumo, naudodami šabloną „Saugumo / sveiko proto patikra“; (2) jei įmanoma, paleiskite kubectl apply --dry-run=server bandymo klasteryje / minikube ir nuskaitykite išvestį; (3) atkreipkite dėmesį į du svarbiausius saugos / patvarumo elementus, kurių jums trūksta.
kontrolinis sąrašas
- [ ] Prie užklausos pridėjau vaizdo versiją, kopijų skaičių, prievado ir išteklių apribojimus.
- [ ] Prie manifesto pridėjau gyvumo ir pasirengimo zondo.
- [ ] Vaizdo žyma ištaisyta; Nenaudojau :naujausia.
- [ ] Paslaptis nėra įtraukta į manifestą; Naudojau slaptą objektą / išorinį saugyklą.
- [ ] Aš susiaurinau RBAC / leidimus iki minimalių leidimų.
- [ ] Prieš pateikdamas paraišką, patikrinau, ar esu tinkamas kontekstas ir kad išvestis – sausas vykdymas/diff.