Ingress یکی از مفاهیم مهم در Kubernetes است که به کاربران خارجی اجازه می دهد با استفاده از FQDN (نام دامنه کاملاً واجد شرایط) به برنامه های کانتینر شده دسترسی پیدا کنند. Ingress به طور پیش فرض در کلاستر Kubernetes فعال و نصب نشده است. ما باید با استفاده از کنترل کننده های ورودی third party مانند Nginx ، Traefik ، HAProxy و غیره این مفهوم را فعال کنیم. در این آموزش نشان خواهیم داد که چگونه می توانیم NGINX Ingress controller را در کلاستر Kubernetes فعال و استفاده کنیم.

همانطور که در تصویر بالا می‌بینید ، کاربران خارجی با استفاده از NGINX Ingress Controller از طریق FQDN به برنامه ها دسترسی پیدا می کنند و ingress controller داخلی درخواست را به سرویس هدایت می کند و سپس سرویس درخواست را برای backend یا Pod ها هدایت می کند.

فعال کردن NGINX Ingress Controller در Minikube

Minikube یک کلاستر Kubernetes با یک Node است که می توانیم به راحتی با اجرای دستورات زیر nginx ingress controller را در minikube فعال کنیم.

اگر با نحوه نصب minikube آشنایی ندارید، می‌توانید مطلب “نحوه نصب Kubernetes (k8s) با Minikube در CentOS 8 ” را دنبال کنید.

برای تأیید وضعیت ingress controller دستور زیر را اجرا کنید

minikube addons list

برای فعال کردن ingress controller، دستور زیر را اجرا کنید

minikube addons enable ingress

اگر دستور “minikube addons list” را دوباره اجرا کنیم ، این بار باید ببینیم که وضعیت ingress فعال است.

برای بررسی اینکه پاد ingress controller در حال اجرا است یا خیر ، دستور kubectl را اجرا کنید.

kubectl get pods --all-namespaces | grep -i nginx-controller

خروجی بالا تأیید می کند که nginx-controller فعال شده است و pod خود را با موفقیت در فضای نام kube-system اجرا کرده است.

تنظیم NGINX Ingress Controller در کلاستر Kubernetes

توجه: من فرض می کنم کلاستر Kubernetes فعال و در حال اجرا است.

همچنین می‌توانید مطلب “راه اندازی کلاستر Kubernetes با استفاده از kubeadm ” را دنبال کنید.

به master node یا کنترل‌پنل بروید و دستور kubectl زیر را اجرا کنید

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml

ما خروجی زیر را خواهیم گرفت

برای بررسی وضعیت پادهای nginx-ingress controller دستور زیر را اجرا کنید

kubectl get pods -n ingress-nginx

خروجی فوق تأیید می کند که NGINX Ingress Controller با موفقیت استقرار یافته است.

تست Ingress Controller

برای آزمایش Ingress Controller ، ما دو برنامه کاربردی مبتنی بر کانتینر httpd و nginx ایجاد خواهیم کرد و این برنامه ها را از طریق سرویس expose خواهیم کرد و سپس ingress resource ایجاد خواهیم کرد که به کاربران خارجی امکان دسترسی به این برنامه ها را با استفاده از url مربوطه می دهد.

استقرار httpd و سرویس آن را با نوع NodePort روی درگاه 80 پیاده سازی کنید، فایل yaml زیر را که شامل بخش استقرار و سرویس است ایجاد کنید:

root@controller:~# vim httpd-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      run: httpd-deployment
  template:
    metadata:
      labels:
        run: httpd-deployment
    spec:
      containers:
      - image: httpd
        name: httpd-webserver

---
apiVersion: v1
kind: Service
metadata:
  name: httpd-service
spec:
  type: ClusterIP
  selector:
    run: httpd-deployment
  ports:
    - port: 80

فایل را ذخیره کنید ببندید.

با استفاده از دستور kubectl استقرار را انجام می‌دهیم:

root@controller:~# kubectl create -f httpd-deployment.yaml

استقرار nginx و سرویس آن را با نوع NodePort روی درگاه 80 پیاده سازی کنید، فایل yaml زیر را که شامل بخش استقرار و سرویس است ایجاد کنید:

root@controller:~# vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx-deployment
  template:
    metadata:
      labels:
        run: nginx-deployment
    spec:
      containers:
      - image: nginx
        name: nginx-webserver

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    run: nginx-deployment
  ports:
    - port: 80

پرونده را ذخیره کرده و از آن خارج شوید
اکنون دستور kubectl را اجرا کنید:

kubectl create -f nginx-deployment.yaml

برای تأیید وضعیت هر دو deployment و سرویس آنها، دستور زیر را اجرا کنید:

kubectl get deployments.apps httpd-deployment

kubectl get deployments.apps nginx-deployment

kubectl get service nginx-service httpd-service

ساخت و استقرار Ingress Resource

فایل ingress resource زیر را ایجاد کنید که درخواست را بر اساس url یا path به سمت سرویس مربوطه هدایت می کند. در مثال، ما از url یا fqdn استفاده می کنیم.

vim myweb-ingress.yaml
apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
   name: name-based-virtualhost-ingress
 spec:
   rules:
 host: httpd.example.com
 http:
   paths:
 pathType: Prefix
 path: "/"
 backend:
   service:
     name: httpd-service
     port:
       number: 80
 host: nginx.example.com
 http:
   paths:
 pathType: Prefix
 path: "/"
 backend:
   service:
     name: nginx-service
     port:
       number: 80 

ذخیره کنید و فایل را ببندید.

دستور kubectl زیر را برای ایجاد ingress resource بالا اجرا کنید

kubectl create -f myweb-ingress.yaml

برای بررسی وضعیت ingress resource ایجاد شده در بالا،دستور زیر را اجرا کنید

kubectl get ingress name-based-virtualhost-ingress
kubectl describe ingress name-based-virtualhost-ingress

خروجی بالا تأیید می کند که ingress resource با موفقیت ایجاد شده اند.

قبل از دسترسی به این url ها از خارج از کلاستر، لطفا مطمئن شوید که ورودی های زیر را در فایل hosts سیستم خود اضافه کردید.

192.168.1.190                httpd.example.com
192.168.1.190                nginx.example.com

اکنون سعی کنید از طریق مرورگر وب به این URL ها دسترسی پیدا کنید.

http://httpd.example.com

http://nginx.example.com

خروجی بالا تأیید می کند که ما nginx ingress controller را با موفقیت در Kubernetes راه اندازی کرده ایم.

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

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

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