Ingress на локальному Kubernetes кластері

pic

На локальному кластері, створеному за допомогою Kubeadm

Чому Ingress необхідний у Kubernetes?

Ingress є ключовим компонентом у Kubernetes, який надає маршрутизацію HTTP та HTTPS до сервісів на основі правил, визначених користувачем.

Ingress може забезпечити балансування навантаження, завершення SSL з'єднань та віртуальний хостинг за іменем.

pic

У цьому блозі я продемонструю, як налаштувати Ingress, що базується на хостах і шляху, найпростішим способом, встановивши контролер Ingress на кластері Nginx. Для рішення LoadBalancer ми будемо використовувати metallb, оскільки кластер створений локально за допомогою kubeadm з 3 віртуальними машинами.

Загальні типи Ingress, які ми використовуємо в Kubernetes

1. Ingress для одного сервісу:

Ingress із вказівкою стандартного бекенду без правил.

2. Ingress для віртуального хостингу на основі імені:

Підтримує маршрутизацію HTTP трафіку до кількох імен хостів на тій самій IP-адресі.

3.

pic

На локальному кластері, створеному за допомогою Kubeadm

Чому Ingress потрібен у Kubernetes?

Ingress є ключовим компонентом у Kubernetes, який надає маршрутизацію HTTP та HTTPS до сервісів на основі правил, визначених користувачем.

Ingress може забезпечити балансування навантаження, завершення SSL з'єднань та віртуальний хостинг за іменем.

pic

У цьому блозі я продемонструю, як налаштувати Ingress, що базується на хостах і шляху, найпростішим способом, встановивши контролер Ingress на кластері Nginx. Для рішення LoadBalancer ми будемо використовувати metallb, оскільки кластер створений локально за допомогою kubeadm з 3 віртуальними машинами.

Загальні типи Ingress, які ми використовуємо в Kubernetes

1. Простий Fanout / Ingress, що базується на шляху:

Маршрутизуйте трафік з однієї IP-адреси до кількох сервісів на основі URI HTTP.

Правило Ingress

pic

Попередні вимоги

Можливо, вам доведеться розгорнути контролер Ingress, наприклад, ingress-nginx.

Створення простору імен

kubectl create namespace ingress-nginx

Встановлення Nginx Ingress

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

Виведення

pic

Перевірка перед запуском

kubectl get pods -n ingress-nginx

Переконайтеся, що pod контролера Ingress працює, готовий та запущений.

Виведення

pic

Список сервісів

kubectl get svc --namespace=ingress-nginx

Виведення

pic

LoadBalancer знаходиться в стані очікування, оскільки це локальний кластер, а не хмарний, або не встановлено хмарний контролер.

Рішення LoadBalancer ??? для кластера, створеного за допомогою kubeadm😀

metallb

Але ми маємо рішення для створення LoadBalancer у локальному кластері за допомогою metallb

Встановлення metallb

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.3/config/manifests/metallb-native.yaml

Список pod'ів

kubectl get pods -n metallb-system

Виведення

pic

Визначення IP-адрес для призначення сервісам LoadBalancer

vi ip-pool.yaml
apiVersion: metallb.io/v1beta1  
kind: IPAddressPool  
metadata:  
 name: cheap  
 namespace: metallb-system  
spec:  
 addresses:  
 - 192.168.10.0/24

Застосування пулу IP-адрес

kubectl apply -f ip-pool.yaml

Перевірка статусу IP-адреси сервісу Ingress для LoadBalancer

kubectl get svc -n ingress-nginx

Виведення

pic

IP-адресу було призначено за допомогою metallb.

Одноразовий Ingress — Демонстрація

Розгорнімо тестовий додаток.

  • Створіть деплоймент
vi kubewebserver.yaml
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: kubewebserver  
 labels:  
 app: kubewebserver  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: kubewebserver  
 template:  
 metadata:  
 labels:  
 app: kubewebserver  
 spec:  
 containers:  
 - name: kubewebserver  
 image: nginx:alpine  
 ports:  
 - containerPort: 80
  • Застосуйте деплоймент
kubectl apply -f kubewebserver.yaml
  • Створіть сервіс
vi kubewebserver-service.yaml
apiVersion: v1  
kind: Service  
metadata:  
 name: kubewebserver-service  
 labels:  
 app: kubewebserver-service  
spec:  
 type: ClusterIP  
 ports:  
 - port: 80  
 targetPort: 80  
 protocol: TCP  
 selector:  
 app: kubewebserver
  • Застосуйте сервіс
kubectl apply -f kubewebserver-service.yaml

pic

Для отримання класу Ingress

Спочатку отримайте клас Ingress, який потрібно визначити у файлі YAML для Ingress

kubectl get ingressClass -A

Створення мінімального Ingress без хосту

vi minimal-ingress.yaml
apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata:  
 name: minimal-ingress  
 annotations:  
 nginx.ingress.kubernetes.io/rewrite-target: /  
spec:  
 ingressClassName: nginx  
 rules:  
 - http:  
 paths:  
 - path: /  
 pathType: Prefix  
 backend:  
 service:  
 name: kubewebserver-service  
 port:  
 number: 80
  • Застосуйте Ingress
kubectl apply -f minimal-ingress.yaml
  • Список Ingress
kubectl get ingress

Виведення

pic

Перевірка

curl 192.168.10.0

Виведення

pic

Створення Ingress з хостом

vi ingress-with-host.yaml
apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata:  
 name: ingress-with-host  
 annotations:  
 nginx.ingress.kubernetes.io/rewrite-target: /  
spec:  
 ingressClassName: nginx  
 rules:  
 - host: app1.kubelancer.com  
 http:  
 paths:  
 - path: /  
 pathType: Prefix  
 backend:  
 service:  
 name: kubewebserver-service  
 port:  
 number: 80
  • Застосуйте Ingress
kubectl apply -f ingress-with-host.yaml
  • Отримайте список Ingress
kubectl get ingress

Виведення

pic

Перевірка

Спробуйте за допомогою IP-адреси

curl 192.168.10.0

Використання IP-адреси викликає помилку

pic

Використовуйте ім’я хоста

curl --resolve app1.kubelancer.com:80:192.168.10.0 http://app1.kubelancer.com:80

Виведення

pic

pic

Сервіс

Перекладено з: Ingress on Local Kubernetes Cluster

Leave a Reply

Your email address will not be published. Required fields are marked *