Kubernetes Ingress — это ключевой компонент для управления входящим HTTP/HTTPS трафиком в кластере Kubernetes. Он обеспечивает централизованное управление маршрутизацией запросов, интеграцию с SSL/TLS и поддержку различных функций безопасности.
В этой статье мы подробно рассмотрим, что такое Kubernetes Ingress, как он работает, и дадим практическое руководство по его развертыванию на виртуальной машине в среде oVirt.
Что такое Kubernetes Ingress
Ingress в Kubernetes представляет собой объект, который определяет правила для маршрутизации входящего трафика к сервисам внутри кластера. Он действует как точка входа для внешнего трафика, управляя маршрутизацией запросов на основе URL путей и хостов.
Основные компоненты Ingress
- 
Ingress Resource — объект Kubernetes, описывающий правила маршрутизации. Пример манифеста для Ingress Resource:
yamlapiVersion: 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: /app1 pathType: Prefix backend: service: name: app1-service port: number: 80 - path: /app2 pathType: Prefix backend: service: name: app2-service port: number: 80В этом примере запросы к
example.com/app1направляются на сервисapp1-service, а запросы кexample.com/app2— наapp2-service. - 
Ingress Controller — компонент, который реализует правила, указанные в Ingress Resource. Ингресс контроллеры могут быть основаны на различных прокси-серверах и обеспечивать дополнительные функции, такие как SSL/TLS, управление сессиями и балансировка нагрузки.
Популярные Ingress Controllers включают:
- NGINX Ingress Controller: Обеспечивает гибкость и поддержку множества аннотаций.
 - Traefik: Поддерживает динамическую конфигурацию и интеграцию с другими сервисами.
 - HAProxy: Известен своей высокой производительностью и гибкостью.
 
 
Как работает Kubernetes Ingress
- 
Создание и настройка Ingress Resource
Администратор создаёт объект Ingress Resource, определяя правила маршрутизации трафика. Эти правила указывают, какой сервис обрабатывать запросы на основе URL путей и хостов.
 - 
Реализация Ingress Controller
Ingress Controller обнаруживает новые или измененные объекты Ingress и настраивает прокси-серверы для выполнения правил маршрутизации. В зависимости от типа контроллера, это может включать создание конфигураций для балансировщиков нагрузки, SSL/TLS и других аспектов.
 - 
Маршрутизация трафика
Запросы, поступающие на Ingress Controller, направляются на соответствующий сервис в кластере на основе правил маршрутизации, заданных в Ingress Resource.
 
Развертывание Kubernetes Ingress на виртуальной машине oVirt
1. Подготовка виртуальной машины
Для начала, создайте виртуальную машину в oVirt, на которой будет развернут Kubernetes кластер и Ingress Controller. Убедитесь, что виртуальная машина имеет достаточные ресурсы (CPU, RAM и дисковое пространство) для работы Kubernetes и Ingress Controller.
1.1 Создание виртуальной машины
Войдите в интерфейс oVirt и создайте новую виртуальную машину, выбрав подходящие параметры конфигурации:
- Процессор: Минимум 2 виртуальных процессора
 - Оперативная память: Минимум 4 ГБ
 - Хранилище: Не менее 20 ГБ для Kubernetes и приложений
 
1.2 Установка Kubernetes
- 
Установите Docker (или другой контейнерный runtime) и Kubernetes:
bashapt update apt install -y docker.io apt install -y kubelet kubeadm kubectl - 
Инициализируйте кластер Kubernetes:
bashkubeadm init --pod-network-cidr=10.244.0.0/16 - 
Настройте kubectl для использования нового кластера:
bashmkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config - 
Установите сетевой плагин (например, Flannel):
bashkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
2. Установка Ingress Controller
2.1 Установка NGINX Ingress Controller
- 
Добавьте репозиторий Helm и установите Helm (если не установлен):
bashcurl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash - 
Добавьте репозиторий Helm для NGINX Ingress Controller:
bashhelm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update - 
Установите NGINX Ingress Controller:
bashhelm install my-ingress ingress-nginx/ingress-nginx 
2.2 Проверка установки
- 
Проверьте, что NGINX Ingress Controller работает:
bashkubectl get pods -n ingress-nginxВы должны увидеть работающие поды, связанные с NGINX Ingress Controller.
 - 
Проверьте, что сервис создан:
bashkubectl get services -n ingress-nginxСервис должен иметь внешний IP-адрес, через который будет доступен Ingress Controller.
 
3. Создание и настройка Ingress Resource
Создайте объект Ingress Resource для вашего приложения. Например:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80
- 
Примените манифест:
bashkubectl apply -f my-ingress.yaml - 
Проверьте, что Ingress создан и настроен:
bashkubectl get ingress 
Лучшие практики
1. Управление TLS сертификатами
Используйте Kubernetes Secrets для хранения сертификатов и настраивайте TLS в Ingress для защиты данных в транзите:
spec:
  tls:
  - hosts:
    - myapp.example.com
    secretName: my-tls-secret
2. Настройка аннотаций
Используйте аннотации для настройки поведения Ingress Controller, например, для управления кэшированием или перенаправлением:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
3. Регулярное тестирование и обновление
Регулярно проверяйте и обновляйте конфигурации Ingress и Ingress Controller для обеспечения безопасности и функциональности. Тестируйте изменения в staging-среде перед развертыванием в production.
4. Мониторинг и логирование
Настройте мониторинг и логирование для Ingress Controller для выявления и устранения проблем. Используйте инструменты, такие как Prometheus и Grafana для мониторинга и ELK Stack для логирования.
Заключение
Kubernetes Ingress предоставляет мощные возможности для управления входящим трафиком и маршрутизации в кластере. Развертывание Ingress на виртуальной машине в среде oVirt требует настройки Kubernetes, установки Ingress Controller и конфигурации Ingress Resource.
Следуя лучшим практикам и учитывая предложенные рекомендации, вы сможете эффективно управлять входящим трафиком, обеспечивая безопасность и масштабируемость вашего приложения.
| 
 | 
Внимание! Данная статья не является официальной документацией.Использование информации необходимо выполнять с осторожностью, используя для этого тестовую среду.
 
 Если у вас есть вопросы о построении современных систем резервного копирования, репликации, синхронизации данных и защиты от программ вымогателей обратитесь в нашу компанию для получения консультации о современных технологиях резервного копирования и восстановления данных. Наша компания имеет более чем 25-летний опыт в этой области.  | 
                    