برنامه نویسی

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

Kubernetes Ingress Controllers و NGINX Ingress

Ingress در Kubernetes یک منبع کلیدی است که ترافیک HTTP و HTTPS را به خدمات درون یک خوشه مدیریت می کند. این به شما امکان می دهد قوانینی را برای مسیریابی ترافیک بر اساس نام هاست، مسیرها یا سایر ویژگی ها تعریف کنید. برای اینکه Ingress کار کند، به یک نیاز دارید کنترل کننده ورودو یکی از محبوب ترین گزینه ها است کنترل کننده ورودی NGINX.


Ingress در Kubernetes چیست؟

Ingress یک منبع API Kubernetes است که قوانین مسیریابی را برای مدیریت دسترسی خارجی به خدمات ارائه می دهد. Ingress به جای نمایش چندین سرویس از طریق LoadBalancers یا NodePorts، یک نقطه ورودی واحد برای مدیریت و مسیریابی ترافیک فراهم می کند.

ویژگی های کلیدی Ingress:

  1. مسیریابی مبتنی بر میزبان: مسیریابی ترافیک بر اساس نام میزبان.
  2. مسیریابی مبتنی بر مسیر: مسیریابی ترافیک بر اساس مسیرهای URL.
  3. خاتمه TLS: ارتباط امن با SSL/TLS.
  4. مدیریت متمرکز: کاهش اتکا به روش‌های متعدد قرار گرفتن در معرض خدمات.

کنترل کننده های ورودی

یک کنترل کننده ورود مؤلفه ای است که Ingress API را پیاده سازی می کند. در حالی که منبع Ingress قوانین مسیریابی را تعریف می کند، کنترل کننده آنها را با پیکربندی متعادل کننده بار یا پروکسی زیرین اعمال می کند.

کنترلرهای ورودی محبوب:

  1. کنترل کننده ورودی NGINX
  2. ترافیک
  3. HAProxy
  4. کانتور
  5. کنترلرهای مخصوص AWS/GCP/Azure

بدون کنترل کننده Ingress، منبع Ingress هیچ تاثیری ندارد.


کنترل کننده ورودی NGINX

این کنترل کننده ورودی NGINX یکی از پرکاربردترین کنترلرها در Kubernetes است. از سرور وب قوی و با کارایی بالا NGINX برای مسیریابی و مدیریت ترافیک استفاده می کند.

چرا NGINX را انتخاب کنید؟

  • کارایی و مقیاس پذیری بالا.
  • مجموعه ویژگی های غنی (به عنوان مثال، مسیریابی پیشرفته، محدود کردن نرخ، صفحات خطای سفارشی).
  • ادغام آسان با استقرارهای Kubernetes موجود.

انواع NGINX:

  1. کنترل کننده ورودی NGINX (با پشتیبانی انجمن):

    • منبع باز.
    • به طور فعال توسط جامعه Kubernetes نگهداری می شود.
  2. NGINX Plus:

    • پیشنهاد تجاری با ویژگی های اضافی در سطح سازمانی.

نصب کنترلر ورودی NGINX

می‌توانید کنترلر ورودی NGINX را با استفاده از ابزارهایی مانند نصب کنید kubectl، Helm یا Kubernetes آشکار می شود.

گزینه 1: نصب با هلم

  1. مخزن Helm را اضافه کنید:
   helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
   helm repo update
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. کنترلر ورودی NGINX را نصب کنید:
   helm install ingress-nginx ingress-nginx/ingress-nginx
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. تأیید نصب:
   kubectl get pods -n ingress-nginx
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

گزینه 2: نصب با Manifests

  1. مانیفست رسمی را اعمال کنید:
   kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. بررسی منابع:
   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

  1. مشاهده گزارش‌ها:
   kubectl logs -n ingress-nginx 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. دسترسی به معیارها:

    • برای نظارت دقیق با Prometheus و Grafana ادغام کنید.
    • از نقطه پایانی متریک داخلی NGINX استفاده کنید.
  2. قوانین ورود به آزمون:

    • استفاده کنید curl برای تأیید مسیریابی:
     curl -H "Host: example.com" http://
    

بهترین روش ها برای ورود NGINX

  1. از فضاهای نام استفاده کنید:

    • برای جداسازی ترافیک، منابع ورودی جداگانه را برای فضاهای نام مختلف مستقر کنید.
  2. ترافیک امن:

    • همیشه TLS را برای محیط های تولید پیکربندی کنید.
    • از Let's Encrypt برای گواهینامه های SSL رایگان با ابزارهایی مانند استفاده کنید مدیر گواهی.
  3. کنترلر را مقیاس کنید:

    • از Kubernetes Horizontal Pod Autoscaler (HPA) برای مقیاس‌بندی کنترل‌کننده ورودی بر اساس ترافیک استفاده کنید.
  4. قوانین مسیریابی آزمایشی:

    • تمام قوانین Ingress را در مرحله بندی قبل از اعمال آنها در تولید اعتبار سنجی کنید.

دستورات مشترک

  kubectl get ingress
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  kubectl describe ingress 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  kubectl logs -n ingress-nginx 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


نتیجه گیری

NGINX Ingress Controller یک راه حل قدرتمند و انعطاف پذیر برای مدیریت ترافیک خارجی در Kubernetes ارائه می دهد. با درک نحوه پیکربندی منابع Ingress و استفاده از ویژگی های پیشرفته NGINX، می توانید یک لایه مدیریت ترافیک مقیاس پذیر، ایمن و کارآمد برای برنامه های Kubernetes خود بسازید.


نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا