Ingress

Ingress

Ingress - это объект API, который управляет внешним доступом к сервисам в кластере, обычно по протоколам HTTP и HTTPS. Если Service работает на уровне L4 (IP и порты), то Ingress работает на уровне L7 (прикладной уровень), позволяя маршрутизировать трафик на основе доменных имен и путей URL.

Как Ingress устроен внутри

Важно понимать: сам по себе ресурс Ingress — это просто набор правил (конфигурация). Чтобы эти правила заработали, в кластере должен быть запущен Ingress-контроллер.

Схема работы:

  1. Клиент отправляет запрос на публичный IP (обычно это LoadBalancer, за которым стоит контроллер).
  2. Ingress-controller (например, Nginx) принимает запрос.
  3. Он анализирует Host (например, company.com) и Path (/service1).
  4. Контроллер перенаправляет трафик напрямую в Pods, минуя стандартную цепочку kube-proxy, что снижает задержки.

Пример спецификации Ingress

Ниже представлен манифест, который распределяет трафик между двумя разными сервисами в зависимости от URL.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: main-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my.company.com              # Правило для поддомена
    http:
      paths:
      - path: /app1
        pathType: Prefix
        backend:
          service:
            name: service-first       # Отправляем на первый сервис
            port:
              number: 80
  - host: skillbox.com                # Правило для другого домена
    http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service-second      # Отправляем на второй сервис
            port:
              number: 80

Популярные Ingress-контроллеры

Контроллер — это фактически высокопроизводительный прокси-сервер, запущенный внутри пода, который динамически обновляет свои настройки при добавлении новых Ingress-ресурсов.

КонтроллерОсобенности
Ingress NGINX (Kubernetes)Официальный контроллер от сообщества K8s. Самый популярный и стабильный.
NGINX Plus (от F5)Коммерческая версия от создателей Nginx с расширенной поддержкой.
KongПостроен на базе Nginx, ориентирован на управление API и плагины.
TraefikНаписан на Go, отлично подходит для динамических сред, поддерживает автоконфигурацию.
HAProxyИзвестен своей экстремальной производительностью и гибкостью балансировки.
Istio Ingress GatewayЧасть Service Mesh, используется для сложного управления трафиком.

Почему нельзя просто использовать LoadBalancer?

  • Экономия: Один облачный LoadBalancer стоит денег. С Ingress вам нужен только один балансировщик, чтобы обслуживать десятки разных доменов и сервисов.
  • Гибкость: Ingress умеет терминировать SSL-сертификаты (HTTPS), делать перенаправления (redirects) и ограничивать количество запросов (rate limiting).
  • Централизация: Все правила публикации ваших приложений собраны в одном месте, а не разбросаны по разным сервисам.
Итог: Используйте Service типа ClusterIP для внутренних нужд, а Ingress - как единую "входную дверь" для всех внешних HTTP-запросов в ваш кластер.