انتقل إلى المحتوى الرئيسي

المختبر 8.3 - TLS/SSL مع Cert-Manager

أهداف المختبر​

في نهاية هذا المختبر، ستكون قادرًا على:

  • تثبيت cert-manager في الكلاستر.
  • تكوين ClusterIssuer لـ Let's Encrypt.
  • إنشاء شهادة TLS لـ Ingress.
  • تكوين HTTPS مع Ingress.
  • اختبار الوصول الآمن عبر HTTPS.

المدة المقدرة​

60-75 دقيقة

المتطلبات الأساسية​

  • تثبيت وتكوين kubectl.
  • كلاستر Kubernetes مع Ingress Controller.
  • نطاق متاح للجمهور (أو استخدام شهادات موقعة ذاتيًا للاختبار المحلي).

الجزء 1: تثبيت cert-manager​

cert-manager هو مشغل Kubernetes يقوم بأتمتة إدارة شهادات TLS.

الخطوة 1.1: تثبيت cert-manager​

قم بتثبيت cert-manager:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml

انتظر حتى يصبح cert-manager جاهزًا:

kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=cert-manager -n cert-manager --timeout=90s

تحقق من التثبيت:

kubectl get pods -n cert-manager

الجزء 2: تكوين ClusterIssuer​

ClusterIssuer يحدد كيفية حصول cert-manager على الشهادات (Let's Encrypt، موقعة ذاتيًا، إلخ).

الخطوة 2.1: ClusterIssuer لـ Let's Encrypt (الإنتاج)​

لنطاق عام، أنشئ clusterissuer-letsencrypt.yaml:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com # استبدل ببريدك الإلكتروني
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx

ملاحظة: لـ Let's Encrypt، يجب أن يكون لديك نطاق عام و Ingress متاح من الإنترنت.

الخطوة 2.2: ClusterIssuer موقعة ذاتيًا (اختبار محلي)​

لكلاستر محلي، استخدم شهادة موقعة ذاتيًا:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
spec:
selfSigned: {}

قم بتطبيق ClusterIssuer الموقعة ذاتيًا:

kubectl apply -f clusterissuer-selfsigned.yaml

تحقق:

kubectl get clusterissuer

الجزء 3: إنشاء شهادة​

الخطوة 3.1: إنشاء شهادة​

أنشئ certificate-example.yaml:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app-tls-cert
spec:
secretName: app-tls-secret # اسم السر الذي سيتم تخزين الشهادة فيه
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app.local # اسم المضيف للشهادة

قم بتطبيق الشهادة:

kubectl apply -f certificate-example.yaml

تحقق من الحالة:

kubectl get certificate
kubectl describe certificate app-tls-cert

انتظر حتى تصبح الشهادة جاهزة:

kubectl wait --for=condition=ready certificate app-tls-cert --timeout=60s

تحقق من أن السر قد تم إنشاؤه:

kubectl get secret app-tls-secret

الجزء 4: تكوين Ingress مع TLS​

الخطوة 4.1: إنشاء Ingress مع TLS​

أنشئ ingress-tls.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer # توضيح لـ cert-manager
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret # مرجع إلى السر الخاص بالشهادة
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80

ملاحظة: إذا كنت تستخدم التوضيح cert-manager.io/cluster-issuer، سيقوم cert-manager بإنشاء الشهادة تلقائيًا. خلاف ذلك، قم بالإشارة إلى السر الذي تم إنشاؤه يدويًا.

قم بتطبيق Ingress:

kubectl apply -f ingress-tls.yaml

الجزء 5: اختبار الوصول عبر HTTPS​

الخطوة 5.1: تكوين اسم المضيف​

تأكد من أن app.local يشير إلى IP الخاص بـ Ingress Controller في /etc/hosts.

الخطوة 5.2: اختبار HTTPS​

اختبر الوصول عبر HTTPS:

# تجاهل التحقق من الشهادة الموقعة ذاتيًا
curl -k https://app.local

أو في المتصفح، اقبل الشهادة الموقعة ذاتيًا (سترى تحذيرًا أمنيًا، وهذا طبيعي لشهادة موقعة ذاتيًا).


الجزء 6: الشهادة التلقائية مع التوضيح​

يمكنك أيضًا ترك cert-manager ينشئ الشهادة تلقائيًا عبر التوضيح في Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-auto-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret-auto
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80

سيقوم cert-manager بإنشاء الشهادة والسر تلقائيًا.


الجزء 7: التنظيف​

احذف الموارد:

kubectl delete ingress app-ingress-tls
kubectl delete certificate app-tls-cert
kubectl delete clusterissuer selfsigned-issuer
kubectl delete secret app-tls-secret

لإلغاء تثبيت cert-manager:

kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml

ملخص المختبر​

في هذا المختبر، قمت بتثبيت cert-manager، وتكوين ClusterIssuer (موقعة ذاتيًا للاختبار المحلي)، وإنشاء شهادة TLS، وتكوين Ingress مع HTTPS. لقد تعلمت كيفية أتمتة إدارة شهادات TLS في Kubernetes.


الخطوات التالية​

سيعرض لك المختبر الأخير في هذه الوحدة كيفية تكوين عدة نطاقات و virtual hosts مع Ingress.

المختبر 8.4: النطاقات المتعددة و Virtual Hosts


تم إنشاء المختبر في: ديسمبر 2024