හොඳම භාවිතයන් සහ ප්‍රතිපත්තිවලට එරෙහිව Kubernetes YAML වලංගු කරන්න

සටහන. පරිවර්තනය.: K8s පරිසරයන් සඳහා වැඩිවන YAML වින්‍යාස කිරීම් සංඛ්‍යාව සමඟ, ඒවායේ ස්වයංක්‍රීය සත්‍යාපනයේ අවශ්‍යතාවය වඩ වඩාත් හදිසි වේ. මෙම සමාලෝචනයේ කතුවරයා මෙම කාර්යය සඳහා පවතින විසඳුම් තෝරා ගත්තා පමණක් නොව, ඒවා ක්‍රියා කරන ආකාරය බැලීමට උදාහරණයක් ලෙස යෙදවීම ද භාවිතා කළේය. මෙම මාතෘකාව ගැන උනන්දුවක් දක්වන අයට එය ඉතා තොරතුරු සහිත විය.

හොඳම භාවිතයන් සහ ප්‍රතිපත්තිවලට එරෙහිව Kubernetes YAML වලංගු කරන්න

TL; ඩී: මෙම ලිපිය Kubernetes YAML ගොනු හොඳම භාවිතයන් සහ අවශ්‍යතාවලට එරෙහිව වලංගු කිරීමට සහ ඇගයීමට ස්ථිතික මෙවලම් හයක් සංසන්දනය කරයි.

Kubernetes වැඩ බර සාමාන්‍යයෙන් YAML ලේඛන ආකාරයෙන් අර්ථ දක්වා ඇත. YAML සමඟ ඇති එක් ගැටලුවක් වන්නේ මැනිෆෙස්ට් ගොනු අතර සීමාවන් හෝ සම්බන්ධතා දැක්වීමේ දුෂ්කරතාවයයි.

පොකුරට යොදවා ඇති සියලුම පින්තූර විශ්වාසදායක රෙජිස්ට්‍රියකින් එන බවට සහතික කර ගැනීමට අපට අවශ්‍ය නම් කුමක් කළ යුතුද?

PodDisruptionBudgets නොමැති යෙදවීම් පොකුරට යැවීමෙන් මා වළක්වා ගන්නේ කෙසේද?

ස්ථිතික පරීක්ෂණ ඒකාබද්ධ කිරීම සංවර්ධන අදියරේදී දෝෂ සහ ප්රතිපත්ති උල්ලංඝනයන් හඳුනා ගැනීමට ඔබට ඉඩ සලසයි. මෙය සම්පත් නිර්වචන නිවැරදි සහ ආරක්ෂිත බවට සහතිකය වැඩි කරයි, සහ නිෂ්පාදන කාර්ය භාරය හොඳම භාවිතයන් අනුගමනය කරනු ඇත.

Kubernetes ස්ථිතික YAML ගොනු පරීක්ෂණ පරිසර පද්ධතිය පහත සඳහන් කාණ්ඩවලට බෙදිය හැකිය:

  • API වලංගුකාරක. මෙම කාණ්ඩයේ මෙවලම් Kubernetes API සේවාදායකයේ අවශ්‍යතාවලට එරෙහිව YAML මැනිෆෙස්ටය පරීක්ෂා කරයි.
  • සූදානම් පරීක්ෂකයින්. මෙම කාණ්ඩයේ මෙවලම් ආරක්ෂාව, හොඳම භාවිතයන් සමඟ අනුකූල වීම යනාදිය සඳහා සූදානම් කළ පරීක්ෂණ සමඟ පැමිණේ.
  • අභිරුචි වලංගු කරන්නන්. මෙම කාණ්ඩයේ නියෝජිතයින් ඔබට විවිධ භාෂාවලින් අභිරුචි පරීක්ෂණ නිර්මාණය කිරීමට ඉඩ සලසයි, උදාහරණයක් ලෙස, Rego සහ Javascript.

මෙම ලිපියෙන් අපි විවිධ මෙවලම් හයක් විස්තර කර සංසන්දනය කරමු:

  1. කුබෙවල්;
  2. kube-ලකුණු;
  3. config-lint;
  4. තඹ;
  5. ගැටුම;
  6. පොලාරිස්.

හොඳයි, අපි පටන් ගනිමු!

යෙදවීම් පරීක්ෂා කිරීම

අපි මෙවලම් සංසන්දනය කිරීමට පෙර, ඒවා පරීක්ෂා කිරීමට යම් පසුබිමක් නිර්මාණය කරමු.

පහත ප්‍රතිපත්ති ප්‍රකාශයේ දෝෂ ගණනාවක් සහ හොඳම භාවිතයන්ට අනුකූල නොවීම අඩංගු වේ: ඔබට ඒවායින් කීයක් සොයා ගත හැකිද?

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)

විවිධ මෙවලම් සංසන්දනය කිරීමට අපි මෙම YAML භාවිතා කරමු.

ඉහත ප්‍රතිපත්ති ප්‍රකාශනය base-valid.yaml සහ මෙම ලිපියේ අනෙකුත් ප්‍රකාශන සොයා ගත හැක Git ගබඩා.

මැනිෆෙස්ටය 5678 තොටට “Hello World” පණිවිඩයක් සමඟ ප්‍රතිචාර දැක්වීම ප්‍රධාන කාර්යය වන වෙබ් යෙදුමක් විස්තර කරයි. එය පහත විධානය සමඟ යෙදවිය හැක:

kubectl apply -f hello-world.yaml

ඉතින් - කාර්යය පරීක්ෂා කරන්න:

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

දැන් යන්න http://localhost:8080 සහ යෙදුම ක්‍රියාත්මක වන බව තහවුරු කරන්න. නමුත් එය හොඳම භාවිතයන් අනුගමනය කරන්නේද? අපි පරීක්ෂා කරමු.

1. කුබෙවල්

හදවතේ kubeval අදහස නම් Kubernetes සමඟ ඕනෑම අන්තර්ක්‍රියා එහි REST API හරහා සිදු වන බවයි. වෙනත් වචන වලින් කිවහොත්, ලබා දී ඇති YAML එයට අනුකූලදැයි පරීක්ෂා කිරීමට ඔබට API යෝජනා ක්‍රමයක් භාවිතා කළ හැක. අපි උදාහරණයක් බලමු.

ස්ථාපනය කිරීමේ උපදෙස් kubeval ව්‍යාපෘති වෙබ් අඩවියේ ඇත.

මුල් ලිපිය ලියන අවස්ථාවේ 0.15.0 අනුවාදය ලබා ගත හැකි විය.

ස්ථාපනය කළ පසු, අපි එය ඉහත මැනිෆෙස්ටය පෝෂණය කරමු:

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

සාර්ථක නම්, kubeval පිටවීමේ කේතය 0 සමඟ පිටව යනු ඇත. ඔබට එය පහත පරිදි පරීක්ෂා කළ හැක:

$ echo $?
0

අපි දැන් වෙනස් මැනිෆෙස්ටයක් සමඟ කුබෙවල් උත්සාහ කරමු:

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)

ඔබට ඇසින් ගැටලුව හඳුනාගත හැකිද? අපි දියත් කරමු:

$ 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

සම්පත සත්‍යාපනය නොකෙරේ.

API අනුවාදය භාවිතයෙන් යෙදවීම් apps/v1, පොඩ් ලේබලයට ගැළපෙන තේරීම්කාරකයක් ඇතුළත් කළ යුතුය. ඉහත මැනිෆෙස්ටයේ තේරීම්කාරකය ඇතුළත් නොවේ, එබැවින් kubeval දෝෂයක් වාර්තා කර ශුන්‍ය නොවන කේතයක් සමඟින් ඉවත් විය.

එහෙම උනොත් මොකද වෙන්නේ කියලා kubectl apply -f මේ ප්‍රතිපත්ති ප්‍රකාශයත් එක්ක?

හොඳයි, අපි උත්සාහ කරමු:

$ 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

කුබෙවල් අනතුරු ඇඟවූ දෝෂය මෙයයි. තේරීම්කාරකයක් එක් කිරීමෙන් ඔබට එය නිවැරදි කළ හැක:

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)

kubeval වැනි මෙවලම්වල ප්‍රයෝජනය නම්, යෙදවීමේ චක්‍රයේ මුල් අවස්ථාවේදීම මෙවැනි දෝෂ හසුකර ගත හැකි වීමයි.

මීට අමතරව, මෙම චෙක්පත් සඳහා පොකුරට ප්‍රවේශය අවශ්‍ය නොවේ; ඒවා නොබැඳි ලෙස සිදු කළ හැක.

පෙරනිමියෙන්, kubeval නවතම Kubernetes API යෝජනා ක්‍රමයට එරෙහිව සම්පත් පරීක්ෂා කරයි. කෙසේ වෙතත්, බොහෝ අවස්ථාවලදී ඔබට නිශ්චිත Kubernetes නිකුතුවකට එරෙහිව පරීක්ෂා කිරීමට අවශ්‍ය විය හැක. ධජය භාවිතයෙන් මෙය කළ හැකිය --kubernetes-version:

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

අනුවාදය ආකෘතියෙන් සඳහන් කළ යුතු බව කරුණාවෙන් සලකන්න Major.Minor.Patch.

සත්‍යාපනය සඳහා සහය දක්වන අනුවාද ලැයිස්තුවක් සඳහා, කරුණාකර බලන්න GitHub මත JSON යෝජනා ක්‍රමය, වලංගු කිරීම සඳහා කුමන kubeval භාවිතා කරයි. ඔබට kubeval නොබැඳිව ධාවනය කිරීමට අවශ්‍ය නම්, යෝජනා ක්‍රම බාගත කර ධජය භාවිතයෙන් ඒවායේ ප්‍රාදේශීය ස්ථානය සඳහන් කරන්න --schema-location.

තනි YAML ගොනු වලට අමතරව, kubeval හට නාමාවලි සහ stdin සමඟද වැඩ කළ හැක.

මීට අමතරව, Kubeval පහසුවෙන් CI නල මාර්ගයට ඒකාබද්ධ වේ. ප්‍රකාශන පොකුරට යැවීමට පෙර පරීක්ෂණ ක්‍රියාත්මක කිරීමට කැමති අය කුබෙවල් ප්‍රතිදාන ආකෘති තුනකට සහය දක්වන බව දැන ගැනීමට සතුටු වනු ඇත:

  1. සරල පෙළ;
  2. JSON;
  3. ඕනෑම දෙයක් ප්‍රොටෝකෝලය පරීක්ෂා කරන්න (TAP).

තවද අපේක්ෂිත ආකාරයේ ප්‍රතිඵලවල සාරාංශයක් ජනනය කිරීම සඳහා ප්‍රතිදානය තවදුරටත් විග්‍රහ කිරීම සඳහා ඕනෑම ආකෘතියක් භාවිතා කළ හැක.

kubeval හි ඇති එක් අඩුපාඩුවක් නම්, එය දැනට අභිරුචි සම්පත් අර්ථ දැක්වීම් (CRDs) සමඟ අනුකූල වීම පරීක්ෂා කළ නොහැකි වීමයි. කෙසේ වෙතත්, එය kubeval වින්‍යාසගත කළ හැකිය ඒවා නොසලකා හරින්න.

Kubeval යනු සම්පත් පරීක්ෂා කිරීම සහ ඇගයීම සඳහා විශිෂ්ට මෙවලමකි; කෙසේ වෙතත්, පරීක්ෂණය සමත් වීමෙන් සම්පත හොඳම භාවිතයන්ට අනුකූල වන බවට සහතික නොවන බව අවධාරණය කළ යුතුය.

උදාහරණයක් ලෙස, ටැගය භාවිතා කිරීම latest කන්ටේනරය තුළ හොඳම භාවිතයන් අනුගමනය නොකරයි. කෙසේ වෙතත්, kubeval මෙය දෝෂයක් ලෙස නොසලකන අතර එය වාර්තා නොකරයි. එනම්, එවැනි YAML වල සත්‍යාපනය අනතුරු ඇඟවීමකින් තොරව සම්පූර්ණ වනු ඇත.

නමුත් ඔබට YAML ඇගයීමට සහ ටැගය වැනි උල්ලංඝනයන් හඳුනා ගැනීමට අවශ්‍ය නම් කුමක් කළ යුතුද? latest? හොඳම භාවිතයන්ට එරෙහිව YAML ගොනුවක් පරීක්ෂා කරන්නේ කෙසේද?

2. Kube-ලකුණු

කුබේ-ලකුණු YAML ප්‍රකාශනය විග්‍රහ කර ඒවා ගොඩනඟන ලද පරීක්ෂණවලට එරෙහිව ඇගයීමට ලක් කරයි. ආරක්ෂක මාර්ගෝපදේශ සහ හොඳම භාවිතයන් මත පදනම්ව මෙම පරීක්ෂණ තෝරා ගනු ලැබේ, එනම්:

  • කන්ටේනරය ධාවනය කිරීම root ලෙස නොවේ.
  • කරල් සෞඛ්‍ය පරීක්‍ෂණ ලබා ගැනීමේ හැකියාව.
  • සම්පත් සඳහා ඉල්ලීම් සහ සීමාවන් සැකසීම.

පරීක්ෂණ ප්රතිඵල මත පදනම්ව, ප්රතිඵල තුනක් ලබා දී ඇත: OK, අවවාදයයි и විවේචනාත්මකයි.

ඔබට අන්තර්ජාලය හරහා Kube-score උත්සාහ කිරීමට හෝ එය දේශීයව ස්ථාපනය කිරීමට හැකිය.

මුල් ලිපිය ලියන විට, kube-score හි නවතම අනුවාදය 1.7.0 විය.

අපි එය අපගේ මැනිෆෙස්ටයේ උත්සාහ කරමු 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 kubeval පරීක්ෂණ සමත් වන අතර, kube-score පහත සඳහන් දෝෂ වෙත යොමු කරයි:

  • සූදානම චෙක්පත් වින්‍යාස කර නැත.
  • CPU සම්පත් සහ මතකය සඳහා ඉල්ලීම් හෝ සීමාවන් නොමැත.
  • Pod කඩාකප්පල් අයවැය නිශ්චිතව දක්වා නැත.
  • වෙන් කිරීමේ නීති නොමැත (විරෝධී සබඳතා) ලබා ගැනීමේ හැකියාව උපරිම කිරීමට.
  • කන්ටේනරය root ලෙස ක්රියාත්මක වේ.

යෙදවීම වඩාත් කාර්යක්‍ෂම සහ විශ්වාසදායක කිරීමට ආමන්ත්‍රණය කළ යුතු අඩුපාඩු පිළිබඳ මේ සියල්ල වලංගු කරුණු වේ.

කණ්ඩායම kube-score සියලු ආකාරයේ උල්ලංඝනයන් ඇතුළුව මිනිසාට කියවිය හැකි ආකාරයෙන් තොරතුරු සංදර්ශන කරයි අවවාදයයි и විවේචනාත්මකයි, සංවර්ධනය අතරතුර බොහෝ උපකාර කරයි.

CI නල මාර්ගය තුළ මෙම මෙවලම භාවිතා කිරීමට කැමති අයට ධජය භාවිතයෙන් වඩාත් සම්පීඩිත ප්‍රතිදානය සබල කළ හැක --output-format ci (මෙම අවස්ථාවේදී, ප්රතිඵලය සමඟ පරීක්ෂණ ද දර්ශනය වේ 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

kubeval හා සමානව, kube-score අසමත් වන පරීක්ෂණයක් ඇති විට ශුන්‍ය නොවන පිටවීමේ කේතයක් ලබා දෙයි විවේචනාත්මකයි. ඔබට සමාන සැකසුම් ද සක්‍රීය කළ හැක අවවාදයයි.

මීට අමතරව, විවිධ API අනුවාද (kubeval ලෙස) සමග අනුකූල වීම සඳහා සම්පත් පරීක්ෂා කළ හැකිය. කෙසේ වෙතත්, මෙම තොරතුරු kube-score තුළම දෘඪ කේත කර ඇත: ඔබට Kubernetes හි වෙනත් අනුවාදයක් තෝරාගත නොහැක. ඔබ ඔබේ පොකුරු උත්ශ්‍රේණි කිරීමට අදහස් කරන්නේ නම් හෝ ඔබට විවිධ K8s අනුවාද සහිත බහු පොකුරු තිබේ නම් මෙම සීමාව විශාල ගැටලුවක් විය හැක.

එය සටහන් කර ගන්න දැනටමත් ප්රශ්නයක් තිබේ මෙම අවස්ථාව සාක්ෂාත් කර ගැනීමේ යෝජනාවක් සමඟ.

kube-score පිළිබඳ වැඩි විස්තර මෙතැනින් සොයාගත හැකිය නිල වෙබ් අඩවිය.

Kube-score පරීක්ෂණ යනු හොඳම භාවිතයන් ක්‍රියාත්මක කිරීම සඳහා විශිෂ්ට මෙවලමකි, නමුත් ඔබට පරීක්ෂණයට වෙනස්කම් කිරීමට හෝ ඔබේම නීති එකතු කිරීමට අවශ්‍ය නම් කුමක් කළ යුතුද? අහෝ, මෙය කළ නොහැක.

Kube-score දිගු කළ නොහැක: ඔබට එයට ප්‍රතිපත්ති එක් කිරීමට හෝ ඒවා සකස් කිරීමට නොහැක.

සමාගම් ප්‍රතිපත්තිවලට අනුකූල බව තහවුරු කිරීමට ඔබට අභිරුචි පරීක්ෂණ ලිවීමට අවශ්‍ය නම්, ඔබට පහත මෙවලම් හතරෙන් එකක් භාවිතා කළ හැක: config-lint, copper, conftest, හෝ Polaris.

3.Config-lint

Config-lint යනු YAML, JSON, Terraform, CSV වින්‍යාස ගොනු සහ Kubernetes මැනිෆෙස්ට වලංගු කිරීම සඳහා වූ මෙවලමකි.

භාවිතයෙන් ඔබට එය ස්ථාපනය කළ හැකිය උපදෙස් ව්යාපෘති වෙබ් අඩවියේ.

මුල් ලිපිය ලියන අවස්ථාව වන විට වත්මන් නිකුතුව 1.5.0 වේ.

config-lint සතුව Kubernetes මැනිෆෙස්ට් වලංගු කිරීම සඳහා ගොඩනඟන ලද පරීක්ෂණ නොමැත.

ඕනෑම පරීක්ෂණයක් පැවැත්වීමට, ඔබ සුදුසු නීති නිර්මාණය කළ යුතුය. ඒවා "රීති කට්ටල" ලෙස හඳුන්වන YAML ගොනු වල ලියා ඇත. (නීති රීති), සහ පහත ව්‍යුහය ඇත:

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

(rule.yaml)

අපි එය වඩාත් සමීපව අධ්යයනය කරමු:

  • ක්ෂේත්රයේ type config-lint භාවිතා කරන්නේ කුමන ආකාරයේ වින්‍යාසයද යන්න සඳහන් කරයි. K8s සඳහා මෙය ප්‍රකාශ වේ හැම විටම Kubernetes.
  • ක්ෂේත්රයේ files ගොනු වලට අමතරව, ඔබට නාමාවලියක් නියම කළ හැකිය.
  • ක්ෂේත්රයේ rules පරිශීලක පරීක්ෂණ සැකසීම සඳහා අදහස් කෙරේ.

අපි කියමු ඔබට යෙදවීම තුළ ඇති පින්තූර සෑම විටම එවැනි විශ්වාසදායක ගබඩාවකින් බාගත කර ඇති බව සහතික කර ගැනීමට අවශ්‍ය බව my-company.com/myapp:1.0. එවැනි චෙක්පතක් සිදු කරන config-lint රීතියක් මේ ආකාරයෙන් පෙනෙනු ඇත:

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

සෑම රීතියකටම පහත ගුණාංග තිබිය යුතුය:

  • id - රීතියේ අද්විතීය හඳුනාගැනීම;
  • severity - සමහර විට අසමත් වීම, අවවාදයයි и අනුකූල නොවන;
  • message - රීතියක් උල්ලංඝනය වී ඇත්නම්, මෙම රේඛාවේ අන්තර්ගතය ප්රදර්ශනය කෙරේ;
  • resource - මෙම නියමය අදාළ වන සම්පත් වර්ගය;
  • assertions - මෙම සම්පත සම්බන්ධයෙන් ඇගයීමට ලක් කෙරෙන කොන්දේසි ලැයිස්තුවක්.

ඉහත රීතියේ assertion නම යටතේය every සියලුම බහාලුම් යොදවා තිබේදැයි පරීක්ෂා කරයි (key: spec.templates.spec.containers) විශ්වාසදායී රූප භාවිතා කරන්න (එනම් ආරම්භ කරන්න my-company.com/).

සම්පූර්ණ නීති මාලාව මේ වගේ ය:

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)

පරීක්ෂණය උත්සාහ කිරීමට, අපි එය සුරකිමු check_image_repo.yaml. අපි ගොනුව මත චෙක්පතක් ධාවනය කරමු 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"
  }
]

චෙක්පත අසාර්ථක විය. දැන් අපි නිවැරදි රූප ගබඩාව සමඟ පහත මැනිෆෙස්ටය පරීක්ෂා කර බලමු:

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)

අපි ඉහත මැනිෆෙස්ටය සමඟ එකම පරීක්ෂණය ක්‍රියාත්මක කරමු. ගැටළු කිසිවක් හමු නොවීය:

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

Config-lint යනු YAML DSL භාවිතයෙන් Kubernetes YAML මැනිෆෙස්ට් වලංගු කිරීම සඳහා ඔබේම පරීක්ෂණ නිර්මාණය කිරීමට ඉඩ සලසන පොරොන්දු වූ රාමුවකි.

නමුත් ඔබට වඩාත් සංකීර්ණ තර්කනය සහ පරීක්ෂණ අවශ්ය නම් කුමක් කළ යුතුද? YAML මේකට සීමා වැඩියි නේද? ඔබට සම්පූර්ණ ක්‍රමලේඛන භාෂාවකින් පරීක්ෂණ නිර්මාණය කළ හැකි නම් කුමක් කළ යුතුද?

4. තඹ

තඹ V2 අභිරුචි පරීක්ෂණ (config-lint හා සමාන) භාවිතයෙන් මැනිෆෙස්ටයන් වලංගු කිරීමේ රාමුවකි.

කෙසේ වෙතත්, එය පසුකාලීන ඒවාට වඩා වෙනස් වන්නේ එය පරීක්ෂණ විස්තර කිරීමට YAML භාවිතා නොකරන බැවිනි. ඒ වෙනුවට JavaScript වලින් පරීක්ෂණ ලිවිය හැක. තඹ මූලික මෙවලම් කිහිපයක් සහිත පුස්තකාලයක් සපයයි, එය ඔබට Kubernetes වස්තූන් පිළිබඳ තොරතුරු කියවීමට සහ දෝෂ වාර්තා කිරීමට උපකාරී වේ.

තඹ ස්ථාපනය කිරීමේ පියවර සොයාගත හැකිය නිල ලියකියවිලි.

2.0.1 යනු මුල් ලිපිය ලියන අවස්ථාවේ මෙම උපයෝගීතාවයේ නවතම නිකුතුවයි.

config-lint මෙන්, Copper හි බිල්ට් පරීක්ෂණ නොමැත. එකක් ලියමු. යෙදවීම වැනි විශ්වාසදායක ගබඩාවලින් පමණක් බහාලුම් රූප භාවිතා කරන්නේදැයි පරීක්ෂා කිරීමට ඉඩ දෙන්න my-company.com.

ගොනුවක් සාදන්න check_image_repo.js පහත අන්තර්ගතය සමඟ:

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

දැන් අපගේ මැනිෆෙස්ටය පරීක්ෂා කිරීමට base-valid.yaml, විධානය භාවිතා කරන්න 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

තඹ ආධාරයෙන් ඔබට වඩාත් සංකීර්ණ පරීක්ෂණ සිදු කළ හැකි බව පැහැදිලිය - නිදසුනක් ලෙස, Ingress මැනිෆෙස්ට් හි වසම් නාම පරීක්ෂා කිරීම හෝ වරප්‍රසාදිත මාදිලියේ ධාවනය වන කරල් ප්‍රතික්ෂේප කිරීම.

තඹ එහි විවිධ උපයෝගිතා කාර්යයන් ඇත:

  • DockerImage නිශ්චිත ආදාන ගොනුව කියවා පහත ගුණාංග සහිත වස්තුවක් නිර්මාණය කරයි:
    • name - රූපයේ නම,
    • tag - රූප ටැගය,
    • registry - පින්තූර රෙජිස්ට්රි,
    • registry_url - ප්රොටෝකෝලය (https://) සහ රූප රෙජිස්ට්රි,
    • fqin - රූපයේ සම්පූර්ණ ස්ථානය.
  • උත්සවය findByName දී ඇති වර්ගය අනුව සම්පතක් සොයා ගැනීමට උපකාරී වේ (kind) සහ නම (name) ආදාන ගොනුවෙන්.
  • උත්සවය findByLabels නිශ්චිත වර්ගයකින් සම්පතක් සොයා ගැනීමට උපකාරී වේ (kind) සහ ලේබල් (labels).

ඔබට පවතින සියලුම සේවා කාර්යයන් නැරඹිය හැකිය මෙහි.

පෙරනිමියෙන් එය සම්පූර්ණ ආදාන YAML ගොනුව විචල්‍යයකට පූරණය කරයි $$ සහ එය තිර රචනය සඳහා ලබා ගත හැකි කරයි (jQuery අත්දැකීම් ඇති අය සඳහා හුරුපුරුදු තාක්ෂණයකි).

තඹ වල ප්‍රධාන වාසිය පැහැදිලිය: ඔබට විශේෂිත භාෂාවක් ප්‍රගුණ කිරීමට අවශ්‍ය නොවන අතර ඔබට විවිධ ජාවාස්ක්‍රිප්ට් විශේෂාංග භාවිතා කර ඔබේම පරීක්ෂණ නිර්මාණය කළ හැකිය, එනම් නූල් මැදිහත්වීම, ක්‍රියාකාරකම් යනාදිය.

තඹ වල වත්මන් අනුවාදය ES5 නොව JavaScript එන්ජිමේ ES6 අනුවාදය සමඟ ක්‍රියා කරන බව ද සටහන් කළ යුතුය.

විස්තර ලබා ගත හැක නිල ව්යාපෘති වෙබ් අඩවිය.

කෙසේ වෙතත්, ඔබ ඇත්තටම JavaScript වලට අකමැති නම් සහ විමසුම් නිර්මාණය කිරීම සහ ප්‍රතිපත්ති විස්තර කිරීම සඳහා විශේෂයෙන් නිර්මාණය කර ඇති භාෂාවකට කැමති නම්, ඔබ ගැටුමට අවධානය යොමු කළ යුතුය.

5.තරගය

Conftest යනු වින්‍යාස දත්ත පරීක්ෂා කිරීමේ රාමුවකි. Kubernetes මැනිෆෙස්ටස් පරීක්ෂා කිරීමට/සත්‍යාපනය කිරීමටද සුදුසුය. විශේෂිත විමසුම් භාෂාවක් භාවිතයෙන් පරීක්ෂණ විස්තර කෙරේ අගල්.

ඔබට භාවිතා කරමින් conftest ස්ථාපනය කළ හැකිය උපදෙස්ව්යාපෘති වෙබ් අඩවියේ ලැයිස්තුගත කර ඇත.

මුල් ලිපිය ලියන විට, පවතින නවතම අනුවාදය 0.18.2 විය.

config-lint සහ copper වලට සමානව, conftest පැමිණෙන්නේ කිසිදු ගොඩනඟන ලද පරීක්ෂණයකින් තොරවය. අපි එය උත්සාහ කර අපේම ප්‍රතිපත්තියක් ලියමු. පෙර උදාහරණවල මෙන්, බහාලුම් පින්තූර විශ්වාසදායක මූලාශ්‍රයකින් ලබාගෙන ඇත්දැයි අපි පරීක්ෂා කරන්නෙමු.

නාමාවලියක් සාදන්න conftest-checks, සහ එහි නම් ගොනුවක් ඇත check_image_registry.rego පහත අන්තර්ගතය සමඟ:

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

දැන් අපි ටෙස්ට් කරමු base-valid.yaml හරහා 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

පින්තූර විශ්වාස නොකළ මූලාශ්‍රයකින් පැමිණි නිසා පරීක්ෂණය පුරෝකථනය කළ හැකි ලෙස අසාර්ථක විය.

Rego ගොනුවේ අපි බ්ලොක් එක නිර්වචනය කරමු deny. එහි සත්යය උල්ලංඝනය කිරීමක් ලෙස සැලකේ. අවහිර නම් deny කිහිපයක්, conftest ඒවා එකිනෙකින් ස්වාධීනව පරීක්ෂා කරන අතර, ඕනෑම බ්ලොක් එකක සත්‍යතාව උල්ලංඝනය කිරීමක් ලෙස සලකනු ලැබේ.

පෙරනිමි ප්‍රතිදානයට අමතරව, conftest JSON, TAP සහ වගු ආකෘතියට සහය දක්වයි - ඔබට පවතින CI නල මාර්ගයකට වාර්තා කාවැද්දීමට අවශ්‍ය නම් අතිශයින්ම ප්‍රයෝජනවත් අංගයකි. ධජය භාවිතයෙන් ඔබට අවශ්ය ආකෘතිය සැකසිය හැක --output.

ප්‍රතිපත්ති නිදොස් කිරීම පහසු කිරීමට, conftest සතුව ධජයක් ඇත --trace. එය නිශ්චිත ප්‍රතිපත්ති ගොනු විග්‍රහ කරන ආකාරය පිළිබඳ හෝඩුවාවක් ප්‍රතිදානය කරයි.

තරඟ ප්‍රතිපත්ති කෞතුක භාණ්ඩ ලෙස OCI (විවෘත බහාලුම් මුලපිරීම) රෙජිස්ට්‍රි තුළ ප්‍රකාශනය කර බෙදා ගත හැක.

කොමන්ඩ් push и pull ඔබට කෞතුක වස්තුවක් ප්‍රකාශයට පත් කිරීමට හෝ දුරස්ථ රෙජිස්ට්‍රියකින් පවතින කෞතුක වස්තුවක් ලබා ගැනීමට ඉඩ සලසයි. අප විසින් සාදන ලද ප්‍රතිපත්තිය භාවිතා කරමින් දේශීය ඩොකර් රෙජිස්ට්‍රිය වෙත ප්‍රකාශනය කිරීමට උත්සාහ කරමු conftest push.

ඔබගේ දේශීය ඩොකර් රෙජිස්ට්‍රිය ආරම්භ කරන්න:

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

වෙනත් පර්යන්තයක, ඔබ කලින් නිර්මාණය කළ නාමාවලිය වෙත යන්න conftest-checks සහ පහත විධානය ක්‍රියාත්මක කරන්න:

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

විධානය සාර්ථක වූයේ නම්, ඔබට මෙවැනි පණිවිඩයක් පෙනෙනු ඇත:

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

දැන් තාවකාලික නාමාවලියක් සාදා එහි විධානය ක්‍රියාත්මක කරන්න conftest pull. එය පෙර විධානය මගින් සාදන ලද පැකේජය බාගත කරනු ඇත:

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

තාවකාලික නාමාවලියෙහි උප බහලුමක් දිස්වනු ඇත policyඅපගේ ප්‍රතිපත්ති ගොනුව අඩංගු වේ:

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

පරීක්ෂණ ගබඩාවෙන් කෙලින්ම ක්‍රියාත්මක කළ හැක:

$ 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

අවාසනාවකට, DockerHub තවමත් සහය නොදක්වයි. එබැවින් ඔබ භාවිතා කරන්නේ නම් ඔබ වාසනාවන්ත යැයි සලකන්න Azure බහාලුම් රෙජිස්ට්රි (ACR) හෝ ඔබේම ලියාපදිංචිය.

කෞතුක භාණ්ඩ ආකෘතිය සමාන වේ ප්‍රතිපත්ති නියෝජිත පැකේජ විවෘත කරන්න (OPA), පවතින OPA පැකේජ වලින් පරීක්ෂණ ධාවනය කිරීමට ඔබට conftest භාවිතා කිරීමට ඉඩ සලසයි.

ප්‍රතිපත්ති බෙදාගැනීම සහ ගැටුමේ අනෙකුත් විශේෂාංග පිළිබඳව ඔබට වැඩිදුර ඉගෙන ගත හැක නිල ව්යාපෘති වෙබ් අඩවිය.

6. පොලාරිස්

මෙම ලිපියෙන් සාකච්ඡා කෙරෙන අවසාන මෙවලම වේ පොලාරිස්. (ඔහුගේ පසුගිය වසරේ නිවේදනය අප දැනටමත් පරිවර්තනය කර ඇත - ආසන්න වශයෙන් පරිවර්තනය)

Polaris පොකුරක් තුළ ස්ථාපනය කළ හැකි හෝ විධාන රේඛා ආකාරයෙන් භාවිතා කළ හැක. ඔබ අනුමාන කර ඇති පරිදි, එය ඔබට Kubernetes මැනිෆෙස්ටස් ස්ථිතිකව විශ්ලේෂණය කිරීමට ඉඩ සලසයි.

විධාන රේඛා ප්‍රකාරයේදී ක්‍රියාත්මක වන විට, ආරක්‍ෂාව සහ හොඳම භාවිතයන් (kube-score හා සමාන) වැනි ක්ෂේත්‍ර ආවරණය වන පරිදි සාදන ලද පරීක්ෂණ තිබේ. ඊට අමතරව, ඔබට ඔබේම පරීක්ෂණ නිර්මාණය කළ හැකිය (config-lint, copper සහ conftest වැනි).

වෙනත් වචන වලින් කිවහොත්, Polaris මෙවලම් කාණ්ඩ දෙකෙහිම ප්‍රතිලාභ ඒකාබද්ධ කරයි: බිල්ට් සහ අභිරුචි පරීක්ෂණ සමඟ.

විධාන රේඛා ආකාරයෙන් Polaris ස්ථාපනය කිරීමට, භාවිතා කරන්න ව්යාපෘති වෙබ් අඩවියේ උපදෙස්.

මුල් ලිපිය ලියන අවස්ථාවේදී, 1.0.3 අනුවාදය තිබේ.

ස්ථාපනය අවසන් වූ පසු ඔබට මැනිෆෙස්ටය මත Polaris ධාවනය කළ හැක base-valid.yaml පහත විධානය සමඟ:

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

එය සිදු කරන ලද පරීක්ෂණ සහ ඒවායේ ප්‍රතිඵල පිළිබඳ සවිස්තරාත්මක විස්තරයක් සහිත JSON ආකෘතියෙන් තන්තුවක් ප්‍රතිදානය කරනු ඇත. ප්‍රතිදානයට පහත ව්‍යුහය ඇත:

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

සම්පූර්ණ ප්‍රතිදානය පවතී මෙහි.

kube-score මෙන්, Polaris විසින් මැනිෆෙස්ටය හොඳම භාවිතයන් සපුරා නොමැති ප්‍රදේශ වල ගැටළු හඳුනා ගනී:

  • කරල් සඳහා සෞඛ්‍ය පරීක්‍ෂණ නොමැත.
  • බහාලුම් පින්තූර සඳහා ටැග් නිශ්චිතව දක්වා නැත.
  • කන්ටේනරය root ලෙස ක්රියාත්මක වේ.
  • මතකය සහ CPU සඳහා ඉල්ලීම් සහ සීමාවන් නිශ්චිතව දක්වා නොමැත.

එක් එක් පරීක්ෂණය, එහි ප්රතිඵල අනුව, විවේචනාත්මක උපාධියක් පවරනු ලැබේ: අනතුරු ඇඟවීමක් හෝ අනතුර. පවතින බිල්ට්-ඉන් පරීක්ෂණ ගැන වැඩිදුර දැන ගැනීමට, කරුණාකර බලන්න ලියකියවිලි.

විස්තර අවශ්ය නොවේ නම්, ඔබට කොඩිය සඳහන් කළ හැකිය --format score. මෙම අවස්ථාවෙහිදී, Polaris 1 සිට 100 දක්වා පරාසයක සංඛ්යාවක් ප්රතිදානය කරයි ලකුණු (එනම් තක්සේරුව):

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

ලකුණු 100 ට ආසන්න වන තරමට එකඟතාවයේ මට්ටම ඉහළ යයි. ඔබ විධානයේ පිටවීමේ කේතය පරීක්ෂා කරන්නේ නම් polaris audit, එය 0 ට සමාන බව පෙනී යයි.

බල කරන්න polaris audit ඔබට කොඩි දෙකක් භාවිතයෙන් ශුන්‍ය නොවන කේතය සමඟ වැඩ අවසන් කළ හැක:

  • ධජය --set-exit-code-below-score තර්කයක් ලෙස 1-100 පරාසයේ එළිපත්ත අගයක් ගනී. මෙම අවස්ථාවේදී, ලකුණු සීමාවට වඩා අඩු නම්, විධානය පිටවීමේ කේතය 4 සමඟ පිටව යනු ඇත. ඔබට නිශ්චිත සීමාවක් ඇති විට (කියන්න 75) මෙය ඉතා ප්‍රයෝජනවත් වන අතර ලකුණු පහතට ගියහොත් ඔබට ඇඟවීමක් ලැබිය යුතුය.
  • ධජය --set-exit-code-on-danger අන්තරාදායක පරීක්ෂණයකින් එකක් අසමත් වුවහොත් කේතය 3 සමඟ විධානය අසාර්ථක වීමට හේතු වේ.

දැන් අපි රූපය විශ්වාසදායක ගබඩාවකින් ලබාගෙන ඇත්දැයි පරීක්ෂා කරන අභිරුචි පරීක්ෂණයක් නිර්මාණය කිරීමට උත්සාහ කරමු. අභිරුචි පරීක්ෂණ YAML ආකෘතියෙන් දක්වා ඇති අතර, JSON Schema භාවිතයෙන් පරීක්ෂණයම විස්තර කෙරේ.

පහත YAML කේත ස්නිපටය නමින් නව පරීක්ෂණයක් විස්තර කරයි 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/.+$

අපි එය දෙස සමීපව බලමු:

  • successMessage - පරීක්ෂණය සාර්ථකව අවසන් වුවහොත් මෙම රේඛාව මුද්රණය කරනු ලැබේ;
  • failureMessage - අසාර්ථක වූ විට මෙම පණිවිඩය පෙන්වනු ලැබේ;
  • category - එක් කාණ්ඩයක් දක්වයි: Images, Health Checks, Security, Networking и Resources;
  • target--- කුමන වර්ගයේ වස්තුවක් තීරණය කරයි (spec) පරීක්ෂණය යොදනු ලැබේ. විය හැකි අගයන්: Container, Pod හෝ Controller;
  • පරීක්ෂණය වස්තුව තුළම නිශ්චිතව දක්වා ඇත schema JSON schema භාවිතා කරමින්. මෙම පරීක්ෂණයෙහි ප්රධාන වචනය වේ pattern රූප ප්‍රභවය අවශ්‍ය එකක් සමඟ සංසන්දනය කිරීමට භාවිතා කරයි.

ඉහත පරීක්ෂණය ක්‍රියාත්මක කිරීමට, ඔබ පහත Polaris වින්‍යාසය සෑදිය යුතුය:

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)

අපි ගොනුව විග්‍රහ කරමු:

  • ක්ෂේත්රයේ checks පරීක්ෂණ සහ ඒවායේ විවේචනාත්මක මට්ටම නියම කර ඇත. විශ්වාස නොකළ මූලාශ්‍රයකින් රූපයක් ගත් විට අනතුරු ඇඟවීමක් ලැබීම සුදුසු බැවින්, අපි මෙහි මට්ටම සකසමු danger.
  • පරීක්ෂණයම checkImageRepo පසුව වස්තුවේ ලියාපදිංචි විය customChecks.

ගොනුව ලෙස සුරකින්න custom_check.yaml. දැන් ඔබට ධාවනය කළ හැකිය polaris audit සත්‍යාපනය අවශ්‍ය YAML මැනිෆෙස්ටයක් සමඟ.

අපි අපේ ප්‍රතිපත්ති ප්‍රකාශය පරීක්ෂා කරමු base-valid.yaml:

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

කණ්ඩායම polaris audit ඉහත දක්වා ඇති පරිශීලක පරීක්ෂණය පමණක් ධාවනය කළ අතර එය අසාර්ථක විය.

ඔබ රූපය නිවැරදි කරන්නේ නම් my-company.com/http-echo:1.0, Polaris සාර්ථකව සම්පූර්ණ කරනු ඇත. වෙනස්කම් සහිත ප්‍රතිපත්ති ප්‍රකාශය දැනටමත් ඇත ගබඩාඑබැවින් ඔබට මැනිෆෙස්ටයේ පෙර විධානය පරීක්ෂා කළ හැකිය image-valid-mycompany.yaml.

දැන් ප්‍රශ්නය පැන නගී: අභිරුචි ඒවා සමඟ එක්ව සාදන ලද පරීක්ෂණ ක්‍රියාත්මක කරන්නේ කෙසේද? පහසුවෙන්! ඔබට අවශ්‍ය වන්නේ වින්‍යාස ගොනුවට ගොඩනඟන ලද පරීක්ෂණ හඳුනාගැනීම් එක් කිරීමයි. එහි ප්‍රතිඵලයක් වශයෙන්, එය පහත පෝරමය ගනු ඇත:

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)

සම්පූර්ණ වින්‍යාස ගොනුවක උදාහරණයක් තිබේ මෙහි.

මැනිෆෙස්ටය පරීක්ෂා කරන්න base-valid.yamlබිල්ට් සහ අභිරුචි පරීක්ෂණ භාවිතා කරමින්, ඔබට විධානය භාවිතා කළ හැකිය:

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

Polaris අභිරුචි ඒවා සමඟ ගොඩනඟන ලද පරීක්ෂණ සම්පූර්ණ කරයි, එමගින් ලෝක දෙකෙහිම හොඳම දේ ඒකාබද්ධ කරයි.

අනෙක් අතට, Rego හෝ JavaScript වැනි වඩා බලවත් භාෂා භාවිතා කිරීමට ඇති නොහැකියාව වඩාත් සංකීර්ණ පරීක්ෂණ නිර්මාණය කිරීම වළක්වන සීමාකාරී සාධකයක් විය හැකිය.

Polaris පිළිබඳ වැඩි විස්තර මෙහි ඇත ව්යාපෘති වෙබ් අඩවිය.

සාරාංශය

Kubernetes YAML ගොනු පරීක්ෂා කිරීමට සහ ඇගයීමට බොහෝ මෙවලම් පවතින අතර, පරීක්ෂණ සැලසුම් කර ක්‍රියාත්මක කරන්නේ කෙසේද යන්න පිළිබඳ පැහැදිලි අවබෝධයක් තිබීම වැදගත්ය.

උදාහරණයක් ලෙස, ඔබ නල මාර්ගයක් හරහා යන Kubernetes මැනිෆෙස්ටස් ගතහොත්, kubeval එවැනි නල මාර්ගයක පළමු පියවර විය හැකිය. වස්තු නිර්වචන Kubernetes API ක්‍රමයට අනුකූලද යන්න එය නිරීක්ෂණය කරයි.

එවැනි සමාලෝචනයක් අවසන් වූ පසු, කෙනෙකුට සම්මත හොඳම භාවිතයන් සහ නිශ්චිත ප්‍රතිපත්තිවලට අනුකූල වීම වැනි වඩාත් සංකීර්ණ පරීක්ෂණ වෙත යා හැකිය. kube-score සහ Polaris ප්‍රයෝජනවත් වන්නේ මෙහිදීය.

සංකීර්ණ අවශ්‍යතා ඇති සහ විස්තරාත්මකව පරීක්ෂණ අභිරුචිකරණය කිරීමට අවශ්‍ය අය සඳහා, තඹ, වින්‍යාස-ලින්ට් සහ කොන්ෆෙස්ට් සුදුසු වේ..

අභිරුචි පරීක්ෂණ නිර්වචනය කිරීමට Conftest සහ config-lint YAML භාවිතා කරයි, සහ තඹ ඔබට සම්පූර්ණ ක්‍රමලේඛන භාෂාවකට ප්‍රවේශය ලබා දෙයි, එය ඉතා ආකර්ශනීය තේරීමක් කරයි.

අනෙක් අතට, මෙම මෙවලම් වලින් එකක් භාවිතා කිරීම වටී ද, එබැවින්, සියලු පරීක්ෂණ අතින් නිර්මාණය කිරීම, හෝ Polaris කැමති සහ අවශ්ය දේ පමණක් එකතු කිරීම වටී ද? මෙම ප්රශ්නයට පැහැදිලි පිළිතුරක් නොමැත.

පහත වගුව එක් එක් මෙවලම පිළිබඳ කෙටි විස්තරයක් සපයයි:

මෙවලම
ගමනාන්තය
අඩුපාඩු
පරිශීලක පරීක්ෂණ

kubeval
API ක්‍රමලේඛයේ නිශ්චිත අනුවාදයකට එරෙහිව YAML ප්‍රකාශනය වලංගු කරයි
CRD සමඟ වැඩ කළ නොහැක
කිසිදු

kube-ලකුණු
හොඳම භාවිතයන්ට එරෙහිව YAML ප්‍රකාශනය විශ්ලේෂණය කරයි
සම්පත් පරීක්ෂා කිරීමට ඔබගේ Kubernetes API අනුවාදය තෝරාගත නොහැක
කිසිදු

තඹ
YAML මැනිෆෙස්ට් සඳහා අභිරුචි ජාවාස්ක්‍රිප්ට් පරීක්ෂණ නිර්මාණය කිරීම සඳහා සාමාන්‍ය රාමුවක්
සවි කළ පරීක්ෂණ නොමැත. දුර්වල ලියකියවිලි
බව

config-lint
YAML හි කාවැදී ඇති වසම-විශේෂිත භාෂාවකින් පරීක්ෂණ නිර්මාණය කිරීම සඳහා පොදු රාමුවක්. විවිධ වින්‍යාස ආකෘති සඳහා සහය දක්වයි (උදා: Terraform)
සූදානම් කළ පරීක්ෂණ නොමැත. ගොඩනඟන ලද ප්‍රකාශයන් සහ කාර්යයන් ප්‍රමාණවත් නොවිය හැක
බව

ගැටුම
Rego (විශේෂිත විමසුම් භාෂාවක්) භාවිතයෙන් ඔබේම පරීක්ෂණ නිර්මාණය කිරීම සඳහා රාමුවක්. OCI මිටි හරහා ප්‍රතිපත්ති බෙදා ගැනීමට ඉඩ දෙයි
සවි කළ පරීක්ෂණ නොමැත. මට Rego ඉගෙන ගන්න වෙනවා. ප්‍රතිපත්ති ප්‍රකාශනය කිරීමේදී Docker Hub සහාය නොදක්වයි
බව

පොලාරිස්
සමාලෝචන YAML සම්මත හොඳම භාවිතයන්ට එරෙහිව ප්‍රකාශ කරයි. JSON Schema භාවිතයෙන් ඔබේම පරීක්ෂණ නිර්මාණය කිරීමට ඔබට ඉඩ සලසයි
JSON Schema මත පදනම් වූ පරීක්ෂණ හැකියාවන් ප්‍රමාණවත් නොවිය හැක
බව

මෙම මෙවලම් Kubernetes පොකුරට ප්රවේශය මත රඳා නොපවතින බැවින්, ඒවා ස්ථාපනය කිරීම පහසුය. ඔවුන් ඔබට මූලාශ්‍ර ගොනු පෙරීමට සහ ව්‍යාපෘතිවල ඇදීමේ ඉල්ලීම් කතුවරුන්ට ඉක්මන් ප්‍රතිපෝෂණ ලබා දීමට ඉඩ සලසයි.

පරිවර්තකගෙන් PS

අපගේ බ්ලොග් අඩවියේ ද කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න