لو لسه بتعمل kubectl create secret يدويًا في كل namespace، وبتنسخ نفس DATABASE_URL في 3 ملفات YAML للـ dev والـ staging والـ prod، أنت بتشتغل ساعة في الأسبوع شغل ما يستاهلش، ومعرّض الـ cluster لتسرّب أول ما مطور جديد يطلع من الفريق.
External Secrets Operator: نهاية مرحلة "kubectl create secret يدويًا"
المشكلة باختصار
أي cluster بيوصل لـ 50 deployment فيما فوق، الـ secrets فيه بتعمل 3 مشاكل ثابتة لازم تتحل:
- نسخ يدوي بين namespaces: كل تغيير في password بيحتاج 3 commits وplaybook كامل.
- مفيش rotation تلقائي: الـ DB password بيقعد 9 شهور بدون تحديث لأن الـ rotation شغل يدوي مش بيعمله حد.
- صعوبة الـ audit: مش عارف مين قرى الـ secret، ولا متى، ولا من فين.
الـ Sealed Secrets بتحل النقطة الأولى جزئيًا (تشفير في Git)، لكن الـ rotation فيها يدوي والـ audit ضعيف. الـ External Secrets Operator (ESO) بيشتغل بالعكس: مصدر الحقيقة بيبقى خارج الـ cluster — في AWS Secrets Manager أو HashiCorp Vault أو Azure Key Vault — والـ ESO بيـ pull القيمة بشكل دوري ويصنع Secret فعلي داخل Kubernetes.
إزاي ESO بيشتغل فعليًا — مثال المكتبة
تخيل عندك مكتبة في الحي. الكتب الأصلية محفوظة في مخزن مركزي بكود تشفير ومسؤول واحد فقط بيعرف الكود (= AWS Secrets Manager). كل ما زائر يطلب كتاب، أمين المكتبة بيروح للمخزن، يسجّل اسم الزائر في كشف الزيارة، ويسلّمه نسخة مؤقتة للقراءة في الرف. لو الكتاب اتعدل في المخزن، أمين المكتبة بيلاحظ التغيير وبيستبدل النسخة الموجودة في الرف بدون ما الزائر يدري.
ESO هو "أمين المكتبة" ده بالظبط. بيقعد في الـ cluster، بيراقب CRD اسمه ExternalSecret، وكل refreshInterval (افتراضيًا ساعة) بيـ pull القيمة من المصدر الخارجي. لو القيمة اتغيرت، بيحدّث الـ Secret في etcd. الـ Pod بيقرأ من نفس Secret عادي ومش بيلاحظ إن في حد بيعمله sync من ورا الستار.
التعريف العلمي الدقيق: ESO هو Kubernetes Operator (custom controller مكتوب بـ Go) بيُحدّث Kubernetes Secret resources اعتمادًا على ExternalSecret manifests، عبر provider plugins تدعم AWS, Azure Key Vault, GCP Secret Manager, HashiCorp Vault, 1Password, Akeyless، وأكثر من 20 provider تاني.
إعداد عملي بـ AWS Secrets Manager — 4 خطوات
الافتراض هنا إن الـ cluster بتاعك EKS بـ IRSA مفعّل، والـ secrets الجديدة هتترفع على نفس الـ AWS account. لو شغّال على GKE أو AKS، الخطوات تقريبًا نفسها مع تغيير الـ provider plugin.