Kubernetes YAML a bhailíochtú in aghaidh na gcleachtas agus na mbeartas is fearr

Nóta. aistrigh.: Le méadú ar líon na bhfoirmíochtaí YAML do thimpeallachtaí K8s, éiríonn an gá atá lena bhfíorú uathoibrithe níos mó agus níos práinní. Ní hamháin gur roghnaigh údar an athbhreithnithe seo réitigh reatha don tasc seo, ach d'fhéach sé freisin ar an gcaoi a n-oibríonn siad ag baint úsáide as Imscaradh mar shampla. Bhí sé an-fhaisnéiseach dóibh siúd a bhfuil suim acu san ábhar seo.

Kubernetes YAML a bhailíochtú in aghaidh na gcleachtas agus na mbeartas is fearr

TL; DR: Déanann an t-alt seo comparáid idir sé uirlis statacha chun comhaid Kubernetes YAML a bhailíochtú agus a mheas i gcoinne na gcleachtas agus na gceanglas is fearr.

Is gnách go sainítear ualaí oibre Kubernetes i bhfoirm doiciméad YAML. Ceann de na fadhbanna a bhaineann le YAML is ea an deacracht a bhaineann le srianta nó gaol a shonrú idir comhaid follasacha.

Cad a tharlóidh má theastaíonn uainn a chinntiú go dtagann gach íomhá a imlonnaítear chuig an mbraisle ó chlár iontaofa?

Conas is féidir liom Imscaradh nach bhfuil PodDisruptionBudgets acu a chosc ó a chur chuig an mbraisle?

Ligeann comhtháthú na tástála statach duit earráidí agus sáruithe beartais a aithint ag an gcéim forbartha. Méadaíonn sé seo an ráthaíocht go bhfuil sainmhínithe acmhainní ceart agus slán, agus is dóichí go leanfaidh ualaí oibre táirgeachta na cleachtais is fearr.

Is féidir éiceachóras iniúchta comhad YAML statach Kubernetes a roinnt sna catagóirí seo a leanas:

  • Bailitheoirí API. Seiceálann uirlisí sa chatagóir seo an léiriú YAML i gcoinne riachtanais an fhreastalaí Kubernetes API.
  • Réidh tástálaithe. Tagann uirlisí ón gcatagóir seo le tástálacha réamhdhéanta maidir le slándáil, comhlíonadh na gcleachtas is fearr, etc.
  • Bailitheoirí saincheaptha. Ligeann ionadaithe na catagóire seo duit tástálacha saincheaptha a chruthú i dteangacha éagsúla, mar shampla, Rego agus Javascript.

San Airteagal seo déanfaimid cur síos agus comparáid a dhéanamh ar shé uirlis éagsúla:

  1. cuibeil ;
  2. cube-scór;
  3. config-lint;
  4. copar;
  5. coimhlint ;
  6. polaris.

Bhuel, cuirimis tús leis!

Imscaradh á Seiceáil

Sula dtosaímid uirlisí a chur i gcomparáid, cruthaímid cúlra éigin chun iad a thástáil.

Tá roinnt earráidí sa fhorógra thíos agus neamhchomhlíonadh na gcleachtas is fearr: cé mhéad acu is féidir leat a aimsiú?

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)

Bainfimid úsáid as an YAML seo chun uirlisí éagsúla a chur i gcomparáid.

An forógra thuas base-valid.yaml agus tá manifestos eile ón alt seo le fáil i Taisclanna Git.

Déanann an forléiriú cur síos ar fheidhmchlár gréasáin a bhfuil sé mar phríomhthasc aige freagra a thabhairt le teachtaireacht “Hello World” chuig port 5678. Is féidir é a imscaradh leis an ordú seo a leanas:

kubectl apply -f hello-world.yaml

Agus mar sin - seiceáil an obair:

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

Anois téigh go http://localhost:8080 agus deimhnigh go bhfuil an t-iarratas ag obair. Ach an leanann sé na cleachtais is fearr? Déanaimis seiceáil.

1. Ciúbal

Ag croílár cubeval Is é an smaoineamh go dtarlaíonn aon idirghníomhaíocht le Kubernetes trína API REST. I bhfocail eile, is féidir leat scéimre API a úsáid chun a sheiceáil an gcloíonn YAML áirithe leis. Breathnaímid ar shampla.

Treoracha suiteála Tá kubeval ar fáil ar shuíomh Gréasáin an tionscadail.

Agus an bunalt á scríobh, bhí leagan 0.15.0 ar fáil.

Nuair a bheidh sé suiteáilte, cuirimis an léiriú thuas leis:

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

Má éiríonn leis, scoirfidh kubeval le cód scoir 0. Is féidir leat é a sheiceáil mar seo a leanas:

$ echo $?
0

Déanaimis iarracht anois kubeval le léiriú eile:

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)

An féidir leat an fhadhb a fheiceáil de do shúile? Seolfaimid:

$ 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

Níl an acmhainn á fhíorú.

Imscaradh ag baint úsáide as an leagan API apps/v1, ní mór roghnóir a fhreagraíonn do lipéad an choda a bheith san áireamh. Ní chuimsíonn an forléiriú thuas an roghnóir, mar sin thuairiscigh Kubeval earráid agus chuaigh sé amach le cód neamh-nialas.

N'fheadar cad a tharlóidh má dhéanaim kubectl apply -f leis an bhforógra seo?

Bhuel, déanaimis iarracht:

$ 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

Is é seo go díreach an earráid a thug Kubeval rabhadh faoi. Is féidir leat é a dheisiú trí roghnóir a chur leis:

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)

Is é an buntáiste a bhaineann le huirlisí cosúil le kubeval ná gur féidir earráidí mar seo a aimsiú go luath sa timthriall imlonnaithe.

Ina theannta sin, ní éilíonn na seiceálacha seo rochtain ar an mbraisle; is féidir iad a dhéanamh as líne.

De réir réamhshocraithe, seiceann kubeval acmhainní i gcoinne scéimre API Kubernetes is déanaí. Mar sin féin, i bhformhór na gcásanna b'fhéidir go mbeadh ort seiceáil i gcoinne scaoileadh Kubernetes ar leith. Is féidir é seo a dhéanamh ag baint úsáide as an bhratach --kubernetes-version:

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

Tabhair faoi deara go gcaithfidh an leagan a bheith sonraithe san fhormáid Major.Minor.Patch.

Le haghaidh liosta de na leaganacha a dtacaítear lena bhfíorú, féach le do thoil Scéimre JSON ar GitHub, a úsáideann kubeval le haghaidh bailíochtaithe. Más gá duit kubeval a rith as líne, íoslódáil na scéimeanna agus sonraigh a suíomh áitiúil leis an mbratach --schema-location.

Chomh maith le comhaid YAML aonair, is féidir le kubeval oibriú freisin le heolairí agus stdin.

Ina theannta sin, comhtháthaíonn Kubeval go héasca isteach sa phíblíne CI. Beidh áthas orthu siúd ar mian leo tástálacha a reáchtáil sula seolfar léirsithe chuig an mbraisle a fhios go dtacaíonn kubeval le trí fhormáid aschuir:

  1. Gnáth-théacs;
  2. JSON;
  3. Prótacal Tástáil Rud ar bith (TAP).

Agus is féidir aon cheann de na formáidí a úsáid chun an t-aschur a pharsáil tuilleadh chun achoimre a dhéanamh ar thorthaí an chineáil atá ag teastáil.

Ceann de na míbhuntáistí a bhaineann le kubeval is ea nach féidir leis a sheiceáil faoi láthair an bhfuiltear ag comhlíonadh Sainmhínithe Acmhainní Saincheaptha (CRDanna). Mar sin féin, is féidir kubeval a chumrú neamhaird a dhéanamh orthu.

Is uirlis iontach é Kubeval chun acmhainní a sheiceáil agus a mheas; Ba cheart a aibhsiú, áfach, nach ráthaíonn pas a fháil sa triail go gcloíonn an acmhainn leis na cleachtais is fearr.

Mar shampla, ag baint úsáide as an chlib latest ní leanann na cleachtais is fearr i gcoimeádán. Mar sin féin, ní mheasann kubeval gur earráid é seo agus ní thuairiscíonn sé é. Is é sin le rá, críochnófar fíorú YAML den sórt sin gan rabhadh.

Ach cad más mian leat YAML a mheas agus sáruithe ar nós an chlib a aithint latest? Conas is féidir liom comhad YAML a sheiceáil in aghaidh na gcleachtas is fearr?

2. Ciúb-scór

Ciúb-scór parsálann YAML manifests agus déanann sé iad a mheas i gcoinne tástálacha ionsuite. Roghnaítear na tástálacha seo bunaithe ar threoirlínte slándála agus dea-chleachtais, amhail:

  • Rith an coimeádán mar úsáideoir gan fhréamh.
  • Infhaighteacht seiceálacha sláinte pod.
  • Iarratais agus teorainneacha le haghaidh acmhainní a shocrú.

Bunaithe ar thorthaí na tástála, tugtar trí thorthaí: OK, RABHADH и CRITICIÚIL.

Is féidir leat triail a bhaint as Kube-score ar líne nó é a shuiteáil go háitiúil.

Agus an bunalt á scríobh, ba é 1.7.0 an leagan is déanaí de scóir kube.

Bainimis triail as ar ár sonra 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.

Déanann YAML pas i dtrialacha cubeval, agus tugann an scór kube aird ar na lochtanna seo a leanas:

  • Níl seiceálacha ullmhachta cumraithe.
  • Níl aon iarrataí nó teorainneacha ar acmhainní LAP agus cuimhne.
  • Ní shonraítear buiséid um bhriseadh pod.
  • Níl aon rialacha idirscartha ann (frithchleamhnas) chun infhaighteacht a uasmhéadú.
  • Ritheann an coimeádán mar fhréamh.

Is pointí bailí iad seo go léir maidir le heasnaimh nach mór aghaidh a thabhairt orthu chun Imlonnú a dhéanamh níos éifeachtaí agus níos iontaofa.

Foireann kube-score taispeánann sé faisnéis i bhfoirm atá inléite ag an duine lena n-áirítear gach cineál sárú RABHADH и CRITICIÚIL, rud a chabhraíonn go leor le linn na forbartha.

Is féidir leo siúd ar mian leo an uirlis seo a úsáid laistigh den phíblíne CI aschur níos comhbhrúite a chumasú ag baint úsáide as an bhratach --output-format ci (sa chás seo, taispeántar tástálacha leis an toradh freisin 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

Cosúil le kubeval, filleann kube-score cód scoir neamh-nialas nuair a bhíonn tástáil ann a theipeann CRITICIÚIL. Is féidir leat próiseáil den chineál céanna a chumasú le haghaidh RABHADH.

Ina theannta sin, is féidir acmhainní a sheiceáil maidir le comhlíonadh leaganacha éagsúla API (mar atá i kubeval). Mar sin féin, tá an fhaisnéis seo códaithe sa scór kube féin: ní féidir leat leagan eile de Kubernetes a roghnú. Is féidir leis an teorannú seo a bheith ina fhadhb mhór má tá sé ar intinn agat do bhraisle a uasghrádú nó má tá braislí iolracha agat le leaganacha éagsúla de K8anna.

tabhair faoi deara go tá ceist ann cheana féin le togra chun an deis seo a bhaint amach.

Is féidir tuilleadh eolais a fháil faoi kube-score ag láithreán gréasáin oifigiúil.

Is uirlis iontach iad tástálacha scóir Kube chun dea-chleachtais a chur i bhfeidhm, ach cad a tharlóidh má theastaíonn uait athruithe a dhéanamh ar an tástáil nó do rialacha féin a chur leis? Faraoir, ní féidir é seo a dhéanamh.

Níl Kube-score insínte: ní féidir leat polasaithe a chur leis ná iad a choigeartú.

Más gá duit tástálacha saincheaptha a scríobh chun comhlíonadh polasaithe na cuideachta a fhíorú, is féidir leat ceann de na ceithre uirlis seo a leanas a úsáid: config-lint, copper, contest, nó polaris.

3.Config-lint

Is uirlis é Config-lint chun comhaid cumraíochta YAML, JSON, Terraform, CSV agus manifests Kubernetes a bhailíochtú.

Is féidir leat é a shuiteáil ag baint úsáide as treoracha ar shuíomh Gréasáin an tionscadail.

Is é 1.5.0 an eisiúint reatha agus an bunalt á scríobh.

Níl tástálacha ionsuite ag config-lint chun manifests Kubernetes a bhailíochtú.

Chun aon tástálacha a dhéanamh, ní mór duit rialacha cuí a chruthú. Tá siad scríofa i gcomhaid YAML ar a dtugtar "socruithe rialacha" (socruithe rialacha), agus tá an struchtúr seo a leanas acu:

version: 1
description: Rules for Kubernetes spec files
type: Kubernetes
files:
  - "*.yaml"
rules:
   # список правил

(rule.yaml)

Déanaimis staidéar níos mine air:

  • Réimse type sonraítear cén cineál cumraíochta a úsáidfidh config-lint. Do manifests K8s é seo i gcónaí Kubernetes.
  • I réimse files Chomh maith leis na comhaid féin, is féidir leat eolaire a shonrú.
  • Réimse rules atá beartaithe le haghaidh tástálacha úsáideora a shocrú.

Ligean le rá gur mhaith leat a chinntiú go ndéantar íomhánna in Imscaradh a íoslódáil i gcónaí ó stór iontaofa mar my-company.com/myapp:1.0. Bheadh ​​cuma mar seo ar riail config-lint a dhéanann seiceáil den sórt sin:

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

Caithfidh na tréithe seo a leanas a bheith ag gach riail:

  • id — aitheantóir uathúil na rialach;
  • severity - B'fhéidir FAILIÚCHÁN, RABHADH и NON_COMPLIANT;
  • message — má sháraítear riail, taispeántar a bhfuil sa líne seo;
  • resource — an cineál acmhainne lena mbaineann an riail seo;
  • assertions — liosta de na coinníollacha a ndéanfar meastóireacht orthu maidir leis an acmhainn seo.

Sa riail thuas assertion ar a dtugtar every seiceálann sé go bhfuil gach coimeádán in Imscaradh (key: spec.templates.spec.containers) íomhánna iontaofa a úsáid (i.e. ag tosú le my-company.com/).

Breathnaíonn an tacar rialacha iomlán mar seo:

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)

Chun triail a bhaint as, déanaimis é a shábháil mar check_image_repo.yaml. Déanaimis seiceáil ar an gcomhad 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"
  }
]

Theip ar an seic. Anois, déanaimis seiceáil ar an léiriú seo a leanas leis an stór íomhá ceart:

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)

Déanaimid an tástáil chéanna leis an léiriú thuas. Níor aimsíodh aon fhadhb:

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

Is creat tuar dóchais inti é Config-lint a ligeann duit do thástálacha féin a chruthú chun manifests Kubernetes YAML a bhailíochtú ag baint úsáide as an YAML DSL.

Ach cad a tharlóidh má theastaíonn loighic agus tástálacha níos casta uait? Nach bhfuil YAML ró-theoranta chuige seo? Cad a tharlóidh dá bhféadfá trialacha a chruthú i dteanga ríomhchlárúcháin iomlán?

4. Copar

Copar V2 creat chun manifests a bhailíochtú ag baint úsáide as tástálacha saincheaptha (cosúil le config-lint).

Mar sin féin, tá sé difriúil leis an dara ceann sa mhéid is nach n-úsáideann sé YAML chun cur síos a dhéanamh ar thástálacha. Is féidir tástálacha a scríobh i JavaScript ina ionad sin. Soláthraíonn copar leabharlann le roinnt bunuirlisí, a chuidíonn leat faisnéis a léamh faoi rudaí Kubernetes agus earráidí a thuairisciú.

Is féidir na céimeanna chun Copper a shuiteáil a fháil i doiciméadú oifigiúil.

Is é 2.0.1 an t-eisiúint is déanaí den áirgiúlacht seo tráth scríofa an ailt bhunaidh.

Cosúil le config-lint, níl tástálacha ionsuite ag Copper. Scríobhaimis ceann. Lig dó seiceáil go n-úsáideann imlonnuithe íomhánna coimeádáin go heisiach ó stórtha iontaofa mar my-company.com.

Cruthaigh comhad check_image_repo.js leis an ábhar seo a leanas:

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

Anois chun ár léiriú a thástáil base-valid.yaml, bain úsáid as an ordú 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

Tá sé soiléir gur féidir leat tástálacha níos casta a dhéanamh le cabhair ó chopair - mar shampla, seiceáil ainmneacha fearainn i manifests Ingress nó diúltú pods a ritheann i mód faoi phribhléid.

Tá feidhmeanna fóntais éagsúla ionsuite ag copar:

  • DockerImage léann an comhad ionchuir sonraithe agus cruthaíonn sé réad leis na tréithe seo a leanas:
    • name - ainm na híomhá,
    • tag - clib íomhá,
    • registry - clárlann íomhánna,
    • registry_url - prótacal (https://) agus clárlann íomhánna,
    • fqin — suíomh iomlán na híomhá.
  • Feidhm findByName cabhraíonn sé le hacmhainn a aimsiú de réir cineáil ar leith (kind) agus ainm (name) ón gcomhad ionchuir.
  • Feidhm findByLabels cuidíonn sé le hacmhainn a aimsiú de réir cineáil sonraithe (kind) agus lipéid (labels).

Is féidir leat féachaint ar na feidhmeanna seirbhíse go léir atá ar fáil anseo.

De réir réamhshocraithe lódálann sé an comhad YAML ionchur iomlán in athróg $$ agus cuireann sé ar fáil é le haghaidh scriptithe (teicníc coitianta dóibh siúd a bhfuil taithí acu ar jQuery).

Is léir gurb é príomhbhuntáiste Copper: ní gá duit teanga speisialaithe a mháistir agus is féidir leat gnéithe éagsúla JavaScript a úsáid chun do thástálacha féin a chruthú, mar idirshuíomh teaghrán, feidhmeanna, etc.

Ba chóir a thabhairt faoi deara freisin go n-oibríonn an leagan reatha de Copper leis an leagan ES5 den inneall JavaScript, ní ES6.

Sonraí ar fáil ag Láithreán gréasáin oifigiúil tionscadal saor in aisce,.

Mar sin féin, mura dtaitníonn JavaScript leat agus gur fearr leat teanga atá deartha go sonrach chun fiosrúcháin a chruthú agus chun cur síos a dhéanamh ar bheartais, ba chóir duit aird a thabhairt ar chomóradh.

5.Conftest

Is creat é Comórtas chun sonraí cumraíochta a thástáil. Freisin oiriúnach chun manifests Kubernetes a thástáil / a fhíorú. Déantar cur síos ar thástálacha ag baint úsáide as sainteanga fiosrúcháin Rego.

Is féidir leat comórtas a shuiteáil ag baint úsáide as treorachaliostaithe ar shuíomh Gréasáin an tionscadail.

Agus an bunalt á scríobh, ba é 0.18.2 an leagan is déanaí a bhí ar fáil.

Cosúil le config-lint agus copar, tagann an chomórtais gan aon tástálacha ionsuite. Déanaimis triail a bhaint as agus ár bpolasaí féin a scríobh. Mar a tharla i samplaí roimhe seo, déanfaimid seiceáil an dtógtar na híomhánna coimeádáin ó fhoinse iontaofa.

Cruthaigh eolaire conftest-checks, agus ann tá comhad darb ainm check_image_registry.rego leis an ábhar seo a leanas:

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

Anois déanaimis tástáil base-valid.yaml trí 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

Is dócha gur theip ar an tástáil toisc gur tháinig na híomhánna ó fhoinse neamhiontaofa.

Sa chomhad Rego sainmhínímid an bloc deny. Meastar gur sárú í a fhírinne. Má bloic deny go leor, seiceálann an chomórtais iad go neamhspleách ar a chéile, agus déileáiltear le fírinne aon cheann de na bloic mar shárú.

Chomh maith leis an aschur réamhshocraithe, tacaíonn contest le JSON, TAP agus formáid tábla - gné thar a bheith úsáideach más gá duit tuarascálacha a leabú isteach i bpíblíne CI atá ann cheana féin. Is féidir leat an fhormáid atá ag teastáil a shocrú leis an mbratach --output.

Chun é a dhéanamh níos éasca polasaithe a dhífhabhtú, tá bratach ag an gcoimhlint --trace. Aschuir sé rian ar an gcaoi a ndéanann an chomórtais na comhaid sonraithe beartais a pharsáil.

Is féidir beartais chomórtais a fhoilsiú agus a roinnt i gclárlanna OCI (Open Container Initiative) mar dhéantáin.

Orduithe push и pull ligfidh tú duit déantán a fhoilsiú nó déantán atá ann cheana a fháil ó chianchlár. Déanaimis iarracht an polasaí a chruthaigh muid a fhoilsiú don chlár áitiúil Docker ag baint úsáide as conftest push.

Tosaigh do chlár áitiúil Docker:

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

I gcríochfort eile, téigh chuig an eolaire a chruthaigh tú níos luaithe conftest-checks agus rith an t-ordú seo a leanas:

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

Má d'éirigh leis an ordú, feicfidh tú teachtaireacht mar seo:

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

Anois cruthaigh eolaire sealadach agus rith an t-ordú ann conftest pull. Íoslódálfaidh sé an pacáiste a chruthaigh an t-ordú roimhe seo:

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

Beidh fochomhadlann le feiceáil sa chomhadlann shealadach policyina bhfuil ár gcomhad polasaí:

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

Is féidir tástálacha a rith go díreach ón stór:

$ 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

Ar an drochuair, ní thacaítear le DockerHub fós. Mar sin a mheas tú féin t-ádh má úsáideann tú Clárlann Coimeádán Azure (ACR) nó do chlár féin.

Tá formáid Déantán mar an gcéanna Oscail pacáistí Gníomhairí Beartais (OPA), a cheadaíonn duit contest a úsáid chun tástálacha a rith ó phacáistí OPA atá ann cheana féin.

Is féidir leat níos mó a fhoghlaim faoi chomhroinnt beartais agus faoi ghnéithe eile de chomóradh ag Láithreán gréasáin oifigiúil tionscadal saor in aisce,.

6. Polaris

Is é an uirlis dheireanach a phléifear san Airteagal seo Polaris. (A fógra na bliana seo caite againn aistrithe cheana féin - thart. aistriúchán)

Is féidir Polaris a shuiteáil i mbraisle nó a úsáid i mód na n-orduithe. Mar is féidir a bheith buille faoi thuairim agat, ceadaíonn sé duit anailís statach a dhéanamh ar manifests Kubernetes.

Agus tú ag rith i mód na n-orduithe, tá tástálacha ionsuite ar fáil a chlúdaíonn réimsí mar shlándáil agus dea-chleachtais (cosúil le kube-score). Ina theannta sin, is féidir leat do thástálacha féin a chruthú (mar atá i config-lint, copper and contest).

I bhfocail eile, comhcheanglaíonn Polaris buntáistí an dá chatagóir uirlisí: le tástálacha ionsuite agus saincheaptha.

Chun Polaris a shuiteáil i mód na n-orduithe, bain úsáid as treoracha ar shuíomh Gréasáin an tionscadail.

Agus an bunalt á scríobh, tá leagan 1.0.3 ar fáil.

Nuair a bheidh an tsuiteáil críochnaithe is féidir leat polaris a rith ar an léiriú base-valid.yaml leis an ordú seo a leanas:

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

Aschuirfidh sé teaghrán i bhformáid JSON le cur síos mionsonraithe ar na tástálacha a rinneadh agus a gcuid torthaí. Beidh an struchtúr seo a leanas ag an aschur:

{
  "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": [
    /* длинный список */
  ]
}

Aschur iomlán ar fáil anseo.

Cosúil le kube-score, aithníonn Polaris saincheisteanna i réimsí nach gcomhlíonann an forléiriú na cleachtais is fearr:

  • Níl aon seiceálacha sláinte le haghaidh pods.
  • Níl clibeanna le haghaidh íomhánna coimeádáin sonraithe.
  • Ritheann an coimeádán mar fhréamh.
  • Ní shonraítear iarratais agus teorainneacha do chuimhne agus LAP.

Ag brath ar a torthaí, sanntar leibhéal criticiúil do gach tástáil: rabhadhcontúirt. Chun tuilleadh a fhoghlaim faoi na trialacha ionsuite atá ar fáil, féach le do thoil doiciméadú.

Mura bhfuil gá le sonraí, is féidir leat an bhratach a shonrú --format score. Sa chás seo, aschuirfidh Polaris uimhir ó 1 go 100 − scór (i.e. measúnú):

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

Dá gaire an scór do 100, dá airde an leibhéal comhaontaithe. Má sheiceáil tú cód scoir an ordaithe polaris audit, tharlaíonn sé go bhfuil sé comhionann le 0.

Fórsa polaris audit Is féidir leat deireadh a chur le hobair le cód neamh-nialas ag baint úsáide as dhá bhratach:

  • Bratach --set-exit-code-below-score glacann sé mar argóint luach tairsí sa raon 1-100. Sa chás seo, scoirfidh an t-ordú le cód scoir 4 má tá an scór faoi bhun na tairsí. Tá sé seo an-úsáideach nuair a bhíonn luach tairsí áirithe agat (abair 75) agus go gcaithfidh tú foláireamh a fháil má théann an scór thíos.
  • Bratach --set-exit-code-on-danger cuirfidh sé faoi deara go dteipfidh ar an ordú le cód 3 má theipeann ar cheann de na tástálacha contúirte.

Anois déanaimis iarracht triail shaincheaptha a chruthú a sheiceálann an bhfuil an íomhá tógtha ó stór iontaofa. Sonraítear tástálacha saincheaptha i bhformáid YAML, agus déantar cur síos ar an tástáil féin trí úsáid a bhaint as Scéimre JSON.

Déanann an mhír chóid YAML seo a leanas cur síos ar thástáil nua ar a dtugtar 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/.+$

Breathnaímis níos géire air:

  • successMessage — déanfar an líne seo a phriontáil má chríochnaíonn an tástáil go rathúil;
  • failureMessage — taispeánfar an teachtaireacht seo i gcás teipe;
  • category — léiríonn sé ceann de na catagóirí: Images, Health Checks, Security, Networking и Resources;
  • targetCinneann --- cén cineál réada (spec) cuirtear tástáil i bhfeidhm. Luachanna féideartha: Container, PodController;
  • Tá an tástáil féin sonraithe sa réad schema ag baint úsáide as scéimre JSON. Is é an eochairfhocal sa triail seo pattern a úsáidtear chun foinse na híomhá a chur i gcomparáid leis an gceann riachtanach.

Chun an tástáil thuas a rith, ní mór duit an chumraíocht Polaris seo a leanas a chruthú:

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)

Déanaimis an comhad a pharsáil:

  • I réimse checks forordaítear tástálacha agus a leibhéal criticiúil. Ós rud é go bhfuil sé inmhianaithe rabhadh a fháil nuair a thógtar íomhá ó fhoinse neamhiontaofa, socróimid an leibhéal anseo danger.
  • An tástáil féin checkImageRepo cláraithe ansin sa réad customChecks.

Sábháil an comhad mar custom_check.yaml. Anois is féidir leat a rith polaris audit le léiriú YAML a éilíonn fíorú.

Déanaimis ár bhforógra a thástáil base-valid.yaml:

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

Foireann polaris audit níor rith sé ach an tástáil úsáideora a shonraítear thuas agus theip air.

Má shocraíonn tú an íomhá go my-company.com/http-echo:1.0, críochnóidh Polaris go rathúil. Tá an forógra leis na hathruithe isteach cheana féin stórthaionas gur féidir leat an t-ordú roimhe seo a sheiceáil ar an léiriú image-valid-mycompany.yaml.

Anois éiríonn an cheist: conas tástálacha ionsuite a reáchtáil mar aon le cinn saincheaptha? Go héasca! Níl le déanamh agat ach na haitheantóirí tástála ionsuite a chur leis an gcomhad cumraíochta. Mar thoradh air sin, beidh sé san fhoirm seo a leanas:

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)

Tá sampla de chomhad cumraíochta iomlán ar fáil anseo.

Seiceáil an léiriú base-valid.yamlag baint úsáide as tástálacha ionsuite agus saincheaptha, is féidir leat an t-ordú a úsáid:

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

Comhlánaíonn Polaris na tástálacha ionsuite le cinn saincheaptha, agus mar sin comhcheanglaíonn sé an chuid is fearr den dá shaol.

Ar an láimh eile, is féidir leis an neamhábaltacht teangacha níos cumhachtaí a úsáid mar Rego nó JavaScript a bheith ina fhachtóir teorannaithe a chuireann cosc ​​​​ar thástálacha níos sofaisticiúla a chruthú.

Tá tuilleadh eolais faoi Polaris ar fáil ag suíomh Gréasáin an tionscadail.

Achoimre

Cé go bhfuil go leor uirlisí ar fáil chun comhaid Kubernetes YAML a iniúchadh agus a mheas, tá sé tábhachtach tuiscint shoiléir a bheith agat ar conas a dhearfar agus a dhéanfar na trialacha.

Mar shampla, má ghlacann tú manifests Kubernetes ag dul trí phíblíne, d'fhéadfadh go mbeadh kubeval ar an gcéad chéim i bpíblíne den sórt sin. Dhéanfadh sé faireachán ar cibé an gcloíonn sainmhínithe oibiachta le scéimre Kubernetes API.

Nuair a bheidh athbhreithniú den sórt sin curtha i gcrích, d’fhéadfaí bogadh ar aghaidh go dtí tástálacha níos sofaisticiúla, mar chomhlíonadh dea-chleachtais chaighdeánacha agus sainbheartais. Seo an áit a mbeadh scóir cube agus Polaris áisiúil.

Dóibh siúd a bhfuil riachtanais chasta acu agus a dteastaíonn uathu tástálacha a shaincheapadh go mion, bheadh ​​copar, config-lint agus contest oiriúnach..

Úsáideann Comórtas agus config-lint YAML chun tástálacha saincheaptha a shainiú, agus tugann copar rochtain duit ar theanga ríomhchlárúcháin iomlán, rud a fhágann gur rogha tarraingteach go leor é.

Ar an láimh eile, is fiú ceann de na huirlisí seo a úsáid agus, dá bhrí sin, na tástálacha go léir a chruthú de láimh, nó is fearr Polaris agus gan ach an méid is gá a chur leis? Níl aon fhreagra soiléir ar an gceist seo.

Tugann an tábla thíos cur síos gairid ar gach uirlis:

Uirlis
Cuspóir
Teorainneacha
Tástálacha úsáideora

cubeval
Bailíochtaíonn sé léiriú YAML i gcoinne leagan ar leith den scéimre API
Ní féidir oibriú le CRD
Нет

cube-scór
Anailís a léiríonn YAML i gcoinne na gcleachtas is fearr
Ní féidir do leagan Kubernetes API a roghnú chun acmhainní a sheiceáil
Нет

copar
Léirítear creat ginearálta chun tástálacha JavaScript saincheaptha a chruthú do YAML
Uimh tástálacha ionsuite. Cáipéisíocht lag

config-lint
Creat ginearálta chun tástálacha a chruthú i dteanga a bhaineann go sonrach le fearann ​​atá leabaithe in YAML. Tacaíonn sé le formáidí cumraíochta éagsúla (m.sh. Terraform)
Níl aon tástálacha réamhdhéanta ann. Seans nach leor dearbhuithe agus feidhmeanna ionsuite

chomórtais
Creat chun do thástálacha féin a chruthú ag baint úsáide as Rego (teanga fiosrúcháin speisialaithe). Ceadaíonn sé polasaithe a roinnt trí chuachtaí OCI
Uimh tástálacha ionsuite. Caithfidh mé Rego a fhoghlaim. Ní thacaítear le Docker Hub agus polasaithe á bhfoilsiú

Polaris
Léirmheasanna Léiríonn YAML i gcoinne dea-chleachtas caighdeánach. Ligeann sé duit do thástálacha féin a chruthú le Scéimre JSON
Seans nach leor cumais tástála bunaithe ar Scéimre JSON

Toisc nach bhfuil na huirlisí seo ag brath ar rochtain ar bhraisle Kubernetes, is furasta iad a shuiteáil. Ligeann siad duit comhaid foinse a scagadh agus aiseolas tapa a thabhairt d'údair na n-iarratas ar tharraingt i dtionscadail.

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment