ConfigMap، أو بتشيّفر ملفات .env على Git، في 3 أوامر تقدر تخلّي Kubernetes يسحب الأسرار مباشرة من AWS Secrets Manager أو HashiCorp Vault — ويعمل rotation مركزي من غير ما حد يلمس الكلاستر.
External Secrets Operator: الطريقة الصناعية لإدارة أسرار Kubernetes
المشكلة باختصار
Kubernetes Secrets بتتخزّن في etcd بصيغة base64. وbase64 مش تشفير — هو encoding عادي أي حد بيفكّه في ثانية. النتيجة: معظم الفرق بتعمل workaround يدوي — git-crypt، SOPS، sealed-secrets، أو الأسوأ، صور Docker فيها مفاتيح hardcoded.
اللي بيحصل فعلاً: rotation ليّ db password بيبقى عملية مدّتها 15–20 دقيقة عبر 12 environment، وفيها دايمًا إنسان بينسى namespace. الحل الصناعي اسمه External Secrets Operator (ESO) — مشروع CNCF Sandbox بيحوّل الـ Kubernetes Secret من حاجة يدوية لـ resource يتسحب من provider خارجي تلقائيًا.
إزاي ESO بيشتغل (مثال المستشفى قبل الكلام التقني)
تخيّل مستشفى كبيرة فيها خزنة مركزية (AWS Secrets Manager) فيها كل الأدوية الحساسة. الدكاترة (الـ Pods) مش من حقهم يدخلوا الخزنة مباشرة. في ممرضة مسؤولة (ESO Controller) كل ساعة بتنزل تجيب اللي محتاجينه، وتحطه في صيدلية صغيرة جنب كل غرفة (native Kubernetes Secret). لما طبيب الصيدلة يغيّر الجرعة في الخزنة المركزية، الممرضة بتعيد التوزيع تلقائيًا على كل الغرف بدون ما حد يوقف العمل.
بالتعريف التقني: ESO هو Kubernetes operator بيراقب custom resources (ExternalSecret، SecretStore، ClusterSecretStore) ويعمل reconciliation loop دوري. بيجيب القيم من provider خارجي مدعوم — AWS Secrets Manager، AWS Parameter Store، GCP Secret Manager، Azure Key Vault، HashiCorp Vault، 1Password، Doppler، وغيرهم — ويحوّلها لـ Secret عادي جوا الـ cluster. الـ Pods ما بتشوفش الفرق، وده اللي بيخلّي التبنّي سهل.
التثبيت في 3 أوامر
helm repo add external-secrets https://charts.external-secrets.io
helm repo update
helm install external-secrets external-secrets/external-secrets \
-n external-secrets \
--create-namespace \
--set installCRDs=trueبعد الـ install، هتلاقي 3 CRDs جديدة: ExternalSecret، SecretStore، ClusterSecretStore. الـ controller نفسه Pod واحد بيشتغل في namespace منفصل.