المختبر 8.1 - تكوين Ingress NGINX
أهداف المختبر
في نهاية هذا المختبر، ستكون قادرًا على:
- تثبيت Ingress Controller NGINX.
- فهم دور Ingress Controller.
- إنشاء مورد Ingress أساسي.
- كشف تطبيق عبر Ingress.
- اختبار الوصول إلى التطبيق عبر Ingress.
المدة المقدرة
45-60 دقيقة
المتطلبات الأساسية
- تثبيت وتكوين kubectl.
- وجود عنقود Kubernetes محلية تعمل (minikube أو kind).
- معرفة بـ Ingress (الفصل 8.1 و 8.2).
الجزء 1: تثبيت Ingress Controller NGINX
الخطوة 1.1: تفعيل Ingress على Minikube
إذا كنت تستخدم minikube، فعّل الإضافة Ingress:
minikube addons enable ingress
تحقق من تثبيت Ingress Controller:
kubectl get pods -n ingress-nginx
يجب أن ترى Pods لـ Ingress Controller NGINX.
الخطوة 1.2: التثبيت اليدوي (بديل)
إذا كنت لا تستخدم minikube أو للتثبيت اليدوي، استخدم:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
انتظر حتى تكون الـ Pods جاهزة:
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
الجزء 2: نشر تطبيق اختبار
قبل تكوين Ingress، دعونا ننشر تطبيقًا بسيطًا.
الخطوة 2.1: إنشاء Deployment
أنشئ ملف app-deployment.yaml:
# app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
طبق الـ Deployment:
kubectl apply -f app-deployment.yaml
الخطوة 2.2: إنشاء خدمة
أنشئ ملف app-service.yaml:
# app-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 80
type: ClusterIP
طبق الخدمة:
kubectl apply -f app-service.yaml
تحقق من إنشاء الخدمة:
kubectl get svc web-app-service
الجزء 3: إنشاء مورد Ingress
الخطوة 3.1: إنشاء Ingress
أنشئ ملف ingress-basic.yaml:
# ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-app-ingress
spec:
ingressClassName: nginx # Spécifie l'Ingress Controller à utiliser
rules:
- host: webapp.local # Nom d'hôte (pour local, utilisez ce nom ou modifiez /etc/hosts)
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
التفسير:
ingressClassName: nginx: يشير إلى استخدام Ingress Controller NGINX.host: webapp.local: اسم المضيف للوصول إلى التطبيق.path: /: جميع المسارات التي تبدأ بـ/.backend: خدمة الـ backend التي تدير حركة المرور.
طبق الـ Ingress:
kubectl apply -f ingress-basic.yaml
الخطوة 3.2: التحقق من Ingress
تحقق من إنشاء Ingress:
kubectl get ingress
تحقق من التفاصيل:
kubectl describe ingress web-app-ingress
يجب أن ترى عنوان IP لـ Ingress Controller (على minikube، قد يستغرق الأمر بضع ثوانٍ).
الجزء 4: الوصول إلى التطبيق
الخطوة 4.1: الحصول على عنوان IP لـ Ingress
على minikube، احصل على الـ IP:
minikube ip
أو تحقق من Ingress:
kubectl get ingress web-app-ingress
الخطوة 4.2: تكوين اسم المضيف (محلي)
بالنسبة لمجموعة محلية، يجب عليك إضافة الإدخال في /etc/hosts (Linux/Mac) أو C:\Windows\System32\drivers\etc\hosts (Windows):
# على Linux/Mac، حرر /etc/hosts
sudo nano /etc/hosts
# أضف هذا السطر (استبدل <INGRESS_IP> بـ IP لـ Ingress):
<INGRESS_IP> webapp.local
على Windows، حرر C:\Windows\System32\drivers\etc\hosts بصلاحيات المسؤول.
الخطوة 4.3: اختبار الوصول
اختبر الوصول إلى التطبيق:
curl http://webapp.local
أو افتح http://webapp.local في متصفحك.
يجب أن ترى الصفحة الافتراضية لـ NGINX.
الخطوة 4.4: بديل مع Port-Forward (بدون تعديل /etc/hosts)
إذا كنت لا تريد تعديل /etc/hosts، استخدم port-forward إلى Ingress Controller:
# ابحث عن اسم Pod لـ Ingress Controller
INGRESS_POD=$(kubectl get pods -n ingress-nginx -l app.kubernetes.io/component=controller -o jsonpath='{.items[0].metadata.name}')
# Port-forward
kubectl port-forward -n ingress-nginx $INGRESS_POD 8080:80
ثم اختبر:
curl -H "Host: webapp.local" http://localhost:8080
الجزء 5: التحقق من السجلات
تحقق من سجلات Ingress Controller لرؤية الطلبات:
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller --tail=20
يجب أن ترى الطلبات HTTP الواردة.
الجزء 6: التنظيف
احذف الموارد التي تم إنشاؤها:
kubectl delete ingress web-app-ingress
kubectl delete -f app-service.yaml
kubectl delete -f app-deployment.yaml
لإلغاء تفعيل Ingress على minikube:
minikube addons disable ingress
ملخص المختبر
في هذا المختبر، قمت بتثبيت وتكوين Ingress Controller NGINX، وإنشاء مورد Ingress أساسي، وكشف تطبيق عبر Ingress. تعلمت كيفية الوصول إلى التطبيق عبر اسم المضيف المُكوّن.
الخطوات التالية
المختبر التالي سيُظهر لك كيفية تكوين التوجيه القائم على المسارات (Path-based routing) لتوجيه حركة المرور إلى تطبيقات مختلفة.
المختبر 8.2: Path-based Routing
تم إنشاء المختبر في: ديسمبر 2024