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

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