Hamarino ny Kubernetes YAML amin'ny fomba fanao sy politika tsara indrindra
Fanamarihana. transl.: Miaraka amin'ny fitomboan'ny isan'ny tefy YAML ho an'ny tontolo K8s dia miha-maika hatrany ny filana ny fanamarinana mandeha ho azy. Ny mpanoratra ity famerenana ity dia tsy nisafidy vahaolana efa misy ho an'ity asa ity ihany, fa nampiasa ny Deployment ho ohatra ihany koa mba hijerena ny fomba fiasan'izy ireo. Hita fa tena nahafantarana ireo izay liana amin'ity lohahevitra ity.
TL, DR: Ity lahatsoratra ity dia mampitaha fitaovana static enina hanamarinana sy hanombanana ny rakitra Kubernetes YAML mifanaraka amin'ny fanao sy fepetra tsara indrindra.
Ny entan'ny Kubernetes dia voafaritra amin'ny endrika antontan-taratasy YAML. Ny iray amin'ireo olana amin'ny YAML dia ny fahasarotana amin'ny famaritana ny teritery na ny fifandraisana misy eo amin'ny rakitra mibaribary.
Ahoana raha mila maka antoka isika fa avy amin'ny rejisitra azo itokisana ny sary rehetra apetraka amin'ny cluster?
Ahoana no ahafahako manakana ny fandefasana tsy misy PodDisruptionBudgets tsy halefa any amin'ny cluster?
Ny fampidirana fitiliana static dia ahafahanao mamantatra ny lesoka sy ny fanitsakitsahana ny politika amin'ny dingana fampandrosoana. Izany dia mampitombo ny antoka fa marina sy azo antoka ny famaritana ny loharanon-karena, ary mahatonga azy io ho azo inoana kokoa fa hanaraka ny fanao tsara indrindra ny enta-mamokatra.
Ny tontolon'ny fizahana rakitra YAML statik Kubernetes dia azo zaraina amin'ireto sokajy manaraka ireto:
API validators. Ny fitaovana amin'ity sokajy ity dia manamarina ny fanehoana YAML mifanaraka amin'ny fepetra takian'ny mpizara Kubernetes API.
Ireo mpanandrana vonona. Ny fitaovana avy amin'ity sokajy ity dia tonga miaraka amin'ny fitsapana efa vita ho an'ny fiarovana, ny fanarahana ny fanao tsara indrindra, sns.
Fanamarinana manokana. Ny solontenan'ity sokajy ity dia mamela anao hamorona fitsapana manokana amin'ny fiteny samihafa, ohatra, Rego sy Javascript.
Ato amin'ity lahatsoratra ity dia mamaritra sy mampitaha fitaovana enina samihafa isika:
Hampiasa ity YAML ity izahay mba hampitahana fitaovana samihafa.
Ny manifesto etsy ambony base-valid.yaml ary ny manifesto hafa avy amin'ity lahatsoratra ity dia azo jerena ao amin'ny Git repository.
Ny fanehoana dia manoritsoritra fampiharana amin'ny Internet izay ny andraikitra lehibe dia mamaly amin'ny hafatra "Hello World" mankany amin'ny seranan-tsambo 5678. Azo apetraka amin'ny baiko manaraka izany:
kubectl apply -f hello-world.yaml
Ary noho izany - jereo ny asa:
kubectl port-forward svc/http-echo 8080:5678
Mandehana izao http://localhost:8080 ary hamafiso fa mandeha ny fampiharana. Saingy manaraka fomba fanao tsara indrindra ve izany? Andeha hojerentsika.
1. Kubeval
Ao amin'ny fotony kubeval Ny hevitra dia ny hoe ny fifandraisana rehetra amin'ny Kubernetes dia mitranga amin'ny alàlan'ny REST API. Raha lazaina amin'ny teny hafa, azonao atao ny mampiasa schema API hijerena raha mifanaraka amin'izany ny YAML iray. Andeha isika hijery ohatra iray.
Afaka mahita ny olana amin'ny maso ve ianao? Andao hanomboka:
$ kubeval kubeval-invalid.yaml
WARN - kubeval-invalid.yaml contains an invalid Deployment (http-echo) - selector: selector is required
PASS - kubeval-invalid.yaml contains a valid Service (http-echo)
# проверим код возврата
$ echo $?
1
Tsy voamarina ny loharano.
Fametrahana mampiasa ny kinova API apps/v1, dia tsy maintsy misy mpifidy mifanandrify amin'ny etik'ilay pod. Ny fanehoana etsy ambony dia tsy ahitana ny mpifidy, noho izany dia nitatitra ny hadisoana i kubeval ary nivoaka niaraka tamin'ny code tsy aotra.
Manontany tena aho hoe inona no hitranga raha manao izany aho kubectl apply -f miaraka amin'ity manifesto ity?
Eny, andeha isika:
$ kubectl apply -f kubeval-invalid.yaml
error: error validating "kubeval-invalid.yaml": error validating data: ValidationError(Deployment.spec):
missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors,
turn validation off with --validate=false
Izany indrindra no fahadisoana nampitandreman'i kubeval. Azonao atao ny manamboatra izany amin'ny fampidirana mpifidy:
Amin'ny alàlan'ny default, ny kubeval dia manamarina loharano mifanaraka amin'ny tetika farany indrindra Kubernetes API. Na izany aza, amin'ny ankamaroan'ny tranga dia mety mila manamarina ny famoahana Kubernetes manokana ianao. Izany dia azo atao amin'ny fampiasana ny saina --kubernetes-version:
Mariho fa ny dikan-teny dia tsy maintsy voafaritra amin'ny endrika Major.Minor.Patch.
Raha mila lisitr'ireo dikan-teny izay tohanan'ny fanamarinana, azafady jereo JSON schema amin'ny GitHub, izay ampiasain'i kubeval ho fanamarinana. Raha mila mampandeha an-tserasera kubeval ianao dia alaivo ny skema ary ambarao ny toerana misy azy ireo amin'ny alàlan'ny saina --schema-location.
Ankoatra ny rakitra YAML tsirairay, ny kubeval dia afaka miasa amin'ny lahatahiry sy stdin.
Ankoatra izany, i Kubeval dia miditra mora amin'ny fantsona CI. Ho faly ireo maniry hanao andrana alohan'ny handefasana ireo fanehoan-kevitra amin'ny cluster fa ny kubeval dia manohana endrika famoahana telo:
Text tsotra;
JSON;
Test Anything Protocol (TAP).
Ary ny endrika rehetra dia azo ampiasaina amin'ny fanaparitahana bebe kokoa ny vokatra mba hamoronana famintinana ny vokatry ny karazana tiana.
Ny iray amin'ireo tsy fahampian'ny kubeval dia ny tsy ahafahany manara-maso ny fanarahana ny Custom Resource Definitions (CRDs). Na izany aza, azo atao ny manamboatra kubeval tsy miraharaha azy ireo.
Kubeval dia fitaovana tsara amin'ny fanamarinana sy fanombanana ny loharano; Na izany aza, tokony hohamafisina fa tsy manome antoka fa mifanaraka amin'ny fomba fanao tsara indrindra ny fanatontosana ny fanadinana.
Ohatra, mampiasa ny tag latest ao anaty fitoeran-javatra dia tsy manaraka ny fanao tsara indrindra. Na izany aza, tsy mihevitra izany ho fahadisoana i kubeval ary tsy mitatitra izany. Izany hoe, ny fanamarinana ny YAML toy izany dia ho vita tsy misy fampitandremana.
Ahoana anefa raha te-handinika ny YAML ianao ary hamantatra ny fandikan-dalàna toy ny tag latest? Ahoana no hanamarina ny rakitra YAML amin'ny fomba fanao tsara indrindra?
2. Kube-sora
Kube-score parses YAML miseho sy manombatombana azy ireo manohitra ny naorina-in fitsapana. Ireo fitsapana ireo dia nofantenana mifototra amin'ny torolàlana momba ny fiarovana sy ny fomba fanao tsara indrindra, toy ny:
Fampandehanana ny fitoeran-javatra fa tsy toy ny fakany.
Ny fisian'ny fisavana ara-pahasalamana pod.
Mametraka fangatahana sy fetra ho an'ny loharanon-karena.
Miorina amin'ny valin'ny fitsapana, vokatra telo no omena: OK, FAMPITANDREMANA и Critical.
Azonao atao ny manandrana Kube-score amin'ny Internet na mametraka azy eo an-toerana.
Tamin'ny fotoana nanoratana ny lahatsoratra tany am-boalohany, ny kinova farany an'ny kube-score dia 1.7.0.
$ kube-score score base-valid.yaml
apps/v1/Deployment http-echo
[CRITICAL] Container Image Tag
· http-echo -> Image with latest tag
Using a fixed tag is recommended to avoid accidental upgrades
[CRITICAL] Pod NetworkPolicy
· The pod does not have a matching network policy
Create a NetworkPolicy that targets this pod
[CRITICAL] Pod Probes
· Container is missing a readinessProbe
A readinessProbe should be used to indicate when the service is ready to receive traffic.
Without it, the Pod is risking to receive traffic before it has booted. It is also used during
rollouts, and can prevent downtime if a new version of the application is failing.
More information: https://github.com/zegl/kube-score/blob/master/README_PROBES.md
[CRITICAL] Container Security Context
· http-echo -> Container has no configured security context
Set securityContext to run the container in a more secure context.
[CRITICAL] Container Resources
· http-echo -> CPU limit is not set
Resource limits are recommended to avoid resource DDOS. Set resources.limits.cpu
· http-echo -> Memory limit is not set
Resource limits are recommended to avoid resource DDOS. Set resources.limits.memory
· http-echo -> CPU request is not set
Resource requests are recommended to make sure that the application can start and run without
crashing. Set resources.requests.cpu
· http-echo -> Memory request is not set
Resource requests are recommended to make sure that the application can start and run without crashing.
Set resources.requests.memory
[CRITICAL] Deployment has PodDisruptionBudget
· No matching PodDisruptionBudget was found
It is recommended to define a PodDisruptionBudget to avoid unexpected downtime during Kubernetes
maintenance operations, such as when draining a node.
[WARNING] Deployment has host PodAntiAffinity
· Deployment does not have a host podAntiAffinity set
It is recommended to set a podAntiAffinity that stops multiple pods from a deployment from
being scheduled on the same node. This increases availability in case the node becomes unavailable.
YAML mandalo fitsapana kubeval, raha ny kube-score kosa dia manondro ireto lesoka manaraka ireto:
Tsy voafefy ny fisavana fahavononana.
Tsy misy fangatahana na fetra ho an'ny loharanon-karena sy fitadidiana CPU.
Tsy voafaritra ny teti-bolan'ny fanakorontanana pod.
Tsy misy fitsipika momba ny fisarahana (anti-affinity) mba hampitombo ny fahafahana.
Ny kaontenera dia mandeha toy ny faka.
Ireo dia teboka manan-danja rehetra momba ny lesoka tokony hodinihina mba hahatonga ny Deployment hahomby sy azo antoka kokoa.
ekipa kube-score mampiseho fampahalalana amin'ny endrika mora vakin'ny olona ao anatin'izany ny karazana fandikan-dalàna rehetra FAMPITANDREMANA и Critical, izay manampy betsaka mandritra ny fampandrosoana.
Ireo izay maniry hampiasa an'io fitaovana io ao anatin'ny fantsona CI dia afaka manome vokatra voaporitra kokoa amin'ny fampiasana ny saina --output-format ci (amin'ity tranga ity dia aseho ihany koa ny fitsapana miaraka amin'ny valiny OK):
$ kube-score score base-valid.yaml --output-format ci
[OK] http-echo apps/v1/Deployment
[OK] http-echo apps/v1/Deployment
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) CPU limit is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Memory limit is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) CPU request is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Memory request is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Image with latest tag
[OK] http-echo apps/v1/Deployment
[CRITICAL] http-echo apps/v1/Deployment: The pod does not have a matching network policy
[CRITICAL] http-echo apps/v1/Deployment: Container is missing a readinessProbe
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Container has no configured security context
[CRITICAL] http-echo apps/v1/Deployment: No matching PodDisruptionBudget was found
[WARNING] http-echo apps/v1/Deployment: Deployment does not have a host podAntiAffinity set
[OK] http-echo v1/Service
[OK] http-echo v1/Service
[OK] http-echo v1/Service
[OK] http-echo v1/Service
Mitovy amin'ny kubeval, ny kube-score dia mamerina kaody fivoahana tsy aotra rehefa misy fitsapana tsy nahomby Critical. Azonao atao koa ny mamela ny fanodinana mitovy amin'ny FAMPITANDREMANA.
Ho fanampin'izany, azo atao ny manamarina ny loharanon'ny fanarahana ireo dikan-teny API samihafa (toy ny amin'ny kubeval). Na izany aza, ity fampahalalana ity dia voasokajy mafy ao amin'ny kube-score: tsy afaka misafidy dikan-teny hafa amin'ny Kubernetes ianao. Ity famerana ity dia mety ho olana lehibe raha mikasa ny hanatsara ny cluster ianao na raha manana cluster maro miaraka amin'ny dikan-teny K8 samihafa ianao.
Ny fampahalalana bebe kokoa momba ny kube-score dia azo jerena ao amin'ny tranonkala ofisialy.
Ny fitsapana Kube-score dia fitaovana tsara amin'ny fampiharana ny fanao tsara indrindra, fa ahoana kosa raha mila manova ny fitsapana ianao na manampy ny fitsipikao manokana? Indrisy, tsy azo atao izany.
Tsy azo itarina ny Kube-score: tsy azonao atao ny manampy politika na manitsy azy ireo.
Raha mila manoratra fitsapana manokana ianao mba hanamarinana ny fanarahana ny politikan'ny orinasa dia azonao ampiasaina ny iray amin'ireto fitaovana efatra manaraka ireto: config-lint, varahina, conftest, na polaris.
3.Config-lint
Config-lint dia fitaovana hanamarina ny YAML, JSON, Terraform, CSV configuration files ary Kubernetes manifests.
Ny famoahana ankehitriny hatramin'ny fotoana nanoratana ny lahatsoratra tany am-boalohany dia 1.5.0.
Ny Config-lint dia tsy manana andrana naorina ho fanamarinana ny fanehoana Kubernetes.
Mba hanaovana fitsapana rehetra dia mila mamorona fitsipika mety ianao. Izy ireo dia voasoratra ao amin'ny rakitra YAML antsoina hoe "rulesets" (fitsipika), ary manana ity rafitra manaraka ity:
version: 1
description: Rules for Kubernetes spec files
type: Kubernetes
files:
- "*.yaml"
rules:
# список правил
(rule.yaml)
Andeha hojerentsika akaiky kokoa izany:
saha type mamaritra izay karazana config-lint ho ampiasaina. Ho an'ny K8 dia maneho izany foanaKubernetes.
Tany an-tsaha files Ho fanampin'ny rakitra ihany, azonao atao ny mamaritra lahatahiry iray.
saha rules natao hametrahana fitsapana mpampiasa.
Aoka hatao hoe te-hahazo antoka ianao fa ny sary ao amin'ny Deployment dia alaina foana avy amin'ny tahiry azo itokisana toy ny my-company.com/myapp:1.0. Ny fitsipika config-lint izay manao fanamarinana toy izany dia toa izao:
- id: MY_DEPLOYMENT_IMAGE_TAG
severity: FAILURE
message: Deployment must use a valid image tag
resource: Deployment
assertions:
- every:
key: spec.template.spec.containers
expressions:
- key: image
op: starts-with
value: "my-company.com/"
(rule-trusted-repo.yaml)
Ny fitsipika tsirairay dia tsy maintsy manana ireto toetra manaraka ireto:
id - famantarana tokana ny fitsipika;
severity - Angamba TSY HAHOMBY, FAMPITANDREMANA и TSY MANARAKA;
message - raha voadika ny fitsipika iray, dia aseho ny votoatin'ity andalana ity;
resource - ny karazana loharanom-pitaovana ampiharana ity fitsipika ity;
Ao amin'ny fitsipika etsy ambony assertion eo ambanin'ny anarana every manamarina fa ao amin'ny Deployment ny container rehetra (key: spec.templates.spec.containers) mampiasa sary azo itokisana (izany hoe manomboka amin'ny my-company.com/).
Config-lint dia rafitra mampanantena izay ahafahanao mamorona andrana manokana hanamarinana ny fanehoana Kubernetes YAML mampiasa ny YAML DSL.
Ahoana anefa raha mila lojika sy fitsapana sarotra kokoa ianao? Tsy voafetra loatra ve ny YAML amin'izany? Ahoana raha afaka mamorona fitsapana amin'ny fiteny fandaharana feno ianao?
4. Varahina
Varahina V2 dia rafitra iray hanamarinana ny fanehoana amin'ny alàlan'ny fitsapana mahazatra (mitovy amin'ny config-lint).
Na izany aza, tsy mitovy amin'ny farany izy io fa tsy mampiasa YAML hamaritana fitsapana. Azo soratana amin'ny JavaScript kosa ny fitsapana. Ny Copper dia manome tranomboky misy fitaovana fototra maromaro, izay manampy anao hamaky fampahalalana momba ny zavatra Kubernetes ary mitatitra ny hadisoana.
2.0.1 no famoahana farany an'ity fitaovana ity tamin'ny fotoana nanoratana ny lahatsoratra voalohany.
Tahaka ny config-lint, ny Copper dia tsy manana fitsapana naorina. Andao hanoratra iray. Avelao izy hanamarina fa ny fametrahana dia mampiasa sary kaontenera avy amin'ny tahiry azo itokisana toy ny my-company.com.
$$.forEach(function($){
if ($.kind === 'Deployment') {
$.spec.template.spec.containers.forEach(function(container) {
var image = new DockerImage(container.image);
if (image.registry.lastIndexOf('my-company.com/') != 0) {
errors.add_error('no_company_repo',"Image " + $.metadata.name + " is not from my-company.com repo", 1)
}
});
}
});
Ankehitriny mba hitsapana ny fanehoantsika base-valid.yaml, ampiasao ny baiko copper validate:
$ copper validate --in=base-valid.yaml --validator=check_image_tag.js
Check no_company_repo failed with severity 1 due to Image http-echo is not from my-company.com repo
Validation failed
Mazava fa miaraka amin'ny fanampian'ny varahina dia afaka manao fitsapana sarotra kokoa ianao - ohatra, ny fanamarinana ny anaran'ny sehatra ao amin'ny Ingress dia miseho na mandà pods mandeha amin'ny fomba manokana.
Ny Copper dia manana fiasa isan-karazany ao anatiny:
Na izany aza, raha tsy tianao ny JavaScript ary tianao ny fiteny iray natao manokana hamoronana fanontaniana sy famaritana politika, dia tokony handinika ny conftest ianao.
5. Fifaninanana
Conftest dia rafitra iray ho an'ny fitiliana angon-drakitra fanamafisana. Mety amin'ny fitiliana/fanamarinana ny fisehoan'i Kubernetes. Ny fitsapana dia faritana amin'ny alalan'ny tenim-panontaniana manokana Rego.
Azonao atao ny mametraka conftest mampiasa TOROLALANAvoatanisa ao amin'ny tranokalan'ny tetikasa.
Tamin'ny fotoana nanoratana ny lahatsoratra tany am-boalohany, ny kinova farany azo alaina dia 0.18.2.
Mitovy amin'ny config-lint sy ny varahina, ny conftest dia tonga tsy misy fitsapana naorina. Andao andramana ary hanoratra ny politikantsika manokana. Toy ny tamin'ny ohatra teo aloha, hojerentsika raha nalaina avy amin'ny loharano azo antoka ny sary fitoeran-javatra.
Mamorona lahatahiry conftest-checks, ary ao anatiny dia misy rakitra antsoina hoe check_image_registry.rego miaraka amin'ireto votoaty manaraka ireto:
package main
deny[msg] {
input.kind == "Deployment"
image := input.spec.template.spec.containers[_].image
not startswith(image, "my-company.com/")
msg := sprintf("image '%v' doesn't come from my-company.com repository", [image])
}
Andeha isika hizaha toetra base-valid.yaml ny alalan ' conftest:
$ conftest test --policy ./conftest-checks base-valid.yaml
FAIL - base-valid.yaml - image 'hashicorp/http-echo' doesn't come from my-company.com repository
1 tests, 1 passed, 0 warnings, 1 failure
Ao amin'ny rakitra Rego no mamaritra ny sakana deny. Heverina ho fanitsakitsahana ny fahamarinany. Raha sakana deny maro, conftest dia manamarina azy ireo tsy miankina, ary ny fahamarinan'ny iray amin'ireo sakana dia raisina ho toy ny fanitsakitsahana.
Ho fanampin'ny famoahana default, ny conftest dia manohana ny JSON, TAP ary ny endrika latabatra - endri-javatra tena ilaina raha mila mampiditra tatitra amin'ny fantsona CI efa misy ianao. Azonao atao ny mametraka ny endrika tiana amin'ny fampiasana ny saina --output.
Mba hanamora ny fandravana ny politika dia manana saina ny conftest --trace. Izy io dia mamoaka soritra ny fomba famakian'ny conftest ny rakitra politika voatondro.
Ny politikan'ny fifaninanana dia azo avoaka sy zaraina ao amin'ny rejisitra OCI (Open Container Initiative) ho toy ny artifact.
didy push и pull mamela anao hamoaka artifact na maka artifact efa misy avy amin'ny rejisitra lavitra. Andeha isika hanandrana hamoaka ny politika noforoninay amin'ny rejisitra Docker eo an-toerana mampiasa conftest push.
Atombohy ny rejisitra Docker eo an-toerana:
$ docker run -it --rm -p 5000:5000 registry
Ao amin'ny terminal hafa, mandehana any amin'ny lahatahiry noforoninao teo aloha conftest-checks ary araho ity baiko manaraka ity:
Raha nahomby ny baiko dia hahita hafatra toy izao ianao:
2020/06/10 14:25:43 pushed bundle with digest: sha256:e9765f201364c1a8a182ca637bc88201db3417bacc091e7ef8211f6c2fd2609c
Mamorona lahatahiry vonjimaika izao ary ataovy ny baiko ao anatiny conftest pull. Izy io dia hisintona ny fonosana noforonin'ny baiko teo aloha:
$ cd $(mktemp -d)
$ conftest pull 127.0.0.1:5000/amitsaha/opa-bundle-example:latest
Hisy subdirectory hiseho ao amin'ny lahatahiry vonjimaika policymisy ny rakitra politikanay:
$ tree
.
└── policy
└── check_image_registry.rego
Ny fitsapana dia azo atao mivantana avy amin'ny tahiry:
$ conftest test --update 127.0.0.1:5000/amitsaha/opa-bundle-example:latest base-valid.yaml
..
FAIL - base-valid.yaml - image 'hashicorp/http-echo' doesn't come from my-company.com repository
2 tests, 1 passed, 0 warnings, 1 failure
Indrisy fa tsy mbola tohana ny DockerHub. Koa hevero ho tsara vintana ianao raha mampiasa Azure Container Registry (ACR) na ny rejisitrao manokana.
Ny endrika artifact dia mitovy amin'ny Sokafy ny fonosana Policy Agent (OPA), izay ahafahanao mampiasa conftest hanaovana fitsapana avy amin'ny fonosana OPA efa misy.
Afaka mianatra bebe kokoa momba ny fifampizaràna politika sy ny endri-javatra hafa amin'ny conftest ianao ao amin'ny tranonkala ofisialin'ny tetikasa.
6. Polaris
Ny fitaovana farany hodinihina ato amin'ity lahatsoratra ity dia Polaris. (Ny fanambarany tamin'ny taon-dasa we efa nadika - eo ho eo FANDIKAN-TENY)
Ny Polaris dia azo apetraka ao anaty cluster na ampiasaina amin'ny fomba baiko. Araka ny efa noeritreretinao, dia ahafahanao mamakafaka ny fisehoan'i Kubernetes.
Rehefa mandeha amin'ny fomba baikon'ny baiko dia misy ny andrana naorina ao amin'ny faritra toy ny fiarovana sy ny fanao tsara indrindra (mitovy amin'ny kube-score). Ankoatra izany, azonao atao ny mamorona fitsapana anao manokana (toy ny amin'ny config-lint, varahina ary conftest).
Raha lazaina amin'ny teny hafa, ny Polaris dia manambatra ny tombotsoan'ny sokajy roa amin'ny fitaovana: miaraka amin'ny fitsapana namboarina sy mahazatra.
Tamin'ny fotoana nanoratana ny lahatsoratra tany am-boalohany dia misy ny version 1.0.3.
Rehefa vita ny fametrahana dia azonao atao ny mihazakazaka polaris amin'ny manifest base-valid.yaml miaraka amin'ity baiko manaraka ity:
$ polaris audit --audit-path base-valid.yaml
Izy io dia hamoaka tady amin'ny endrika JSON miaraka amin'ny famaritana amin'ny antsipiriany momba ny fitsapana natao sy ny valiny. Ny vokatra dia hanana ity rafitra manaraka ity:
Tahaka ny kube-score, i Polaris dia mamaritra ny olana amin'ny faritra tsy mahafeno ny fomba fanao tsara indrindra:
Tsy misy fisavana ara-pahasalamana ho an'ny pods.
Ny marika ho an'ny sary fitoeran-javatra dia tsy voafaritra.
Ny kaontenera dia mandeha toy ny faka.
Ny fangatahana sy ny fetran'ny fitadidiana sy ny CPU dia tsy voafaritra.
Ny fitsapana tsirairay, miankina amin'ny valiny, dia omena ambaratongam-tsikera: fampitandremana na Loza. Raha te hahalala bebe kokoa momba ireo andrana naorina azo alaina dia jereo ny tahirin-kevitra.
Raha tsy ilaina ny antsipiriany dia azonao atao ny mamaritra ny saina --format score. Amin'ity tranga ity, Polaris dia hamoaka isa manomboka amin'ny 1 ka hatramin'ny 100 − Maty (izany hoe fanombanana):
Arakaraka ny manakaiky ny isa dia 100 no ambony kokoa ny ambaratongan'ny fifanarahana. Raha mijery ny kaody fivoahana amin'ny baiko ianao polaris audit, hita fa mitovy amin'ny 0.
Hery polaris audit Azonao atao ny manajanona ny asa miaraka amin'ny kaody tsy aotra amin'ny fampiasana saina roa:
sainam-pirenena --set-exit-code-below-score maka ho tohan-kevitra ny sandan'ny tokonam-baravarana eo amin'ny 1-100. Amin'ity tranga ity, ny baiko dia hivoaka miaraka amin'ny kaody fivoahana 4 raha ambany ny tokonam-baravarana ny isa. Tena ilaina izany rehefa manana sandan'ny tokonam-baravarana ianao (milaza 75) ary mila mahazo fanairana ianao raha toa ka ambany ny isa.
sainam-pirenena --set-exit-code-on-danger dia hahatonga ny baiko tsy hahomby amin'ny code 3 raha tsy mahomby ny iray amin'ireo fitsapana loza.
Andeha isika izao hanandrana hamorona andrana manokana izay manamarina raha nalaina avy amin'ny tahiry azo itokisana ny sary. Ny fitsapana manokana dia voafaritra amin'ny endrika YAML, ary ny fitsapana dia voafaritra amin'ny fampiasana JSON Schema.
checkImageRepo:
successMessage: Image registry is valid
failureMessage: Image registry is not valid
category: Images
target: Container
schema:
'$schema': http://json-schema.org/draft-07/schema
type: object
properties:
image:
type: string
pattern: ^my-company.com/.+$
Andeha hojerentsika akaiky izany:
successMessage - ity andalana ity dia hatao pirinty raha vita soa aman-tsara ny fitsapana;
failureMessage - ity hafatra ity dia haseho raha misy tsy fahombiazana;
category - manondro ny iray amin'ireo sokajy: Images, Health Checks, Security, Networking и Resources;
target--- mamaritra ny karazana zavatra (spec) ny fitsapana dia ampiharina. Sanda mety: Container, Pod na Controller;
Ny fitsapana mihitsy dia voafaritra ao amin'ilay zavatra schema mampiasa schema JSON. Ny teny fototra amin'ity fitsapana ity dia pattern ampiasaina hampitahana ny loharanon-tsary amin'ilay ilaina.
Mba hampandehanana ny fitsapana etsy ambony, dia mila mamorona ity konfigurasi Polaris manaraka ity ianao:
Tany an-tsaha checks andrana sy ny haavon'ny fanakianana azy ireo no voalaza. Koa satria irina ny hahazo fampitandremana rehefa misy sary nalaina tamina loharano tsy azo itokisana, dia apetrakay eto ny haavony danger.
Ny fitsapana mihitsy checkImageRepo dia voasoratra ao amin'ny zavatra customChecks.
Tehirizo ny rakitra ho custom_check.yaml. Afaka mihazakazaka ianao izao polaris audit miaraka amin'ny fanehoana YAML izay mila fanamarinana.
ekipa polaris audit ny fitsapana mpampiasa voalaza etsy ambony ihany no nihazakazaka ary tsy nahomby izany.
Raha amboarinao ny sary ho my-company.com/http-echo:1.0, Polaris dia ho vita soa aman-tsara. Efa miditra ny manifesto misy ny fanovana repositorymba hahafahanao manamarina ny baiko teo aloha amin'ny manifest image-valid-mycompany.yaml.
Mipoitra izao ny fanontaniana: ahoana ny fomba hanaovana fitsapana naorina miaraka amin'ireo mahazatra? Mora! Mila ampidirinao amin'ny fichier configuration fotsiny ireo identifiers test naorina. Ho vokatr'izany dia handray izao endrika manaraka izao:
Polaris dia mameno ny fitsapana naorina miaraka amin'ny fanao mahazatra, ka manambatra ny tsara indrindra amin'ny tontolo roa.
Amin'ny lafiny iray, ny tsy fahaizana mampiasa fiteny matanjaka kokoa toa ny Rego na JavaScript dia mety ho antony mametra manakana ny famoronana fitsapana sarotra kokoa.
Na dia misy fitaovana maro azo hijerena sy hanombanana ny rakitra YAML Kubernetes, zava-dehibe ny fananana fahatakarana mazava ny fomba handrafetana sy hanatanterahana ny fitsapana.
Ohatra, raha maka Kubernetes manifests mandeha amin'ny fantsona ianao, ny kubeval dia mety ho dingana voalohany amin'ny fantsona toy izany. Hanara-maso raha mifanaraka amin'ny skema Kubernetes API ny famaritana zavatra.
Rehefa vita ny famerenana toy izany, dia afaka miroso amin'ny fitsapana saro-pady kokoa ny olona iray, toy ny fanarahana ny fomba fanao tsara indrindra sy ny politika manokana. Eto no misy ny kube-score sy Polaris.
Ho an'ireo izay manana fepetra sarotra ary mila manamboatra fitsapana amin'ny antsipiriany, ny varahina, ny config-lint ary ny conftest dia mety..
Conftest sy config-lint dia mampiasa YAML hamaritana ny fitsapana mahazatra, ary ny varahina dia manome anao fidirana amin'ny fiteny fandaharana feno, ka mahatonga azy ho safidy tsara tarehy.
Amin'ny lafiny iray, mendrika ve ny mampiasa ny iray amin'ireo fitaovana ireo ary, noho izany, mamorona ny fitsapana rehetra amin'ny tanana, na aleony Polaris ary ampio fotsiny izay ilaina? Tsy misy valiny mazava amin'io fanontaniana io.
Ny tabilao etsy ambany dia manome famaritana fohy momba ny fitaovana tsirairay:
fitaovana
anjara
fahadisoana
Fitsapana mpampiasa
kubeval
Manamarina ny fisehoan'ny YAML amin'ny dikan-teny manokana amin'ny tetika API
Tsy afaka miasa amin'ny CRD
No
kube-score
Mamakafaka ny fanehoana YAML manohitra ny fanao tsara indrindra
Tsy afaka misafidy ny kinova API Kubernetes anao hanamarinana loharano
No
varahina
Rafitra ankapobeny amin'ny famoronana andrana JavaScript mahazatra ho an'ny YAML manifests
Tsy misy andrana anatiny. Ratsy ny antontan-taratasy
fa
config-lint
Rafitra ankapoben'ny famoronana andrana amin'ny fiteny manokana amin'ny sehatra voarakitra ao amin'ny YAML. Manohana endrika fanamboarana isan-karazany (oh: Terraform)
Tsy misy andrana efa vita. Mety tsy ho ampy ny fanambaràna sy ny fiasa naorina
fa
fifaninanana
Firafitra hamoronana fitsapana anao manokana amin'ny fampiasana Rego (fiteny fanontana manokana). Mamela ny fifampizaràna politika amin'ny alàlan'ny fehezam-boninkazo OCI
Tsy misy andrana anatiny. Tsy maintsy mianatra Rego aho. Tsy tohanana ny Docker Hub rehefa mamoaka politika
fa
Polaris
Hevitra YAML dia miseho manohitra ny fanao tsara indrindra. Mamela anao hamorona andrana manokana mampiasa JSON Schema
Mety tsy ho ampy ny fahaiza-manao fitsapana mifototra amin'ny JSON Schema
fa
Satria tsy miankina amin'ny fidirana amin'ny kluster Kubernetes ireo fitaovana ireo dia mora ny mametraka azy ireo. Izy ireo dia mamela anao hanivana rakitra loharano ary manome valiny haingana ho an'ireo mpanoratra ny fangatahana misintona amin'ny tetikasa.