کنترلرهای ورودی Kubernetes و NGINX Ingress: یک راهنمای کامل

Kubernetes Ingress Controllers و NGINX Ingress
Ingress در Kubernetes یک منبع کلیدی است که ترافیک HTTP و HTTPS را به خدمات درون یک خوشه مدیریت می کند. این به شما امکان می دهد قوانینی را برای مسیریابی ترافیک بر اساس نام هاست، مسیرها یا سایر ویژگی ها تعریف کنید. برای اینکه Ingress کار کند، به یک نیاز دارید کنترل کننده ورودو یکی از محبوب ترین گزینه ها است کنترل کننده ورودی NGINX.
Ingress در Kubernetes چیست؟
Ingress یک منبع API Kubernetes است که قوانین مسیریابی را برای مدیریت دسترسی خارجی به خدمات ارائه می دهد. Ingress به جای نمایش چندین سرویس از طریق LoadBalancers یا NodePorts، یک نقطه ورودی واحد برای مدیریت و مسیریابی ترافیک فراهم می کند.
ویژگی های کلیدی Ingress:
- مسیریابی مبتنی بر میزبان: مسیریابی ترافیک بر اساس نام میزبان.
- مسیریابی مبتنی بر مسیر: مسیریابی ترافیک بر اساس مسیرهای URL.
- خاتمه TLS: ارتباط امن با SSL/TLS.
- مدیریت متمرکز: کاهش اتکا به روشهای متعدد قرار گرفتن در معرض خدمات.
کنترل کننده های ورودی
یک کنترل کننده ورود مؤلفه ای است که Ingress API را پیاده سازی می کند. در حالی که منبع Ingress قوانین مسیریابی را تعریف می کند، کنترل کننده آنها را با پیکربندی متعادل کننده بار یا پروکسی زیرین اعمال می کند.
کنترلرهای ورودی محبوب:
- کنترل کننده ورودی NGINX
- ترافیک
- HAProxy
- کانتور
- کنترلرهای مخصوص AWS/GCP/Azure
بدون کنترل کننده Ingress، منبع Ingress هیچ تاثیری ندارد.
کنترل کننده ورودی NGINX
این کنترل کننده ورودی NGINX یکی از پرکاربردترین کنترلرها در Kubernetes است. از سرور وب قوی و با کارایی بالا NGINX برای مسیریابی و مدیریت ترافیک استفاده می کند.
چرا NGINX را انتخاب کنید؟
- کارایی و مقیاس پذیری بالا.
- مجموعه ویژگی های غنی (به عنوان مثال، مسیریابی پیشرفته، محدود کردن نرخ، صفحات خطای سفارشی).
- ادغام آسان با استقرارهای Kubernetes موجود.
انواع NGINX:
-
کنترل کننده ورودی NGINX (با پشتیبانی انجمن):
- منبع باز.
- به طور فعال توسط جامعه Kubernetes نگهداری می شود.
-
NGINX Plus:
- پیشنهاد تجاری با ویژگی های اضافی در سطح سازمانی.
نصب کنترلر ورودی NGINX
میتوانید کنترلر ورودی NGINX را با استفاده از ابزارهایی مانند نصب کنید kubectl
، Helm یا Kubernetes آشکار می شود.
گزینه 1: نصب با هلم
- مخزن Helm را اضافه کنید:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
- کنترلر ورودی NGINX را نصب کنید:
helm install ingress-nginx ingress-nginx/ingress-nginx
- تأیید نصب:
kubectl get pods -n ingress-nginx
گزینه 2: نصب با Manifests
- مانیفست رسمی را اعمال کنید:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
- بررسی منابع:
kubectl get all -n ingress-nginx
ایجاد یک منبع ورودی
پس از استقرار NGINX Ingress Controller، می توانید یک ورود منبعی برای مسیریابی ترافیک
مثال: ورود اساسی
این مثال ترافیک را به یک سرویس باطن بر اساس نام میزبان هدایت می کند.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
مثال: مسیریابی مبتنی بر مسیر
مسیریابی ترافیک به خدمات مختلف بر اساس مسیرهای URL:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-based-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
مثال: TLS-Enabled Ingress
ترافیک ایمن با استفاده از SSL/TLS:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-ingress
spec:
tls:
- hosts:
- example.com
secretName: example-tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: secure-service
port:
number: 443
حاشیه نویسی برای NGINX Ingress
حاشیه نویسی اجازه می دهد تا رفتار کنترل کننده ورودی NGINX را تنظیم کنید. در اینجا برخی از موارد رایج وجود دارد:
- بازنویسی هدف: URL ها را قبل از ارسال به باطن بازنویسی کنید.
nginx.ingress.kubernetes.io/rewrite-target: /
- صفحات خطای سفارشی: پاسخ های خطای سفارشی را تعریف کنید.
nginx.ingress.kubernetes.io/custom-http-errors: "404,503"
- محدود کردن نرخ: برای جلوگیری از سوء استفاده درخواست ها را محدود کنید.
nginx.ingress.kubernetes.io/limit-rps: "5"
- اندازه بدن مشتری: کنترل محدودیت های آپلود.
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
نظارت و اشکال زدایی NGINX Ingress
- مشاهده گزارشها:
kubectl logs -n ingress-nginx
-
دسترسی به معیارها:
- برای نظارت دقیق با Prometheus و Grafana ادغام کنید.
- از نقطه پایانی متریک داخلی NGINX استفاده کنید.
-
قوانین ورود به آزمون:
- استفاده کنید
curl
برای تأیید مسیریابی:
curl -H "Host: example.com" http://
- استفاده کنید
بهترین روش ها برای ورود NGINX
-
از فضاهای نام استفاده کنید:
- برای جداسازی ترافیک، منابع ورودی جداگانه را برای فضاهای نام مختلف مستقر کنید.
-
ترافیک امن:
- همیشه TLS را برای محیط های تولید پیکربندی کنید.
- از Let's Encrypt برای گواهینامه های SSL رایگان با ابزارهایی مانند استفاده کنید مدیر گواهی.
-
کنترلر را مقیاس کنید:
- از Kubernetes Horizontal Pod Autoscaler (HPA) برای مقیاسبندی کنترلکننده ورودی بر اساس ترافیک استفاده کنید.
-
قوانین مسیریابی آزمایشی:
- تمام قوانین Ingress را در مرحله بندی قبل از اعمال آنها در تولید اعتبار سنجی کنید.
دستورات مشترک
kubectl get ingress
kubectl describe ingress
kubectl logs -n ingress-nginx
نتیجه گیری
NGINX Ingress Controller یک راه حل قدرتمند و انعطاف پذیر برای مدیریت ترافیک خارجی در Kubernetes ارائه می دهد. با درک نحوه پیکربندی منابع Ingress و استفاده از ویژگی های پیشرفته NGINX، می توانید یک لایه مدیریت ترافیک مقیاس پذیر، ایمن و کارآمد برای برنامه های Kubernetes خود بسازید.