← Назад к вопросам

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

2.0 Middle🔥 181 комментариев
#Kubernetes

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Обязательные элементы в Kubernetes Ingress

Ingress — это Kubernetes ресурс, который управляет внешним доступом к сервисам внутри кластера (обычно HTTP/HTTPS). Не все поля обязательны, но некоторые элементы являются критичными для функционирования.

Минимальная структура Ingress

Обязательные элементы:

  1. apiVersion — версия API
  2. kind — тип ресурса (Ingress)
  3. metadata — метаданные (имя, namespace)
  4. spec — спецификация, включая rules (правила маршрутизации)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

Обязательные поля внутри spec

rules — это единственное обязательное поле в spec. Оно определяет:

  • host — доменное имя (опционально для catch-all правил)
  • http.paths — пути и их бэкенды
  • backend — сервис, на который маршрутизировать трафик

Детальная структура

spec:
  rules:                    # ОБЯЗАТЕЛЬНО
  - host: api.example.com   # опционально (если не указано = catch-all)
    http:                   # ОБЯЗАТЕЛЬНО (или grpc для grpc трафика)
      paths:                # ОБЯЗАТЕЛЬНО
      - path: /api          # опционально
        pathType: Prefix    # ОБЯЗАТЕЛЬНО (Prefix, Exact, ImplementationSpecific)
        backend:            # ОБЯЗАТЕЛЬНО
          service:
            name: api-service     # ОБЯЗАТЕЛЬНО
            port:
              number: 8080        # ОБЯЗАТЕЛЬНО

Полный практический пример

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:                           # опционально для HTTPS
  - hosts:
    - example.com
    - www.example.com
    secretName: example-tls
  rules:
  - host: example.com            # опционально
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80
  - host: api.example.com
    http:
      paths:
      - path: /v1
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080
      - path: /health
        pathType: Exact
        backend:
          service:
            name: api-service
            port:
              number: 8080

pathType — важный параметр

  • Prefix — совпадение начала пути (example.com/api совпадает с /api, /api/v1, /api/users)
  • Exact — точное совпадение пути (example.com/api совпадает только с /api)
  • ImplementationSpecific — зависит от реализации (обычно Prefix)

TLS/HTTPS — обязательно для production

spec:
  tls:
  - hosts:
    - example.com
    - api.example.com
    secretName: my-tls-secret  # Secret с сертификатом
  rules:
  # ...

Частые ошибки

❌ Ошибка: забыли указать backend service

spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        # backend не указан!

Результат: Ingress будет создан, но трафик не будет маршрутизироваться.

✅ Правильно:

spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

Проверка Ingress

# Создание
kubectl apply -f ingress.yaml

# Просмотр всех Ingress
kubectl get ingress

# Детальная информация
kubectl describe ingress my-ingress

# Проверка статуса и IP/hostname
kubectl get ingress my-ingress -o wide

Вывод

Обязательные элементы в Ingress:

  1. spec.rules — массив правил маршрутизации
  2. rules[].http.paths — пути и их бэкенды
  3. paths[].pathType — тип совпадения пути
  4. paths[].backend.service.name — имя сервиса
  5. paths[].backend.service.port.number — порт сервиса

Без этих элементов Ingress не будет функционировать должным образом. Дополнительно рекомендуется указывать tls для production и ingressClassName для явного выбора контроллера.