Kubernetes Manifest Linter
„Lint Kubernetes YAML“ prieštarauja klasterių stiprinimo geriausioms praktikoms, visiškai neprisijungus prie jūsų naršyklės.
Rezultatas
„Kubernetes“ aprašai paprastai peržiūrimi iš akies traukimo užklausoje, o tai reiškia, kad tos pačios saujelės sukietėjimo klaidų patenka į gamybą: diegimas be atminties apribojimo, kuris galiausiai sunaikinamas OOM ir paima su savimi mazgą, konteineris, kuris laimingai veikia kaip root, nes niekas nenustatė runAsNonRoot, arba Pod, prisegtas prie vaizdo žymos, pvz. Ši kliūtis užfiksuoja tą problemų klasę, kai įklijuojate manifestą ir nereikia veikiančios grupės, kubectl konteksto ar jokių kredencialų.
Po gaubtu yra nedidelis rankiniu būdu susuktas YAML analizatorius, parašytas specialiai tikroviškam YAML poaibiui, kurį Kubernetes apraše iš tikrųjų naudoja: „---“-atskirti dokumentai, įtraukimas pagrįstas įdėjimas, „raktas: vertė“ ir įdėtųjų blokų atvaizdai, „-“ sekos elementai, įskaitant žemėlapių sąrašus, kabutes ir necituojamus blokus, komentarus/>ar'. skaliarai tokiems dalykams kaip kelių eilučių ConfigMap reikšmės ar komentarai. Nėra jokios išorinės YAML bibliotekos – analizatorius ir taisyklių variklis yra kartu su įrankiu ir veikia tik jūsų naršyklėje.
Taisyklių lentelė sukurta remiantis gerai žinomomis klasterių tvirtinimo gairėmis – CIS Kubernetes Benchmark, kube-score ir Pod saugos standartų „Apribotas“ profiliu – ir tikrina, ar kiekviename konteineryje trūksta išteklių užklausų / apribojimų, konteinerių, kurie gali veikti kaip šakninis arba privilegijuotu režimu, trūksta gyvumo ir parengties darbo apkrovų, ilgų diegimo būsenų. DaemonSets), hostPath apimties prijungimas, atskleidžiantis pagrindinio kompiuterio failų sistemą, pagrindinio kompiuterio tinklo naudojimą ir neatkuriamus „:naujausius“ arba nepažymėtus sudėtinio rodinio vaizdus. Išvados sugrupuotos pagal dokumentus ir sudėtinius rodinius, kiekviename nurodant aiškią klaidų / įspėjimo sunkumą, kad galėtumėte atskirti, kas iš tikrųjų rizikinga, remiantis tik geriausios praktikos patarimu.
Jis veikia su atskirais aprašais arba visais kelių dokumentų failais, įklijuotais tiesiai iš „Helm“ šablono atvaizdavimo arba „kustomize build“ išvesties, suprantant Pod, Deployment, StatefulSet, DaemonSet, Job, ReplicaSet ir CronJob išteklius. Kadangi viskas veikia lokaliai, saugu įklijuoti aprašus, kuriuose yra vidinių paslaugų pavadinimų, realaus išteklių dydžio ar bet ko kito, ko nenorėtumėte siųsti į trečiosios šalies API – tai naudinga norint greitai atlikti sveiko proto patikrinimą prieš įsipareigojimą, kodo peržiūros pagalba arba tiesiog sužinoti, kaip „užgrūdintas“ iš tikrųjų atrodo praktiškai.