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

الفصل 8.2 - Ingress Controller

أهداف التعلم​

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

  • فهم ما هو Ingress Controller
  • تثبيت NGINX Ingress Controller
  • تكوين Ingress Controller
  • فهم الأنواع المختلفة من وحدات التحكم
  • إدارة التعليقات التوضيحية والتكوينات المتقدمة
  • استكشاف أخطاء Ingress Controller وإصلاحها

مقدمة​

Ingress Controller هو Pod يراقب موارد Ingress ويقوم بتكوين موازن تحميل لتنفيذ قواعد التوجيه. بدون Ingress Controller، لا تعمل موارد Ingress.


ما هو Ingress Controller؟​

Ingress Controller هو وكيل عكسي يقوم بـ:

  • مراقبة موارد Ingress في العنقود
  • تكوين موازن تحميل وفقًا لقواعد Ingress
  • إدارة توجيه HTTP/HTTPS
  • إنهاء TLS/SSL
  • توفير موازنة التحميل

مهم: يجب تثبيت Ingress Controller بشكل منفصل. لا يوفر Kubernetes وحدة تحكم افتراضية.


أنواع Ingress Controllers​

1. NGINX Ingress Controller​

الأكثر شعبية

المزايا:

  • أداء عالي
  • العديد من الميزات
  • موثق جيدًا
  • دعم نشط

التثبيت:

# Kubernetes officiel
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

# Vérifier l'installation
kubectl get pods -n ingress-nginx

2. Traefik​

بسيط وحديث

المزايا:

  • التكوين التلقائي
  • لوحة تحكم مدمجة
  • تكوين بسيط
  • دعم Let's Encrypt مدمج

التثبيت:

# Helm
helm repo add traefik https://traefik.github.io/charts
helm install traefik traefik/traefik

3. HAProxy Ingress​

أداء عالي جدًا

المزايا:

  • أداء استثنائي
  • تكوين متقدم
  • دعم TCP/UDP

4. Istio Gateway​

للخدمة الشبكية

المزايا:

  • تكامل مع Istio
  • ميزات متقدمة
  • شبكة خدمة كاملة

تثبيت NGINX Ingress Controller​

الطريقة 1: Manifest Kubernetes​

# Installation standard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml

# Vérifier
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx

الطريقة 2: Helm​

# Ajouter le repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# Installer
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace

التحقق​

# عرض الـ Pods
kubectl get pods -n ingress-nginx

# عرض الـ Service
kubectl get svc -n ingress-nginx

# عرض عنوان IP الخارجي
kubectl get svc ingress-nginx-controller -n ingress-nginx

التكوين الأساسي​

IngressClass​

تحديد أي فئة Ingress لاستخدامها:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx

Ingress Resource​

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80

تعليقات NGINX التوضيحية​

تسمح التعليقات التوضيحية بتكوين NGINX بطريقة متقدمة:

إعادة الكتابة​

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /api/(.*)
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80

إعادة توجيه SSL​

metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"

تحديد المعدل​

metadata:
annotations:
nginx.ingress.kubernetes.io/limit-rps: "100"

CORS​

metadata:
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"

المصادقة​

metadata:
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"

التكوين المتقدم​

ConfigMap لـ NGINX​

apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: ingress-nginx
data:
proxy-body-size: "50m"
ssl-protocols: "TLSv1.2 TLSv1.3"
client-max-body-size: "50m"

تطبيق التكوين​

apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
template:
spec:
containers:
- name: controller
args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-config

مثال كامل​

الخطوة 1: الخدمة​

apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80
targetPort: 8080

الخطوة 2: Ingress​

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
tls:
- hosts:
- example.com
secretName: example-tls

أوامر مفيدة​

التحقق​

# عرض Pods الخاص بـ Controller
kubectl get pods -n ingress-nginx

# Logs du Controller
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller

# عرض الـ Services
kubectl get svc -n ingress-nginx

# عرض موارد Ingress
kubectl get ingress
kubectl describe ingress web-ingress

استكشاف الأخطاء وإصلاحها​

# Vérifier la configuration NGINX
kubectl exec -n ingress-nginx <controller-pod> -- cat /etc/nginx/nginx.conf

# Tester la connectivité
curl -H "Host: example.com" http://<ingress-ip>/

# عرض الأحداث
kubectl get events -n ingress-nginx

أفضل الممارسات​

1. Namespace مخصص​

تثبيت Ingress Controller في Namespace مخصص (ingress-nginx).

2. الموارد​

تحديد حدود الموارد لوحدة التحكم.

3. التوافر العالي​

نشر عدة نسخ من وحدة التحكم للتوافر العالي.

4. المراقبة​

مراقبة مقاييس وحدة التحكم (الطلبات، التأخير، الأخطاء).

5. الأمان​

  • استخدام TLS في كل مكان
  • تكوين حدود المعدل
  • تفعيل المصادقة إذا لزم الأمر

ملخص​

في هذا الفصل، تعلمت:

Ingress Controller: Pod ينفذ قواعد Ingress
الأنواع: NGINX (شعبي)، Traefik (بسيط)، HAProxy (أداء عالي)، Istio (شبكة خدمة)
التثبيت: Manifest Kubernetes أو Helm
التكوين: IngressClass، التعليقات التوضيحية، ConfigMap
التعليقات التوضيحية: إعادة الكتابة، إعادة توجيه SSL، تحديد المعدل، CORS، المصادقة
استكشاف الأخطاء وإصلاحها: السجلات، تكوين NGINX، الأحداث
أفضل الممارسات: Namespace مخصص، التوافر العالي، المراقبة، الأمان


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

الفصل 8.3: التوجيه وTLS
المختبر 8.1: نشر Ingress Controller


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