المستوى: متوسط — تحتاج خبرة عملية بـ Kubernetes، إلمام بأوامر kubectl و Helm، وفكرة عامة عن HTTPS و TLS.
لو عندك 14 subdomain على cluster Kubernetes وكل 90 يوم بتفتح Let's Encrypt في المتصفح، تجدّد الشهادات يدوياً، وتعمل kubectl create secret tls أربعتاشر مرة، إنت بتحرق ساعتين كل تجديد ومعرّض لانتهاء شهادة في يوم إجازة. cert-manager بيعمل العملية دي صفر يدوي مع 0 ثانية downtime على الـ ingress.
Cert-Manager: التشغيل الكامل لـ TLS داخل Kubernetes
المشكلة باختصار
Let's Encrypt بتدّي شهادات مجانية، بس مدتها 90 يوم بس. على cluster بـ 18 ingress، ده معناه 4 تجديدات في السنة × 14 شهادة × 3 دقائق لكل واحدة = 168 دقيقة شغل يدوي قابل للنسيان. كل مرة بتنسى فيها، عميلك بيشوف رسالة "Your connection is not private" والـ uptime metrics بتنزل.
المثال البسيط أولاً (لو إنت مبتدئ معانا)
تخيّل إنك صاحب مول فيه 14 محل. كل 3 شهور، الإدارة بتطلب تجديد رخصة "ساعات العمل" لكل محل. الطريقة اليدوية: تطوف على كل محل، تطبع رخصة جديدة، تعلّقها مكان القديمة، وتتأكد إنها مش بتسقط. الطريقة الأوتوماتيكية: عندك موظف بيمر كل أسبوع، يشوف أي رخصة قربت تنتهي، يطبعها بنفسه، ويعلّقها بدون ما يسألك. cert-manager هو الموظف ده — لكن لشهادات HTTPS داخل cluster.
التعريف العلمي الدقيق
cert-manager هو Kubernetes operator بيشتغل بمبدأ الـ reconciliation loop المعروف من Kubernetes API server. بيراقب ثلاث Custom Resource Definitions: Issuer أو ClusterIssuer (مصدر الشهادات، زي Let's Encrypt أو Vault PKI)، Certificate (المواصفات اللي إنت طلبتها)، و CertificateRequest (الطلب اللحظي اللي بيتولّد لما الشهادة محتاجة تجديد).
كل دقيقتين، الـ controller بيقارن الحالة الحالية للـ Secrets الموجودة في الـ cluster بالحالة المطلوبة. لو شهادة فاضل ليها أقل من 30 يوم على الانتهاء (الافتراض القابل للتعديل عبر renewBefore)، بيبدأ ACME challenge مع Let's Encrypt تلقائياً. الـ challenge بيتحقق إنك فعلاً مالك الـ domain عبر HTTP-01 (يحط ملف على /.well-known/acme-challenge/) أو DNS-01 (يضيف TXT record). بعد التحقق، الشهادة الجديدة بتحلّ مكان القديمة في نفس الـ Secret object، والـ Ingress controller بيلتقطها بدون restart.
التركيب في 6 خطوات قابلة للنسخ
- أضف Helm repo و حدّث الـ index.
helm repo add jetstack https://charts.jetstack.io
helm repo update- ركّب cert-manager مع الـ CRDs في namespace مخصص.