اعمال پالیسی روی کوبرنتیز با کیورنو – 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 بپرسید.
  • 📫 می‌توانید از طریق لینکدین با من در ارتباط باشید.