В чем разница между Ingress и NodePort в Kubernetes?

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

Ответ

NodePort и Ingress — это два разных способа предоставить внешний доступ к сервисам внутри кластера Kubernetes, работающие на разных уровнях сетевой модели OSI.

NodePort (Уровень 4 — Transport)

  • Принцип работы: Создает статический порт (в диапазоне 30000-32767) на каждой ноде кластера. Любой трафик, пришедший на этот порт любой ноды, перенаправляется в соответствующий Service, а затем в Pod.
  • Использование: Простая отладка, временный доступ или для сервисов, не требующих маршрутизации на уровне HTTP.
  • Пример манифеста:
    apiVersion: v1
    kind: Service
    metadata:
    name: my-nodeport-svc
    spec:
    type: NodePort
    selector:
    app: my-app
    ports:
    - port: 80        # Порт самого Service
      targetPort: 8080 # Порт контейнера в Pod
      nodePort: 30007  # (Опционально) Фиксированный порт на нодах

Ingress (Уровень 7 — Application)

  • Принцип работы: Это не тип Service, а правила маршрутизации для HTTP/HTTPS трафика. Для работы требует развернутого Ingress-контроллера (например, Nginx Ingress Controller, Traefik). Ingress анализирует заголовки запросов (host, path) и направляет трафик в соответствующие внутренние Services.
  • Использование: Основной способ управления внешним доступом в production. Позволяет использовать один LoadBalancer или несколько NodePort'ов для множества сервисов.
  • Пример манифеста:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: my-ingress
    spec:
    rules:
    - host: app.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 80
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port:
              number: 8080

Ключевое отличие: NodePort — это простой туннель трафика на транспортном уровне. Ingress — это интеллектуальный маршрутизатор на прикладном уровне, который предоставляет виртуальные хосты, балансировку, TLS-терминацию и маршрутизацию по путям. В production-средах Ingress, работающий поверх Service типа LoadBalancer, является стандартом.