نوټ. ژباړه: د K8s چاپیریالونو لپاره د YAML تشکیلاتو ډیریدونکي شمیر سره ، د دوی اتوماتیک تایید ته اړتیا ورځ تر بلې بیړنۍ کیږي. د دې بیاکتنې لیکوال نه یوازې د دې کار لپاره موجوده حلونه غوره کړي، بلکې د استخدام د مثال په توګه کارول کیږي ترڅو وګوري چې دوی څنګه کار کوي. دا د هغو کسانو لپاره چې د دې موضوع سره علاقه لري خورا معلوماتي ثابت شو.
د تمديد؛ DR: دا مقاله د غوره کړنو او اړتیاو په وړاندې د Kubernetes YAML فایلونو اعتبار او ارزولو لپاره شپږ جامد وسیلې پرتله کوي.
د Kubernetes کاري بارونه عموما د YAML اسنادو په بڼه تعریف شوي. د YAML سره یو له ستونزو څخه د څرګند فایلونو ترمینځ د خنډونو یا اړیکو مشخص کولو ستونزه ده.
څه که موږ اړتیا ولرو ډاډ ترلاسه کړو چې ټول عکسونه کلستر ته ځای په ځای شوي د باوري راجستر څخه راځي؟
زه څنګه کولی شم د هغه ځای پرځای کولو مخه ونیسم چې د پوډ ډیسپشن بودیجه نلري کلسټر ته لیږل کیږي؟
د جامد ازموینې ادغام تاسو ته اجازه درکوي چې د پراختیا په مرحله کې غلطۍ او د پالیسۍ سرغړونې وپیژني. دا تضمین زیاتوي چې د سرچینو تعریفونه سم او خوندي دي، او دا ډیر احتمال رامینځته کوي چې د تولید کاري بار به غوره عملونه تعقیب کړي.
د Kubernetes جامد YAML فایل تفتیش اکوسیستم په لاندې کټګوریو ویشل کیدی شي:
- د API تصدیق کونکي. په دې کټګورۍ کې وسایل د YAML منشور د Kubernetes API سرور اړتیاو په مقابل کې ګوري.
- چمتو ټیسټران. د دې کټګورۍ وسیلې د امنیت لپاره چمتو شوي ازموینې سره راځي ، د غوره عملونو اطاعت او داسې نور.
- دودیز تاییدونکي. د دې کټګورۍ استازي تاسو ته اجازه درکوي په مختلفو ژبو کې دودیز ازموینې رامینځته کړئ، د بیلګې په توګه، ریګو او جاوا سکرپٹ.
پدې مقاله کې به موږ شپږ مختلف وسایل تشریح او پرتله کړو:
- کوبیوال;
- کیوب سکور
- config-lint;
- مسو
- مقابله
- پولاریس.
ښه، راځئ چې پیل وکړو!
د ګمارنې چک کول
مخکې له دې چې موږ د وسیلو پرتله کول پیل کړو، راځئ چې یو څه شالید جوړ کړو چې د دوی ازموینه وکړي.
لاندې منشور یو شمیر غلطۍ او د غوره عملونو نه اطاعت لري: تاسو څومره یې موندلی شئ؟
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 پورټ ته د "هیلو ورلډ" پیغام سره ځواب ورکول دي. دا د لاندې کمانډ سره ځای په ځای کیدی شي:
kubectl apply -f hello-world.yaml
او همداسې - کار چیک کړئ:
kubectl port-forward svc/http-echo 8080:5678
اوس لاړ شه
1. کوبیوال
د
د اصلي مقالې لیکلو په وخت کې، نسخه 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)
که بریالی وي، کوبیوال به د وتلو کوډ 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
، باید یو انتخاب کونکی پکې شامل وي چې د پوډ لیبل سره سمون ولري. په پورتني منشور کې انتخاب کونکی شامل نه دی، نو کوبیوال یوه تېروتنه راپور کړې او د صفر غیر کوډ سره وتلی.
زه حیران یم چې زه به څه وکړم 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
)
د کوبیوال په څیر د وسیلو ګټه دا ده چې د دې په څیر غلطۍ د ګمارنې دورې په پیل کې نیول کیدی شي.
سربیره پردې، دا چکونه کلستر ته لاسرسۍ ته اړتیا نلري؛ دوی کولی شي آفلاین ترسره شي.
په ډیفالټ کې، کوبیوال د وروستي Kubernetes API سکیما په وړاندې سرچینې چک کوي. په هرصورت، په ډیری قضیو کې تاسو اړتیا لرئ چې د یو ځانګړي کبرنیټ خوشې کولو په وړاندې وګورئ. دا د بیرغ په کارولو سره ترسره کیدی شي --kubernetes-version
:
$ kubeval --kubernetes-version 1.16.1 base-valid.yaml
مهرباني وکړئ په یاد ولرئ چې نسخه باید په بڼه کې مشخص شي Major.Minor.Patch
.
د هغو نسخو لیست لپاره چې تصدیق یې ملاتړ کیږي، مهرباني وکړئ مراجعه وکړئ --schema-location
.
د انفرادي YAML فایلونو سربیره ، کوبیوال کولی شي د لارښودونو او stdin سره هم کار وکړي.
سربیره پردې ، کوبیوال په اسانۍ سره د CI پایپ لاین کې مدغم کیږي. هغه څوک چې غواړي کلستر ته د منشورونو لیږلو دمخه ازموینې پرمخ بوځي خوښ به شي چې پوه شي چې کوبیوال د دریو محصول فارمیټونو ملاتړ کوي:
- ساده متن
- JSON;
- د هر څه پروتوکول (TAP) ازموینه وکړئ.
او هر یو فارمیټ د مطلوب ډول پایلو لنډیز رامینځته کولو لپاره د محصول نور تحلیل لپاره کارول کیدی شي.
د کوبیوال یو نیمګړتیا دا ده چې دا اوس مهال نشي کولی د ګمرکي سرچینو تعریفونو (CRDs) سره موافقت وګوري. په هرصورت، دا ممکنه ده چې کوبیوال تنظیم کړئ
کوبیوال د سرچینو چک کولو او ارزولو لپاره یوه غوره وسیله ده؛ په هرصورت، دا باید ټینګار وشي چې د ازموینې پاس کول تضمین نه کوي چې سرچینې د غوره کړنو سره سمون لري.
د مثال په توګه، د ټګ کارول latest
په کانټینر کې غوره عملونه نه تعقیبوي. په هرصورت، کوبیوال دا یوه تېروتنه نه ګڼي او راپور نه ورکوي. دا دی، د داسې YAML تایید به پرته له خبرتیا بشپړ شي.
مګر څه که تاسو غواړئ د YAML ارزونه وکړئ او د ټګ په څیر سرغړونې وپیژنئ latest
؟ زه څنګه د غوره عملونو پروړاندې د YAML فایل چیک کړم؟
2. کیوب سکور
- د کانټینر چلول د ریښی په توګه نه.
- د پوډ روغتیایی معایناتو شتون.
- د سرچینو لپاره غوښتنې او محدودیتونه تنظیم کول.
د ازموینې د پایلو پراساس، درې پایلې ورکول کیږي: OK, خبرتیا и انتقادي.
تاسو کولی شئ د کیوب سکور آنلاین هڅه وکړئ یا په محلي توګه یې نصب کړئ.
د اصلي مقالې لیکلو په وخت کې، د کیوب سکور وروستۍ نسخه 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 د کوبیوال ازموینې پاس کوي، پداسې حال کې چې د کیوب سکور لاندې نیمګړتیاو ته اشاره کوي:
- د چمتووالي چکونه ترتیب شوي ندي.
- د CPU سرچینو او حافظې لپاره هیڅ غوښتنې یا محدودیتونه شتون نلري.
- د پوډ اختلال بودیجه نه ده مشخصه شوې.
- د جلا کولو قواعد شتون نلري (د تړاو ضد) د شتون اعظمي کولو لپاره.
- کانټینر د ریښی په توګه پرمخ ځي.
دا ټول د نیمګړتیاوو په اړه باوري ټکي دي چې باید په نښه شي ترڅو ګمارل ډیر اغیزمن او د باور وړ وي.
ټیم 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
د کوبیوال په څیر، کیوب سکور د غیر صفر وتلو کوډ بیرته راګرځوي کله چې یوه ازموینه وي چې ناکامه وي انتقادي. تاسو کولی شئ د ورته پروسس کولو لپاره هم فعال کړئ خبرتیا.
سربیره پردې ، دا ممکنه ده چې د مختلف API نسخو سره موافقت لپاره سرچینې چیک کړئ (لکه څنګه چې کوبیوال کې). په هرصورت، دا معلومات پخپله د کیوب سکور کې هارډ کوډ شوي دي: تاسو نشئ کولی د Kubernetes بله نسخه غوره کړئ. دا محدودیت یوه لویه ستونزه کیدی شي که تاسو غواړئ خپل کلستر لوړ کړئ یا که تاسو د K8s مختلف نسخو سره ډیری کلسترونه لرئ.
هغه یاداښت کړه
لا دمخه یوه مسله شتون لري د دې فرصت د درک کولو لپاره د وړاندیز سره.
د کیوب سکور په اړه نور معلومات په کې موندل کیدی شي
د کیوب سکور ازموینې د غوره تمرینونو پلي کولو لپاره عالي وسیله ده ، مګر که تاسو اړتیا لرئ په ازموینه کې بدلونونه رامینځته کړئ یا خپل قواعد اضافه کړئ؟ افسوس، دا نشي ترسره کیدی.
د کیوب سکور د توزیع وړ ندی: تاسو نشئ کولی پدې کې پالیسۍ اضافه کړئ یا یې تنظیم کړئ.
که تاسو د شرکت پالیسیو سره موافقت تصدیق کولو لپاره دودیز ازموینې لیکلو ته اړتیا لرئ، تاسو کولی شئ د لاندې څلورو وسیلو څخه یو وکاروئ: config-lint، copper، confest، یا polaris.
3.Config-lint
Config-lint د YAML، JSON، Terraform، CSV ترتیب کولو فایلونو او Kubernetes manifests اعتبار کولو لپاره یوه وسیله ده.
تاسو کولی شئ دا په کارولو سره نصب کړئ
د اصلي مقالې لیکلو په وخت کې اوسنۍ خپرونه 1.5.0 ده.
Config-lint د Kubernetes manifests د اعتبار لپاره جوړ شوي ازموینې نلري.
د هر ډول ازموینې ترسره کولو لپاره، تاسو اړتیا لرئ چې مناسب قواعد جوړ کړئ. دوی د 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
- امکان لری ناکامي, خبرتیا и NON_COMPLIANT;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. مسو
په هرصورت، دا د وروستي څخه توپیر لري چې دا د ازموینې تشریح کولو لپاره YAML نه کاروي. ازموینې په جاواسکریپټ کې لیکل کیدی شي. کاپر د څو بنسټیزو وسایلو سره یو کتابتون چمتو کوي، کوم چې تاسو سره د Kubernetes شیانو په اړه معلومات لوستلو او د غلطیو راپور ورکولو کې مرسته کوي.
د مسو د نصبولو مرحلې په کې موندل کیدی شي
2.0.1 د اصلي مقالې لیکلو په وخت کې د دې افادیت وروستۍ خپرونه ده.
د config-lint په څیر، کاپر جوړ شوي ازموینې نلري. راځئ چې یو یې ولیکو. اجازه راکړئ چې وګورو چې ګمارنې د کانټینر عکسونه په ځانګړي ډول د باوري زیرمو څخه کاروي لکه 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
دا روښانه ده چې د مسو په مرسته تاسو کولی شئ ډیرې پیچلې ازموینې ترسره کړئ - د بیلګې په توګه، په انګریس کې د ډومین نومونو چک کول یا په امتیازي حالت کې روان پوډونه رد کول.
مسو مختلف افادیت لري چې په دې کې جوړ شوي دي:
DockerImage
ټاکل شوې ان پټ فایل لولي او د لاندې ځانګړتیاو سره یو اعتراض رامینځته کوي:name
- د انځور نوم،tag
- د انځور نښه،registry
- د انځور ثبت،registry_url
- پروتوکول (https://
) او د انځور ثبت،fqin
- د انځور بشپړ ځای.
- دنده
findByName
د ورکړل شوي ډول لخوا د سرچینې موندلو کې مرسته کوي (kind
) او نوم (name
) د ننوت فایل څخه. - دنده
findByLabels
د یو ځانګړي ډول لخوا د سرچینې موندلو کې مرسته کوي (kind
) او لیبلونه (labels
).
تاسو کولی شئ د خدماتو ټول موجود فعالیتونه وګورئ
د ډیفالټ په واسطه دا ټول ان پټ YAML فایل په متغیر کې بار کوي $$
او دا د سکریپټینګ لپاره چمتو کوي (د هغو کسانو لپاره چې د jQuery تجربه لري یو پیژندل شوی تخنیک).
د کاپر اصلي ګټه څرګنده ده: تاسو اړتیا نلرئ په ځانګړې ژبه کې مهارت ولرئ او تاسو کولی شئ د جاوا سکریپټ مختلف خصوصیات وکاروئ ترڅو خپل ازموینې رامینځته کړئ ، لکه د سټرینګ انټرپولیشن ، افعال او نور.
دا هم باید په یاد ولرئ چې د کاپر اوسنی نسخه د جاواسکریپټ انجن ES5 نسخه سره کار کوي، نه ES6.
تفصیلات په کې شتون لري
په هرصورت، که تاسو واقعیا جاوا سکریپټ نه خوښوئ او هغه ژبه غوره کړئ چې په ځانګړي ډول د پوښتنو رامینځته کولو او د پالیسیو تشریح کولو لپاره ډیزاین شوې وي ، تاسو باید د سیالۍ ته پاملرنه وکړئ.
5. Conftest
Confest د ترتیب کولو ډاټا ازموینې لپاره یو چوکاټ دی. د Kubernetes manifests ازموینې / تصدیق کولو لپاره هم مناسب. ازموینې د یوې ځانګړې پوښتنې ژبې په کارولو سره تشریح شوي
تاسو کولی شئ د کنفټیسټ په کارولو سره نصب کړئ
د اصلي مقالې لیکلو په وخت کې، وروستۍ نسخه موجوده وه 0.18.2.
د config-lint او مسو په څیر، Confest پرته له کوم جوړ شوي ازموینې راځي. راځئ چې دا هڅه وکړو او خپله پالیسي ولیکئ. لکه څنګه چې په تیرو مثالونو کې، موږ به وګورو چې آیا د کانټینر انځورونه د باوري سرچینې څخه اخیستل شوي دي.
یو لارښود جوړ کړئ 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
ازموینه د وړاندوینې وړ ناکامه شوه ځکه چې عکسونه د باوري سرچینې څخه راغلي.
په ریګو فایل کې موږ بلاک تعریف کوو deny
. د دې حقیقت سرغړونه ګڼل کیږي. که بلاکونه deny
څو، مقابله دوی په خپلواکه توګه د یو بل څخه چک کوي، او د هر بلاک حقیقت د سرغړونې په توګه چلند کیږي.
د ډیفالټ محصول سربیره ، کنفټسټ د JSON ، TAP او میز ب formatه ملاتړ کوي - یو خورا ګټور خصوصیت که تاسو اړتیا لرئ راپورونه په موجوده CI پایپ لاین کې ځای په ځای کړئ. تاسو کولی شئ د بیرغ په کارولو سره مطلوب شکل تنظیم کړئ --output
.
د دې لپاره چې د پالیسیو ډیبګ کول اسانه کړي، کنفټیسټ بیرغ لري --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 لا تر اوسه ملاتړ شوی نه دی. نو خپل ځان بختور وګڼئ که تاسو کاروئ
د هنري بڼه بڼه ورته ده
تاسو کولی شئ د پالیسۍ شریکولو او د سیالۍ نورو ځانګړتیاو په اړه نور معلومات په کې زده کړئ
6. پولاریس
وروستی وسیله چې په دې مقاله کې به بحث وشي
پولاریس په کلستر کې نصب کیدی شي یا د کمانډ لاین حالت کې کارول کیدی شي. لکه څنګه چې تاسو اټکل کړی وي، دا تاسو ته اجازه درکوي په ثابت ډول د کبرنیټس څرګندونه تحلیل کړئ.
کله چې د کمانډ لاین حالت کې روان وي ، جوړ شوي ازموینې شتون لري چې ساحې پوښي لکه امنیت او غوره تمرینونه (د کیوب سکور ته ورته). برسېره پردې، تاسو کولی شئ خپل ازموینې جوړې کړئ (لکه څنګه چې په config-lint، copper او confest کې).
په بل عبارت، پولاریس د وسیلو د دواړو کټګوریو ګټې سره یوځای کوي: د جوړ شوي او دودیز ازموینې سره.
د کمانډ لاین حالت کې پولاریس نصبولو لپاره ، وکاروئ
د اصلي مقالې لیکلو په وخت کې، نسخه 1.0.3 شتون لري.
یوځل چې نصب بشپړ شي تاسو کولی شئ په منشور کې پولاریس چل کړئ 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": [
/* длинный список */
]
}
بشپړ محصول شتون لري
د کیوب سکور په څیر، پولاریس په هغو سیمو کې مسلې پیژني چیرې چې منشور غوره عملونه نه پوره کوي:
- د پوډرو لپاره هیڅ روغتیایی معاینه شتون نلري.
- د کانټینر عکسونو لپاره ټاګونه ندي مشخص شوي.
- کانټینر د ریښی په توګه پرمخ ځي.
- د حافظې او CPU لپاره غوښتنې او حدود ندي مشخص شوي.
هره ازموینه، د هغې د پایلو پورې اړه لري، د انتقاد درجه ټاکل شوې ده: خبرداری او یا خطر. د شته جوړ شوي ازموینو په اړه د نورو معلوماتو لپاره، مهرباني وکړئ مراجعه وکړئ
که توضیحاتو ته اړتیا نه وي، تاسو کولی شئ بیرغ مشخص کړئ --format score
. په دې حالت کې، پولاریس به د 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 ب formatه کې مشخص شوي ، او ازموینه پخپله د JSON سکیما په کارولو سره تشریح شوې.
لاندې د YAML کوډ snippet یوه نوې ازموینه تشریح کوي چې نومیږي 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 سکیما کارول. په دې ازموینه کې کلیدي کلمه دهpattern
د اړتیا وړ سره د عکس سرچینې پرتله کولو لپاره کارول کیږي.
د پورته ازموینې پرمخ وړلو لپاره، تاسو اړتیا لرئ چې لاندې پولاریس ترتیب جوړ کړئ:
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
، پولاریس به په بریالیتوب سره بشپړ شي. د بدلونونو سره منشور لا دمخه شتون لري 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 پاڼې اړوند نور معلومات په فسبوک کې اوګورئ
لنډیز
پداسې حال کې چې د Kubernetes YAML فایلونو معاینه او ارزولو لپاره ډیری وسیلې شتون لري، دا مهمه ده چې روښانه پوهه ولرئ چې ازموینې به څنګه ډیزاین او اجرا شي.
د مثال په توګه، که تاسو د نل لیکې له لارې د کبرنیټس څرګندونه واخلئ ، کوبیوال ممکن په ورته پایپ لاین کې لومړی ګام وي. دا به څارنه وکړي چې آیا د اعتراض تعریفونه د Kubernetes API سکیما سره سمون لري.
یوځل چې دا ډول بیاکتنه بشپړه شي، یو څوک کولی شي ډیرو پیچلو ازموینو ته لاړ شي، لکه د معیاري غوره کړنو او ځانګړو پالیسیو اطاعت. دا هغه ځای دی چې کیوب سکور او پولاریس به په لاس کې راشي.
د هغو کسانو لپاره چې پیچلې اړتیاوې لري او په تفصیل سره ازموینې تنظیم کولو ته اړتیا لري، مسو، کنفف لینټ او کنفیسټ به مناسب وي.
Confest او config-lint د دودیز ازموینې تعریف کولو لپاره YAML کاروي، او مسو تاسو ته د بشپړ پروګرام کولو ژبې ته لاسرسی درکوي، دا یو ښکلی په زړه پورې انتخاب جوړوي.
له بلې خوا ، ایا دا د دې وسیلو څخه د کارولو ارزښت لري او له همدې امله ، په لاسي ډول ټولې ازموینې رامینځته کړئ ، یا پولاریس ته ترجیح ورکړئ او یوازې هغه څه اضافه کړئ چې ورته اړتیا وي؟ د دې پوښتنې لپاره روښانه ځواب نشته.
لاندې جدول د هرې وسیلې لنډ تفصیل وړاندې کوي:
اوزار
موخه
نيمګړتياوې
د کارونکي ازموینې
کوبیوال
د API سکیما د ځانګړي نسخې پروړاندې YAML څرګندونه تاییدوي
د CRD سره کار نشي کولی
نه
کیوب سکور
د YAML تحلیل د غوره عملونو پروړاندې څرګندیږي
د سرچینو چک کولو لپاره ستاسو د Kubernetes API نسخه نشي غوره کولی
نه
مسو
د YAML منشور لپاره د دودیز جاواسکریپټ ازموینې رامینځته کولو لپاره عمومي چوکاټ
هیڅ جوړ شوي ازموینې ندي. ضعیف اسناد
چې
config-lint
په YAML کې ځای پرځای شوي په ډومین ځانګړي ژبه کې د ازموینو رامینځته کولو لپاره عمومي چوکاټ. د مختلف ترتیب فارمیټونو ملاتړ کوي (د مثال په توګه Terraform)
هیڅ چمتو شوي ازموینې شتون نلري. جوړ شوي ادعاګانې او دندې ممکن کافي نه وي
چې
سیالۍ
د ریګو په کارولو سره ستاسو د خپلو ازموینو رامینځته کولو لپاره چوکاټ (د ځانګړې پوښتنې ژبه). د OCI بنډلونو له لارې د پالیسیو شریکولو ته اجازه ورکوي
هیڅ جوړ شوي ازموینې ندي. زه باید ریګو زده کړم. د ډاکر هب ملاتړ نه کیږي کله چې پالیسۍ خپروي
چې
پولاریان
د YAML بیاکتنې د معیاري غوره کړنو پروړاندې څرګندیږي. تاسو ته اجازه درکوي د JSON سکیما په کارولو سره خپل ازموینې رامینځته کړئ
د JSON سکیما پراساس د ازموینې وړتیا ممکن کافي نه وي
چې
ځکه چې دا وسیلې د Kubernetes کلستر ته په لاسرسي تکیه نه کوي، د دوی نصب کول اسانه دي. دوی تاسو ته اجازه درکوي د سرچینې فایلونه فلټر کړئ او په پروژو کې د پلټ غوښتنو لیکوالانو ته ګړندي فیډبیک چمتو کړئ.
PS د ژباړونکي څخه
زموږ په بلاګ کې هم ولولئ:
- «
پولاریس د Kubernetes کلسترونو سالم ساتلو لپاره معرفي شو » - «
ویم د کوبرنیټس لپاره د YAML ملاتړ سره » - «
د ګوګل په وینا د کانټینرونو کارولو لپاره 7 غوره تمرینونه ".
سرچینه: www.habr.com