لو عندك cluster Kubernetes فيه أكثر من 5 مطورين وبتحاول تمنعهم من عمل deploy لـ images بـ tag latest أو containers شغّالة بصلاحيات root، Kyverno بيحلّ ده بـ YAML policy صغير بدون ما تفتح كتاب Rego. هتخرج من المقال ده وعندك 3 سياسات شغّالة في production، وفهم واضح للفرق بينه وبين OPA Gatekeeper.
Kyverno: بوّاب Kubernetes اللي بيفهم YAML
المشكلة باختصار
في أي cluster فيه أكتر من 5 مهندسين، السياسات الأمنية بتتهرّى بسرعة. واحد بيعمل deploy لـ image بـ tag latest، التاني بينسى يحدد resources.limits، التالت بيشغّل container بـ privileged: true. بعد شهرين، production فيه 50+ violation، وفريق الـ SRE بقى بيراجع كل Pull Request يدويًا.
الحل الشائع هو OPA Gatekeeper، لكنه بيكتب السياسات بلغة Rego. Rego قوية لكن منحنى تعلّمها حاد، والفريق بياخد 2–3 أسابيع قبل ما يكتب policy production-ready. Kyverno بيكسر الحلقة دي: السياسات YAML زي باقي Kubernetes manifests.
مثال من الحياة قبل ما نشرح علميًا
تخيّل عندك عمارة سكنية فيها 80 شقة. كل ساكن جديد بيجيب مفاتيحه الخاصة ويعمل نسخ وبيوزّع بدون ما يقول للـ admin. بعد شهور، يوم ما يحصل سرقة، محدش عارف مين دخل إمتى. الحل: تحطّ بوّاب عند الباب الرئيسي. البواب بيتأكد من كل حد داخل إنه ساكن فعلًا، وعنده ID، وإنه مش شايل حاجة ممنوعة.
Kyverno هو البوّاب ده في الـ cluster. قبل ما يدخل أي resource لـ etcd، Kubernetes بيوقّفه عند Kyverno. Kyverno بيفحصه مقابل السياسات المكتوبة، ولو في مشكلة بيرفض الطلب ويرجّع للمطور رسالة واضحة.
علميًا: Kyverno هو Admission Controller بيتسجّل كـ ValidatingWebhookConfiguration وMutatingWebhookConfiguration في Kubernetes API server. أي request من نوع CREATE أو UPDATE أو DELETE بيمر عليه قبل ما يتخزّن. السياسات بتتكتب كـ Custom Resources (CRs)، يعني جزء طبيعي من أي GitOps pipeline.
Kyverno vs OPA Gatekeeper — الفرق الجوهري
الاتنين Admission Controllers، لكن اختيار واحد على التاني بيعتمد على حاجتين:
- Kyverno: السياسة YAML. أي مهندس يعرف Kubernetes بيكتب policy في 10 دقائق.
- OPA Gatekeeper: السياسة Rego. قوية في الـ aggregation والـ logic المعقد، لكن منحنى تعلم حاد.
الـ trade-off واضح: Kyverno بيكسب على البساطة وسرعة الإنتاجية، OPA بيكسب على التعبيرية في السياسات المعقدة اللي محتاجة تقارن بين أكتر من resource. لو 90% من سياساتك "ارفض كذا" أو "اطلب كذا"، Kyverno كفاية. لو محتاج تحسب مثلًا "إجمالي Pods في namespace + عدد PVCs مفتوحة < حد معين"، روح على OPA.
تثبيت Kyverno في 3 أوامر
الافتراض: عندك Kubernetes 1.26+ و kubectl مربوط بالـ cluster.