Введение в основы Ingress и демонстрация простого примера YAML-файла Ingress
На этом этапе вы узнаете о Kubernetes Ingress, мощном способе управления внешним доступом к службам в кластере Kubernetes.
Что такое Ingress?
Ingress - это объект API, который управляет внешним доступом к службам в кластере Kubernetes, обычно по протоколу HTTP. Ingress предоставляет следующие возможности:
- Балансировка нагрузки: распределяет трафик между несколькими бэкенд-службами
- Завершение SSL/TLS: обрабатывает безопасные соединения
- Виртуальное хостинг на основе имени: маршрутизирует запросы к разным службам в зависимости от имени хоста
- Маршрутизация на основе пути: маршрутизирует запросы к разным службам в зависимости от пути URL
Ingress состоит из двух компонентов:
- Ресурс Ingress: объект API Kubernetes, который определяет правила маршрутизации
- Контроллер Ingress: реализация, которая применяет правила, определенные в ресурсе Ingress
Примечание: этот практикум дает только базовое введение в Ingress. В производственных средах конфигурации Ingress могут быть гораздо более сложными, включая расширенную маршрутизацию, аутентификацию, ограничение скорости и многое другое.
Включим надстройку Ingress в Minikube:
minikube addons enable ingress
Пример вывода:
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
🔉 ingress was successfully enabled
Создадим развертывание для двух примеров приложений:
kubectl create deployment web1 --image=nginx:alpine
kubectl create deployment web2 --image=httpd:alpine
Опубликуем эти развертывания как службы:
kubectl expose deployment web1 --port=80 --type=ClusterIP --name=web1-service
kubectl expose deployment web2 --port=80 --type=ClusterIP --name=web2-service
Создадим YAML-файл Ingress:
nano ingress-example.yaml
Добавим следующую конфигурацию Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1-service
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2-service
port:
number: 80
Основные компоненты этой конфигурации Ingress:
- metadata.annotations: специфические настройки для контроллера Ingress
- spec.rules: определяют, как трафик маршрутизируется к службам
- path: путь URL, который будет сопоставлен
- pathType: способ сопоставления пути (Prefix, Exact или ImplementationSpecific)
- backend.service: служба и порт, на которые будет маршрутизирован трафик
Применим конфигурацию Ingress:
kubectl apply -f ingress-example.yaml
Проверим ресурс Ingress:
kubectl get ingress
Пример вывода:
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 192.168.49.2 80 1m
Проверим детали Ingress:
kubectl describe ingress example-ingress
Пример вывода покажет правила маршрутизации и бэкенд-службы.
Тестирование Ingress:
## Получить IP-адрес Minikube
minikube ip
## Протестировать доступ к службам через Ingress
curl $(minikube ip)/web1
curl $(minikube ip)/web2
Каждая команда должна вернуть страницу по умолчанию соответствующего веб-сервера.
В производственных средах Ingress можно настроить с использованием:
- Нескольких правил на основе имени хоста
- TLS-сертификатов для HTTPS
- Механизмов аутентификации
- Ограничения скорости
- Пользовательских настроек тайм-аута
- Аффинности сессии
- И многих других расширенных функций
Для более полного изучения Ingress обратитесь к документации Kubernetes и рассмотрите возможность изучения документации по специальным контроллерам Ingress, таким как NGINX Ingress или Traefik.