Kubernetes Manifestų Lintavimo Įrankis
Lintinkite Kubernetes YAML manifestus pagal klasterio apsaugos geriausią praktiką, visiškai neprisijungę, savo naršyklėje.
🔒 Visiškai apdorojama jūsų naršyklėje – niekas, kurį čia įvedėte, niekada neįkeliama.
Rezultatas
Kubernetes manifestai dažniausiai peržiūrimi akimis pull request'uose, todėl tos pačios apsaugos klaidos nuolat patenka į produkciją: Deployment be atminties limito, kurį galiausiai OOM nužudo ir kartu paima mazgą, konteineris, laimingai veikiantis kaip root, nes niekas nenustatė runAsNonRoot, arba Pod, pritvirtintas prie atvaizdo žymos `:latest`, kuri tyliai pasikeičia paleidimo metu. Šis lintavimo įrankis pagauna tokias problemas vos tik įklijuojate manifestą, nereikia veikiančio klasterio, kubectl konteksto ar jokių prisijungimo duomenų.
Viduje veikia nedidelis rankomis parašytas YAML analizatorius, sukurtas specialiai tam realistiškam YAML poaibiui, kurį iš tikrųjų naudoja Kubernetes manifestai: `---` atskirti dokumentai, įtraukomis paremtas įdėjimas, `key: value` ir įdėtieji blokiniai atvaizdai, `- ` sekos elementai, įskaitant žemėlapių sąrašus, kabutėse ir be kabučių esantys skaliarai, komentarai ir `|`/`>` blokiniai skaliarai tokiems dalykams kaip kelių eilučių ConfigMap reikšmės ar anotacijos. Nenaudojama jokia išorinė YAML biblioteka – tiek analizatorius, tiek taisyklių variklis yra integruoti į įrankį ir veikia tik jūsų naršyklėje.
Taisyklių lentelė sudaryta pagal žinomas klasterių apsaugos rekomendacijas – CIS Kubernetes Benchmark, kube-score ir Pod saugumo standartų „Restricted“ profilį – ir tikrina kiekvieną konteinerį dėl trūkstamų išteklių užklausų / limitų, konteinerių, galinčių veikti kaip root ar privilegijuotu režimu, trūkstamų liveness ir readiness zondų ilgai veikiančiose darbo krūviuose (Deployments, StatefulSets, DaemonSets), hostPath tomų prijungimų, atveriančių pagrindinio kompiuterio failų sistemą, hostNetwork naudojimo ir neatkuriamų `:latest` ar nežymėtų konteinerių atvaizdų. Rezultatai grupuojami pagal dokumentą ir konteinerį, kiekvienam nurodant aiškų klaidos / įspėjimo sunkumą, kad galėtumėte atskirti, kas iš tiesų rizikinga, o kas tėra geriausios praktikos priminimas.
Veikia su pavieniais manifestais arba ištisais kelių dokumentų failais, įklijuotais tiesiai iš Helm šablono generavimo arba `kustomize build` išvesties, suprasdamas Pod, Deployment, StatefulSet, DaemonSet, Job, ReplicaSet ir CronJob išteklius. Kadangi viskas vyksta lokaliai, saugu įklijuoti manifestus, kuriuose yra vidinių paslaugų pavadinimų, realių išteklių dydžių ar bet ko kito, ko nenorėtumėte siųsti trečiųjų šalių API – naudinga greitam patikrinimui prieš commit'ą, kodo peržiūros pagalbai arba tiesiog mokantis, kaip „apsaugotas“ iš tikrųjų atrodo praktikoje.