اعمال پالیسی روی کوبرنتیز با کیورنو – kyverno

Policy Management در کوبرنتیزه دقیقا چیه ؟
مدیریت policy در Kubernetes به معنای تنظیم قوانینی برای کنترل نحوه استفاده از منابع، سطح دسترسی کاربران و رفتار ورکلودها است. این کار باعث افزایش امنیت، انطباق با قوانین و پایداری کلاستر میشود.
چرا مدیریت Policy مهم است؟
- امنیت: جلوگیری از دسترسی غیرمجاز و اجرای بهترین روشها.
- انطباق: اطمینان از رعایت قوانین شرکتی و مقررات قانونی.
- پایداری: جلوگیری از سوءاستفاده از منابع و حفظ سلامت کلاستر.
ابزارهایی مانند Kyverno و OPA Gatekeeper به صورت خودکار این سیاستها را اجرا میکنند.
بریم سراغ اجرا یک سناریو جذاب
سناریو چیست؟
میخواهیم اطمینان حاصل کنیم که هر Pod دارای label app باشد. اگر این برچسب وجود نداشته باشد، Kyverno باید آن را مسدود کند.
۱- نصب Kyverno
نصب از طریق helm
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
helm install kyverno kyverno/kyverno -n kyverno --create-namespace
نصب از طریق Manifest:
kubectl create -f https://github.com/kyverno/kyverno/releases/download/v1.11.1/install.yaml
۱-۱ نصب CLI مربوط به Kyverno
برای سیستم عامل لینوکس
curl -LO https://github.com/kyverno/kyverno/releases/download/v1.12.0/kyverno-cli_v1.12.0_linux_x86_64.tar.gz
tar -xvf kyverno-cli_v1.12.0_linux_x86_64.tar.gz
sudo cp kyverno /usr/local/bin/
برای سیستم عامل مک
brew install kyverno
برای سیستم عامل archlinux
yay -S kyverno-git
2- تعریف یک سیاست (Policy)
پالیسی که مد نظر ما هست اینه که هیچ دیپلویمنی روی کوبرنتیز بدون داشتن لیبل app (هر مقداری میتونه داشته باشه ) دیپلوی نشه
#policy.yml
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-app-label
spec:
validationFailureAction: Enforce
rules:
- name: check-for-app-label
match:
resources:
kinds:
- Pod
validate:
message: "تمام پادها باید برچسب 'app' داشته باشند."
pattern:
metadata:
labels:
app: "?*"
فیلد validationFailureAction در Kyverno مشخص میکند که در صورت نقض قوانین، چه رفتاری اتخاذ شود. دو حالت اصلی دارد:
- Audit (پیشفرض): برای تست سیاستها و نظارت بر تخلفات.
- Enforce: برای اجرای قوانین سختگیرانه امنیتی و انطباق.
پالیسی رو بسازید
kubectl apply -f policy.yml
۳- ایجاد یک پاد بدون برچسب app و تست پالیسی
#pod.yml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: nginx
image: nginx
پاد رو بسازید
kubectl apply -f pod.yml
این پاد باید توسط Kyverno اجازه دیپلوی شدن نداشته باشه و رد بشه
۴- تست پالیسی
برای تست صحت اجرای سیاست میتوانیم دستور زیر را اجرا کنیم:
kyverno apply policy.yml --resource pod.yml

- policy.yml → سیاست Kyverno (مثلاً الزام وجود برچسب).
- pod.yml → منبع Kubernetes که میخواهیم تست کنیم.
سایر ابزارهای مدیریت Policy در کوبرنتیز
علاوه بر Kyverno، ابزار OPA Gatekeeper نیز برای مدیریت پالیسی در Kubernetes استفاده میشود. من قبلاً مقالهای در این زمینه نوشتم که میتوانید از لینک زیر مطالعه کنید:
اجرای سیاستهای Kubernetes با Gatekeeper
درباره نویسنده
سلام 👋، من فرشاد نیکفطرت، مدرس و مشاور Devops هستم.
- 📝 بهطور منظم مقالاتی در packops.dev و packops.ir منتشر میکنم.
- 💬 از من درباره DevOps، Cloud، Kubernetes، Linux بپرسید.
- 📫 میتوانید از طریق لینکدین با من در ارتباط باشید.
دیدگاهتان را بنویسید