Ответ
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, является стандартом.