Validate Kubernetes YAML contra optima exercitia et consilia

Nota. transl.Crescente numero YAML configurationum pro K8s ambitibus, necessitas confirmationis automated magis ac magis urget. Auctor huius recensionis non solum solutiones huius operis exsistentes delegit, sed etiam spectavit quomodo instruere ut exemplo operantur. Versa est valde informativus pro iis qui in hoc argumento intersunt.

Validate Kubernetes YAML contra optima exercitia et consilia

TL, DR: Hic articulus sex instrumenta static confert ad convalidandum et aestimandum Kubernetes YAML lima contra optimos usus et requisita.

In laboribus Kubernetes de more in documentorum YAML forma definiuntur. Una quaestionum cum YAML difficultas est definiendi angustias seu relationes inter tabellas manifestas.

Quid si opus est efficere ut omnes imagines ad botrum expositae ex fideli registro proveniant?

Quomodo possum impedire Instructiones quae PodDisruptionBudgets non habent, quominus ad botrum mittantur?

Integratio statice temptationis te permittit ut errores cognoscas ac violationes consilii in evolutione. Hoc fideiussorem auget definitiones subsidiorum rectas et securas esse, eoque magis verisimile est productionem operum quam optimos usus sequentur.

Inspectio ecosystem lima Kubernetes static YAML in sequentia categoria dividi potest:

  • API validators. Instrumenta in hac categoria reprimunt YAML manifesta contra exigentias Kubernetarum API servo.
  • Promptus testers. Instrumenta ex hoc genere veniunt cum probatis probatis ad securitatem, obsequium cum optimis exercitiis, etc.
  • Custom validators. Repraesentatores huius categoriae permittunt te probata consuetudine variis linguis creare, exempli gratia, Rego et Javascript.

In hoc articulo sex instrumenta diversa describemus et comparabimus;

  1. kubeval;
  2. kube-score;
  3. config-lint;
  4. aeris;
  5. conftest;
  6. polaris.

Bene, incipias!

Reprehendo Deployments

Priusquam incipiamus instrumenta comparare, aliquod subiectum faciamus quo ea experiamur.

De manifesto infra, plures errores continet et non-obsequium optimarum consuetudinum: quot reperire potes?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-echo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: http-echo
  template:
    metadata:
      labels:
        app: http-echo
    spec:
      containers:
      - name: http-echo
        image: hashicorp/http-echo
        args: ["-text", "hello-world"]
        ports:
        - containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
  name: http-echo
spec:
  ports:
  - port: 5678
    protocol: TCP
    targetPort: 5678
  selector:
    app: http-echo

(base-valid.yaml)

Hoc YAML utemur ad alia instrumenta comparanda.

Quod supra manifesto base-valid.yaml et alios manifestos ex hoc articulo inveniri posse git repositoria.

Manifestum applicationem interretialem describit cuius praecipuum munus est respondere nuntio "Salve Mundi" ad portum 5678. Explicari potest cum sequenti mandato:

kubectl apply -f hello-world.yaml

Atque ita - reprime opus;

kubectl port-forward svc/http-echo 8080:5678

Nunc ad http://localhost:8080 confirmamusque applicatione laborat. Sed numquid sequitur optimas consuetudines? Sit scriptor reprehendo.

1. Kubeval

In corde kubeval Idea est, quodlibet commercium cum Kubernetes evenire per quietem API suam. Aliis verbis uti potes schemate API ad inspiciendum an datum YAML ei conforme sit. Intueamur exemplum.

Institutiones kubeval praesto sunt in website project.

In tempore scribendi articulum originale, versio 0.15.0 praesto erat.

Semel inauguratus, illud manifestum supra pascamus;

$ kubeval base-valid.yaml
PASS - base-valid.yaml contains a valid Deployment (http-echo)
PASS - base-valid.yaml contains a valid Service (http-echo)

Si felix, kubeval exit cum codice exitus 0. Potes reprehendo hoc modo:

$ echo $?
0

Nunc conemur kubeval cum manifesto diverso:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-echo
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: http-echo
    spec:
      containers:
      - name: http-echo
        image: hashicorp/http-echo
        args: ["-text", "hello-world"]
        ports:
        - containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
  name: http-echo
spec:
  ports:
  - port: 5678
    protocol: TCP
    targetPort: 5678
  selector:
    app: http-echo

(kubeval-invalid.yaml)

Quaestionem ab oculis macula potes? Lorem demus:

$ 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

Subsidium non verificatur.

API versionem instruere utens apps/v1electrix includere debet cum pittacio folliculi. Manifestum superius electrix non includit, sic errorem kubeval retulit et cum codice non-nulla exiit.

Miror quid fiet si facio kubectl apply -f cum hoc manifesto?

Age, conemur:

$ 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

Hic est prorsus error quem kubeval de eo monuit. Illud figere potes addendo electo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-echo
spec:
  replicas: 2
  selector:          # !!!
    matchLabels:     # !!!
      app: http-echo # !!!
  template:
    metadata:
      labels:
        app: http-echo
    spec:
      containers:
      - name: http-echo
        image: hashicorp/http-echo
        args: ["-text", "hello-world"]
        ports:
        - containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
  name: http-echo
spec:
  ports:
  - port: 5678
    protocol: TCP
    targetPort: 5678
  selector:
    app: http-echo

(base-valid.yaml)

Utilitas instrumentorum ad modum kubeval est quod errores horum similes primo in cyclo instruere possunt.

Haec impedimenta praeterea ad botrum accessum non requirunt, offline peragi possunt.

Defalta kubeval facultates contra schema novissimum Kubernetes API coercet. Sed in pluribus casibus necesse est ut contra certum Kubernetes emissio reprimatur. Hoc fieri potest utens vexillum --kubernetes-version:

$ kubeval --kubernetes-version 1.16.1 base-valid.yaml

Quaeso note quod versio specificari debet in forma Major.Minor.Patch.

Ad indicem versionum pro quibus verificationis sustentatur, placere ad JSON schema de GitHubquae kubeval ad sanationem utitur. Si opus est ad kubeval offline currere, schemas depone et eorum localem locum denota utens vexillum --schema-location.

Praeter singulas tabulas YAML, kubeval etiam cum directoriis et stdin operari potest.

Praeterea Kubeval facile in pipelinum CI integrat. Qui volentes probationes currere antequam manifestationes ad botrum mittant, scire laetabitur tria formarum outputarum subsidia kubeval;

  1. Clarae verbae;
  2. JSON;
  3. Test Quidquid Protocollum (TAP).

Et quaevis formarum adhiberi potest ad ulteriorem partem extrahendi ad generandum summam eventus optati generis.

Una ex incommodis kubevalis est quod currently non potest pro obsequio Custom Resource Definitions (CRDs). Sed configurari potest kubeval ignorare eos.

Kubeval instrumentum magnum est ad facultates reprimendas et aestimandas; Attamen animadvertendum est transitum experimentum non spondere subsidia melioribus exercitiis obtemperare.

For example, using the tag latest in vase non sequitur optimas consuetudines. Sed hunc errorem kubeval non considerat et eum non indicat. Hoc est, probatio talis YAML sine admonitione complebit.

Sed quid si vis YAML aestimare et violationes agnoscere ut tag latest? Quomodo fasciculum YAML inspicio contra optimas consuetudines?

2. Kube-score

Kube-score parses YAML manifestat et expendit contra -in probat. Hae probationes eliguntur secundum normas securitatis et optimas consuetudines, ut sunt:

  • Continens currit ut user non-radix.
  • Vasculi dispositio compescit.
  • Petitiones finesque constituendi pro opibus.

Ex probatis eventibus, tres eventus dantur: OK, DICTIO ΠΈ SUMMUS.

Potes experiri Kube-score online vel locum instituere.

In tempore scribendi articulum originale, novissima versio kube-score erat 1.7.0.

Experiamur nobis manifesto base-valid.yaml:

$ 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 transit kubeval probationes, dum kube-score puncta ad sequentia vitia;

  • Promptus checks non felis.
  • Nullae petitiones seu limites pro opibus et memoria CPU sunt.
  • Vasculum discidium rationes non specificatae sunt.
  • Nullae regulae separationis (anti-affinitatem) ut maximize disponibilitate.
  • Continens radicem decurrit.

Haec omnia valida sunt puncta de defectibus quae scribenda sunt ut instruere efficaciora et certiora faciant.

bigas kube-score prae-readable informationes in humana forma comprehendo omnes generis violationes DICTIO ΠΈ SUMMUSqui multum adiuvat in progressu.

Volentes hoc instrumento uti intra CI pipelino, possunt magis compresso output uti vexillum --output-format ci (hoc in casu, probationes cum effectu monstrantur" 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

Similia cum kubeval, kube-score redit codicem non-nullam exitus cum test qui deficit SUMMUS. Possis etiam processus similes ad enable DICTIO.

Insuper subsidia ad obsequium cum diversis API versionibus (ut in kubeval) reprimere potest. Nihilominus haec notitia in ipso kube-score duratur: non potes aliam versionem Kubernetarum eligere. Circumscriptio haec magna quaestio esse potest si uvam tuam upgrade vel si plures ligaturas habes cum uaria K8s versione.

nota quod ibi iam est exitus cum rogationem perciperet occasionem.

Plura de kube-score inveniri possunt at rutrum.

Kube-score probata sunt magnum instrumentum ad optimas artes exsequendas, sed quid si opus est mutationes probare vel regulas tuas addere? Heu, hoc fieri non potest.

Kube-score non est extensibilis: rationes ei addere vel aptare non potes.

Si consuetudo scribendi opus est ut probationes ad comprobandum obsequium societatis machinarum, uno ex his quattuor instrumentis uti potes: config-linteo, cupro, conftest, vel polaris.

3.Config-linteo

Mando-linteum instrumentum est ad confirmandas YAML, JSON, Terraformes, CSV imaginum conformationis et Kubernetes manifestat.

Vos can install is utens instructiones in project website.

Hodierna emissio sicut temporis scripturae originalis est 1.5.0.

Mando linteolum non aedificavit in probationibus ad manifestationes Kubernetes confirmandas.

Ad probationes quaslibet peragendas, aptas normas creare debes. Ea scripta sunt in fasciculis YAML quae "praecepta" vocantur. (praecepta)atque hanc structuram;

version: 1
description: Rules for Kubernetes spec files
type: Kubernetes
files:
  - "*.yaml"
rules:
   # список ΠΏΡ€Π°Π²ΠΈΠ»

(rule.yaml)

Studeamus propius;

  • agri type specificat quod genus configurationis config-lineatum utetur. Nam K8s hoc manifestat semper Kubernetes.
  • In agro files Praeter ipsas tabulas, directorium specificare potes.
  • agri rules intendebat ad occasum user probat.

Dicamus vis efficere ut imagines in instruere semper ex receptaculo fideli tanquam my-company.com/myapp:1.0. Regulae config-linitae quae talem perscriptio efficiens hoc spectarent:

- 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)

Utraque regula debet habere sequentia attributa;

  • id β€” unica identificatrix regulae;
  • severity - Sit be DEFECTUS, DICTIO ΠΈ NON_COMPLIANT;
  • message β€” si regula violatur, quae in hoc versu exhibentur;
  • resource - genus subsidii ad quod hoc pertinet;
  • assertions β€” elenchus conditionum quae respectu huius subsidii aestimandae erunt.

In regula supra assertion nomine every checks omnia vasa in instruere (key: spec.templates.spec.containers) Usus imaginum creditarum (i.e. incipiens cum my-company.com/).

Totum ruleset hoc simile est:

version: 1
description: Rules for Kubernetes spec files
type: Kubernetes
files:
  - "*.yaml"
rules:

 - id: DEPLOYMENT_IMAGE_REPOSITORY # !!!
    severity: FAILURE
    message: Deployment must use a valid image repository
    resource: Deployment
    assertions:
      - every:
          key: spec.template.spec.containers
          expressions:
            - key: image
              op: starts-with
              value: "my-company.com/"

(ruleset.yaml)

Experiri experimentum, eamus ut check_image_repo.yaml. Curramus perscribe in tabella base-valid.yaml:

$ config-lint -rules check_image_repo.yaml base-valid.yaml

[
  {
  "AssertionMessage": "Every expression fails: And expression fails: image does not start with my-company.com/",
  "Category": "",
  "CreatedAt": "2020-06-04T01:29:25Z",
  "Filename": "test-data/base-valid.yaml",
  "LineNumber": 0,
  "ResourceID": "http-echo",
  "ResourceType": "Deployment",
  "RuleID": "DEPLOYMENT_IMAGE_REPOSITORY",
  "RuleMessage": "Deployment must use a valid image repository",
  "Status": "FAILURE"
  }
]

Defecit perscriptio. Nunc sequentia manifesta cum recta imagine repositorio reprehendo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-echo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: http-echo
  template:
    metadata:
      labels:
        app: http-echo
    spec:
      containers:
      - name: http-echo
         image: my-company.com/http-echo:1.0 # !!!
         args: ["-text", "hello-world"]
         ports:
         - containerPort: 5678

(image-valid-mycompany.yaml)

Currimus eandem probationem cum supradictis manifestis. Nullae difficultates inventae sunt:

$ config-lint -rules check_image_repo.yaml image-valid-mycompany.yaml
[]

Mando-linteolum promissum est compages quae permittit te creare probationes tuas ad firmandum Kubernetes YAML manifestat utens YAML DSL.

Sed quid, si logica multiplicior indiget et probat? Nonne YAML nimis limitatur ad hoc? Quid si probationes plenae programmationis sermone creare possis?

4. lamina cuprea

Aeris V2 compages est ad manifestat probandas consuetudines utens probat (similis est config-linte).

Sed hoc differt ab hoc quod probat describere YAML non uti. Probat in JavaScript pro potest scribi. Aeris bibliothecam praebet cum pluribus instrumentis fundamentalibusquam adiuvant informationes de rebus Kubernetes et errores referunt.

Gradus ad installing Cuprum inveniri possunt in officialis documenta.

2.0.1 Est postrema emissio huius utilitatis in articulo scripto originali.

Sicut linteum config, Cuprum in probat non aedificavit. Scribamus unum. Inhibeat instruere imagines continens imagines solum ex repositoriis creditis uti my-company.com.

Creare lima check_image_repo.js cum sequenti contenti:

$$.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)
            }
        });
    }
});

Nunc probare nostram manifestam base-valid.yamlutere imperio 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

Patet ope aeris incomplexas probationes facere potes - exempli gratia, nomina domain in Ingress retentando manifestat vel respuens siliquas in modum privilegiatum decurrentes.

Cuprum varias utilitates in ea aedificatas habet;

  • DockerImage praefinitum input file legit et facit rem cum his attributis;
    • name β€” nomen imaginis;
    • tag - image tag;
    • registry - Subcriptio imaginum;
    • registry_url - protocol (https://) et subcriptio imagini;
    • fqin β€” plenum situm imaginis.
  • munus findByName adjuvat ut a resource datum genus (kind) et nomen (name) Ex initus lima.
  • munus findByLabels adjuvat invenire resource per certum genus (kind) Et pittacia (labels).

Potes omnia officia praesto munera hic.

Per defaltam fasciculum initus YAML totam in variabilem onerat $$ and makes it available for scripting.

Praecipua utilitas Copperis patet: lingua specializata vincere non debes et variis JavaScript notis uti potes ad probationes tuas creandas, ut chorda, interpolationem, functiones, etc.

Animadvertendum etiam est, versionem Coppericam hodiernam cum ES5 versione machinalis JavaScript, non ES6 facere.

Singula available at officialis project website.

Attamen, si re vera JavaScript et mavis linguam designatam ad quaerendas creandas et consilia describendas, operam dare debes ut certas.

5.Conftest

Certamen est compage probandi configurationem datam. Apta etiam ad probandum/probandum Kubernetes manifestat. Expertus describitur per interrogationem specialem linguarum Rego.

Vos can install utens conftest instructionesinscripti in website project.

In tempore scribendi articulum originale, versio novissima praesto fuit 0.18.2.

Similia linteolo et cupro, conftest sine ullo constructo-in experimentis. Experiamur eam et nostro consilio scribemus. Ut in exemplis praecedentibus, reprehendo an imagines continens certo fonte sumantur.

Creare Directory conftest-checkset in eo est fasciculus nominatus check_image_registry.rego cum sequenti contenti:

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])
}

Nunc lets test base-valid.yaml per 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

Expertus praevidens defecit quia imagines ex fonte infideli orti sunt.

In Rego lima definimus scandalum deny. Eius veritas violatio consideratur. Si caudices deny plures, eas independenter a se cohibet, ac verum quodvis caudices violatur.

Praeter defaltam output, confirmas JSON, TAP et tabulae formas - perquam utile, si relationes in CI pipeline existente embedas debes. Vos can posuit in forma desideravit utens vexillum --output.

Ut facilius consilia debug, conftest habet vexillum --trace. Vestigium emittit quam conftest parses certarum imaginum designatarum.

Certamina consilia publicari et communicari possunt in registris OCI (Open Container Initiative) sicut artificiata.

imperium push ΠΈ pull permittam ut artificium edas vel artificium exsistentem reciperare e registro remoto. Experiamur publicare consilium quod creavimus locali Docker subcriptio utens conftest push.

Satus vestri locus Docker subcriptio:

$ docker run -it --rm -p 5000:5000 registry

In alio termino, vade ad indicem quod antea creatum est conftest-checks et percurre mandatum hoc;

$ conftest push 127.0.0.1:5000/amitsaha/opa-bundle-example:latest

Si bene imperatum est, talem nuntium videbis;

2020/06/10 14:25:43 pushed bundle with digest: sha256:e9765f201364c1a8a182ca637bc88201db3417bacc091e7ef8211f6c2fd2609c

Nunc directorium temporale crea in eo et mandatum currunt conftest pull. Is mos download sarcina per praecedens mandatum creatum est:

$ cd $(mktemp -d)
$ conftest pull 127.0.0.1:5000/amitsaha/opa-bundle-example:latest

Subdirectorium apparebit in directorio temporalis policycontinens consilium nostrum file:

$ tree
.
└── policy
  └── check_image_registry.rego

Testimonia directe e reposito currere possunt;

$ 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

Infeliciter, DockerHub nondum sustinetur. Existimo igitur te felicem, si uteris Caeruleus continens Subcriptio (ACR) vel subcriptio tuo.

Artificium forma idem est quod Open Policy agentis packages (OPA), quod tibi permittit uti certas probationes ex fasciculis exsistentibus OPA.

Plus discere potes de consilio communicandis et aliis notis certaminis officialis project website.

6. Polaris

Ultimum instrumentum quod in hoc articulo disputatum est Polaris. (His ultimo anno denuntiatio sumus iam translata - proxime. translation)

Polaris in botro institui potest vel in linea imperandi modus adhibendus. Cum coniecturam facere licet, permittit ut Kubernetes manifestat stabiliter resolvere.

Cum modus lineae imperandi currit, aedificatae in probationibus praesto sunt areas operimentorum sicut securitas et optima exercitia (similis cum kube-score). Praeterea experimenta tua creare potes (sicut in config-linteto, cupro et conftest).

Id est, Polaris utilitates utriusque instrumentorum genera componit: cum probatis constructis et consuetudinibus.

Ut install Polaris in order versus modum, utere mandatis documentum website.

In tempore scribendi articulum originale, versio 1.0.3 praesto est.

Postquam institutionem integram esse potes, polaris in manifesto currere potes base-valid.yaml cum tali imperio;

$ polaris audit --audit-path base-valid.yaml

Filum in forma JSON outputabit cum accuratiore descriptione probatorum factorum eorumque eventorum. Output sequentem structuram habebit:

{
  "PolarisOutputVersion": "1.0",
  "AuditTime": "0001-01-01T00:00:00Z",
  "SourceType": "Path",
  "SourceName": "test-data/base-valid.yaml",
  "DisplayName": "test-data/base-valid.yaml",
  "ClusterInfo": {
    "Version": "unknown",
    "Nodes": 0,
    "Pods": 2,
    "Namespaces": 0,
    "Controllers": 2
  },
  "Results": [
    /* Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ список */
  ]
}

Plena output praesto hic.

Sicut kube-score, Polaris quaestiones in locis agnoscit ubi manifesta non occurrit optimas praxis;

  • Nulla valitudinis siliquas compescit.
  • Tags pro continens imagines non specificatae sunt.
  • Continens radicem decurrit.
  • Petitiones et limites memoriae ac CPU non specificatae sunt.

Unicuique probatio, secundum eventum suum, gradus criticae assignatur; monitum aut periculum. Ut plura discas de promptu aedificato in probat, placere ad documentum.

Si singula non sunt necessaria, signum vexillum specificare potes --format score. Hoc in casu, Polaris numerum vndique ab 1 ad 100 outputabit Score (i.e. censum);

$ polaris audit --audit-path test-data/base-valid.yaml --format score
68

Quo propius accessus est ad 100, eo pacto superior gradus est. Si quaeras ad imperium codice exitus polaris auditevenit ut = 0 .

Force polaris audit Opus finire potes cum codice non-nulla utens duobus vexillis;

  • vexillum --set-exit-code-below-score argumentum sumit valorem liminis in latitudine 1-100. Hoc in casu, mandatum exit cum codice 4 exit si score sub limine est. Hoc valde utile est cum certum limen habes (dic 75) et opus est ut acris recipias si infra ustulo accedit.
  • vexillum --set-exit-code-on-danger deficiet mandatum cum codice 3 si unus de periculo probationes deficiat.

Nunc conemur creare consuetudinem testam quae impedit an imago e repositorio credito sumatur. Consuetudines probationes in YAML forma specificatae sunt, ipsa probatio usus JSON Schema describitur.

Hoc codice YAML PRAECISIO describitur novum test vocavit checkImageRepo:

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/.+$

Propius illud inspice:

  • successMessage β€” Haec linea imprimetur, si probatio feliciter compleatur;
  • failureMessage β€” Haec epistula ostendetur in casu defectui;
  • category - unum genera indicat: Images, Health Checks, Security, Networking ΠΈ Resources;
  • target--- decernit quod genus obiecti (spec) Test applicatur. Valores possibilis: Container, Pod aut Controller;
  • Ipsa probatio specificatur in obiecto schema schema utens JSON. Verbum clavem in hoc test est pattern usus est ad imaginem fontis cum inquisita comparare.

Ad superius examen currendum, debes conformationem sequentem Polaris creare;

checks:
  checkImageRepo: danger
customChecks:
  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/.+$

(polaris-conf.yaml)

Sit parse tabella:

  • In agro checks probationes eorumque gradus criticae praescribuntur. Expedit quippe monitionem recipere, cum imago ex infideli fonte desumpta, planum hic statuimus danger.
  • Ipsum test checkImageRepo tum relatus in obiecto customChecks.

Servo lima ut custom_check.yaml. Nunc currere potes polaris audit manifesta cum YAML verificationem requirit.

Experiamur manifesto base-valid.yaml:

$ polaris audit --config custom_check.yaml --audit-path base-valid.yaml

bigas polaris audit currentes tantum usoris test supra scripti et defecerunt.

Si figere imaginem to my-company.com/http-echo:1.0, Polaris perficiet feliciter. Manifesto cum mutationes iam in repositoriapotes in manifesto praecedente mandato image-valid-mycompany.yaml.

Nunc quaestio oritur: quomodo curritur in probationibus cum consuetudinibus? Facile! Vos iustus postulo ut constructum-in test identificantibus limam configurationis addere. Quam ob rem accipiet haec forma;

checks:
  cpuRequestsMissing: warning
  cpuLimitsMissing: warning
  # Other inbuilt checks..
  # ..
  # custom checks
  checkImageRepo: danger # !!!
customChecks:
  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/.+$

(config_with_custom_check.yaml)

Exemplum de configuratione file integrum praesto est hic.

reprehendo manifesto base-valid.yamlutere constructo et consuetudine probat, imperio uti potes;

$ polaris audit --config config_with_custom_check.yaml --audit-path base-valid.yaml

Polaris complementum constructum in probationibus cum consuetudinibus, optima utriusque mundi coniungens.

Ex altera parte, impossibilitas linguarum potentiorum utendi sicut Rego vel JavaScript potest esse factor limitandi impediens creatio magis urbanus probat.

Plura de Polaris is available at project website.

summary

Cum multa instrumenta praesto sint inspiciendi et aestimandi lima Kubernetes YAML, magni momenti est habere lucide intellectum quomodo probationes designentur et efficiantur.

Eg si Kubernetes manifestas per pipelinum accipias, primus gradus in tali pipelino esse potuit kubeval. Monere debet an definitiones obiecti Kubernetes API schema conforment.

Postquam talis recensio peracta est, ad probationes magis urbanas procedere potest, ut obsequium cum norma optimarum ritum et certarum rerum. Hoc est ubi kube-score et Polaris in manus venturi sunt.

Ad eos qui incomplexa exigentias et necessitates habent in specialibus probationibus, aeris, config-lintecti et conftest, opportunum fore..

Certamen et linteolum config-lineatum usui YAML definiendi morem probat, et aeris accessum ad plenam programmandi linguam dat, eamque pulchram electionem amabilem reddens.

Contra, valetne uti uno ex his instrumentis et ideo omnia tentamenta manualia condere, vel Polaris praeferre et tantum addere quae ad hoc opus sunt? Patet huic quaestioni responsum non est.

Mensa infra breviter uniuscuiusque instrumenti descriptionem praebet:

tool
fatum
defectuum oeconomicorum
User probat

kubeval
Validat YAML manifestat contra certam versionem API schema
Non opus CRD
No

kube-score
Analyses YAML manifestat in optima exercitia
Kubernetes API versionem tuam eligere non potest ut reprehendo resources
No

aeris
Communis compages creandi consuetudo JavaScript probat pro YAML manifests
Nulla in efficitur volutpat. Pauper documenta
Yes

aboutconfig-linte
Communis compages ad probationes creandas in lingua speciali domain in YAML infixa est. Varias formas conformationis adiuvat (v.g. Terraform)
Nulla efficitur volutpat nulla. Assertiones et functiones inaedificata non esse satis
Yes

conftest
A compage ad creandas proprias probationes utens Rego (lingua propria quaesita). Permittit communicatio consilia per OCI bundles
Nulla in efficitur volutpat. Discendum regoum habeo. Docker Hub non valet, cum editae policies
Yes

Polaris
Recognitiones YAML contra regulam optimas observationes manifestat. Permittit ut creare tua probat utens JSON Schema
Test capacitates ex JSON Schema non sufficiunt
Yes

Quia haec instrumenta accessu ad botrum Kubernetes non nituntur, facilia sunt ad institutionem. Permittunt te ut lima fons eliquare et celeris feedback auctoribus in inceptis trahere petitiones praebere.

PS ab translator

Lege etiam in nostro diario:

Source: www.habr.com