المستوى المطلوب: مبتدئ. هتقدر تنفّذ الخطوات وانت لسه في أول 6 شهور مع Kubernetes، وهتطلع من المقال بـ workflow كامل آمن لحفظ الـ secrets في Git.
Sealed Secrets في Kubernetes: شفّر الـ Secrets قبل ما تحطها في Git
لو فريقك بيستخدم GitOps وكل مرة محتاج تضيف API key بتفتح الـ cluster يدوياً وتعمل kubectl create secret بدل ما تـ commit ملف YAML، انت بتكسر مبدأ "Git is the source of truth". Sealed Secrets بيشفّر الـ secret على لاب توبك بمفتاح عام، وبس الـ controller جوّا الـ cluster هو اللي يقدر يفكّ التشفير. النتيجة: تحط الملف المشفّر في Git من غير قلق، حتى لو الريبو public.
المشكلة باختصار
Kubernetes Secret الافتراضي مش مشفّر — هو بس Base64 encoding، يعني تمثيل بشكل آخر مش حماية. أي حد فاتح الريبو ممكن ياخد password: UzNjcmV0ITIwMjY= ويكتب echo UzNjcmV0ITIwMjY= | base64 -d ويطلع الكلمة فوراً. عشان كده غالبية الفرق اللي بتشتغل GitOps بتسيب الـ secrets برّا Git في 1Password أو Vault منفصل، وده بيكسر الفكرة الأساسية إن الـ git repo هو المصدر الكامل لحالة الـ cluster.
المثال البسيط: الصندوق بقفلين
تخيّل إنك عايز تبعت ورقة فيها كلمة سر لصديقك بالبريد. لو حطيتها في ظرف عادي، أي موظف بريد ممكن يفتحه ويقراها. Sealed Secrets شغّال بنفس فكرة إن صديقك بعتلك صندوق صغير بقفل خاص، وأنت معاك مفتاح يقفل بس ميفتحش. تحط الورقة جوّاه، تقفل الصندوق، تبعته في البريد، وملكش دعوة. صديقك (الـ controller جوّا الـ cluster) هو الوحيد اللي معاه المفتاح اللي بيفتح. لو الصندوق ضاع في الطريق ولقاه حد غريب، مش هيعرف يفتحه أصلاً.
الفكرة دي اسمها Asymmetric Encryption: مفتاحين مختلفين، واحد للقفل وواحد للفتح. اللي يقفل (المفتاح العام) ممكن يكون مع أي مطوّر في الفريق، اللي يفتح (المفتاح الخاص) موجود في مكان واحد فقط داخل الـ cluster.
التعريف العلمي
Sealed Secrets مشروع open-source من Bitnami بيعتمد على تشفير غير متماثل باستخدام RSA-OAEP (المعرّف في RFC 8017) لتغليف مفتاح AES-256-GCM عشوائي بيشفّر بيه الـ payload الفعلي. الـ controller بيولّد زوج مفاتيح أوتوماتيكياً عند أول تشغيل: المفتاح العام (public) متاح لأي مطوّر، والخاص (private) موجود بس داخل الـ cluster كـ Kubernetes Secret في namespace kube-system بـ label sealedsecrets.bitnami.com/sealed-secrets-key. أداة kubeseal على لابتوبك بتحوّل Secret العادي لـ SealedSecret CRD مشفّر، والـ controller بيلاحظ الـ resource ده، يفكّ تشفيره، وينتج Secret طبيعي يقدر الـ Pod يستخدمه عبر envFrom أو volumeMounts.
التثبيت في 5 دقايق — 6 خطوات قابلة للنسخ
- ثبّت الـ controller في الـ cluster: