المختبر 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