Что такое Ingress (роуты) в Kubernetes и зачем он нужен?

«Что такое Ingress (роуты) в Kubernetes и зачем он нужен?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ingress в Kubernetes — это API-объект, который управляет внешним доступом к сервисам (обычно HTTP/HTTPS) внутри кластера. Он действует как интеллектуальный маршрутизатор, определяя правила, по которым внешний трафик попадает к нужным Pod'ам.

Основные функции Ingress:

  • Маршрутизация на основе хоста или пути: Направление запросов api.example.com или example.com/admin к разным сервисам.
  • Терминация TLS/SSL: Централизованное управление SSL-сертификатами для безопасного соединения (HTTPS).
  • Балансировка нагрузки: Распределение трафика между Pod'ами сервиса.
  • Единая точка входа: Позволяет не создавать отдельный Service типа LoadBalancer для каждого внутреннего сервиса, что экономит ресурсы и упрощает конфигурацию.

Пример манифеста Ingress, который направляет трафик на два разных сервиса:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
      - myapp.example.com
    secretName: myapp-tls-secret
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /web
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 8080

Для работы Ingress'а в кластере должен быть развернут Ingress Controller (например, ingress-nginx, Traefik, HAProxy), который и реализует эти правила.