Для чего нужен Ingress в Kubernetes?

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

Ответ

Ingress — это объект Kubernetes, который я настраиваю для управления внешним HTTP/HTTPS-трафиком, поступающим в кластер. Он действует как интеллектуальный маршрутизатор (L7) поверх Service-объектов.

Основные задачи, которые я решаю с помощью Ingress:

  1. Централизованное управление доступом: Один Ingress может маршрутизировать трафик к десяткам внутренних сервисов, избавляя от необходимости в отдельных LoadBalancer-сервисах для каждого.
  2. Маршрутизация на основе хоста и пути: Например, направлять app.example.com/api на backend-service, а app.example.com/static — на nginx, раздающий статику.
  3. Termination TLS/SSL: Централизованное управление SSL-сертификатами через секреты Kubernetes, часто интегрируемое с cert-manager для автоматического получения сертификатов от Let's Encrypt.
  4. Реализация правил доступа и перезаписей: Настройка CORS, редиректов, rewrite-правил и базовой аутентификации.

Пример манифеста Ingress с TLS и двумя правилами:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prod-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
      - api.myapp.com
    secretName: tls-secret  # Секрет с сертификатом и ключом
  rules:
  - host: api.myapp.com
    http:
      paths:
      - path: /v1/users
        pathType: Prefix
        backend:
          service:
            name: user-service-v1
            port:
              number: 8080
      - path: /v2/users
        pathType: Prefix
        backend:
          service:
            name: user-service-v2
            port:
              number: 8080

Важно: Сам по себе Ingress-ресурс — это набор правил. Для их обработки необходим Ingress Controller (например, ingress-nginx, Traefik, AWS ALB Controller), который я разворачиваю в кластере. Контроллер отслеживает создание Ingress-объектов и настраивает реальный балансировщик нагрузки.