Что обязательно нужно указать в манифесте Kubernetes Ingress?

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

Ответ

В минимальном рабочем манифесте Ingress необходимо указать следующие ключевые секции:

  1. apiVersion и kind: Определяют тип ресурса.
  2. metadata.name: Уникальное имя Ingress-ресурса в namespace.
  3. spec.rules: Основные правила маршрутизации. Каждое правило должно содержать:
    • host: Доменное имя (например, app.example.com). Для catch-all можно опустить.
    • http.paths: Список путей. Для каждого пути указываю:
      • path: Шаблон URL (например, /api).
      • pathType: Тип сопоставления (Prefix, Exact или ImplementationSpecific).
      • backend.service: Ссылка на целевой Service Kubernetes с указанием его имени и порта.

Пример базового Ingress для внутреннего API:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  namespace: production
spec:
  rules:
  - host: api.internal.mycompany.com
    http:
      paths:
      - path: /v1
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 8080

Что я часто добавляю дополнительно:

  • Аннотации (metadata.annotations): Для настройки контроллера Ingress (nginx, traefik). Например, для настройки rewrite rules, SSL redirect или rate limiting.
  • TLS-секция (spec.tls): Для настройки HTTPS. В ней указываю имена секретов (TLS Secrets), содержащих сертификат и приватный ключ.
  • IngressClass: Указываю через spec.ingressClassName, если в кластере используется несколько контроллеров Ingress.