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

Что такое Ingress в Kubernetes и чем он отличается от Service?

2.0 Middle🔥 203 комментариев
#Kubernetes#Сети и протоколы

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Введение в Ingress и его отличие от Service

В Kubernetes Ingress и Service — это два различных, но взаимодополняющих ресурса, которые решают задачи сетевого доступа к приложениям. В то время как Service обеспечивает внутреннюю балансировку нагрузки и обнаружение сервисов внутри кластера, Ingress управляет внешним доступом к сервисам, предоставляя возможности маршрутизации HTTP/HTTPS трафика, SSL/TLS терминации и виртуального хостинга.

Что такое Ingress?

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

Ключевые возможности Ingress:

  • Маршрутизация на основе хоста и пути: Например, api.example.com → Service API, app.example.com/static → Service Static Files
  • SSL/TLS терминация: Централизованное управление SSL-сертификатами
  • Load Balancing: Распределение трафика между подами сервиса
  • Виртуальный хостинг: Поддержка нескольких доменов через один IP-адрес
  • Аутентификация и авторизация: Интеграция с системами аутентификации

Пример манифеста Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - api.example.com
    secretName: tls-secret
  rules:
  - host: api.example.com
    http:
      paths:
      - path: /users
        pathType: Prefix
        backend:
          service:
            name: user-service
            port:
              number: 80
      - path: /products
        pathType: Prefix
        backend:
          service:
            name: product-service
            port:
              number: 80

Что такое Service?

Service — это абстракция, которая определяет логический набор подов и политику доступа к ним. Service обеспечивает стабильную конечную точку (endpoint) для доступа к приложению, даже когда поды создаются, удаляются или перемещаются между нодами.

Основные типы Services:

  • ClusterIP: Внутренний IP-адрес, доступный только внутри кластера (по умолчанию)
  • NodePort: Открывает порт на каждой ноде кластера
  • LoadBalancer: Интегрируется с облачным провайдером для создания внешнего балансировщика нагрузки
  • ExternalName: Сопоставляет Service с внешним DNS-именем

Пример манифеста Service:

apiVersion: v1
kind: Service
metadata:
  name: user-service
spec:
  selector:
    app: user-api
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

Ключевые различия между Ingress и Service

АспектServiceIngress
Уровень работыУровень 4 (TCP/UDP)Уровень 7 (HTTP/HTTPS)
Основная функцияВнутренняя балансировка и обнаружение сервисовВнешняя маршрутизация и управление трафиком
ДоступностьВстроенный объект KubernetesТребует контроллера Ingress
SSL/TLSОграниченная поддержкаПолноценная SSL/TLS терминация
МаршрутизацияБазовая балансировка по IP:портПродвинутая маршрутизация по хосту, пути, заголовкам
Внешний доступЧерез NodePort или LoadBalancerЧерез контроллер Ingress + правила маршрутизации

Практические сценарии использования

Когда использовать Service:

  • Для внутренней коммуникации между микросервисами
  • Когда нужно обеспечить стабильную точку доступа к набору подов
  • Для простых сценариев внешнего доступа через NodePort или LoadBalancer
  • Когда достаточно базовой TCP/UDP балансировки

Когда использовать Ingress:

  • Для сложной HTTP/HTTPS маршрутизации
  • При необходимости централизованного управления SSL-сертификатами
  • Для реализации API Gateway паттерна в кластере
  • Когда нужно маршрутизировать трафик на основе доменных имен или URL-путей
  • Для реализации canary-развертываний или A/B тестирования через аннотации

Архитектурная интеграция

На практике Ingress и Service работают вместе:

  1. Ingress Controller (например, Nginx Ingress, Traefik, HAProxy) развертывается в кластере и отслеживает ресурсы Ingress
  2. При создании Ingress ресурса контроллер конфигурирует балансировщик нагрузки согласно правилам
  3. Внешний трафик поступает на Ingress Controller
  4. Ingress Controller анализирует запросы и перенаправляет их на соответствующие Services
  5. Services, в свою очередь, распределяют трафик между подами приложения
# Пример проверки Ingress и Service
kubectl get ingress
kubectl describe ingress example-ingress
kubectl get svc
kubectl describe svc user-service

Заключение

Ingress и Service — это комплементарные, а не конкурирующие концепции в Kubernetes экосистеме. Service решает задачу внутренней коммуникации и балансировки, предоставляя стабильные endpoint'ы для приложений, в то время как Ingress специализируется на управлении внешним трафиком с расширенными возможностями маршрутизации уровня приложения. В современных production-окружениях эти механизмы обычно используются совместно для построения гибкой, масштабируемой и безопасной сетевой инфраструктуры микросервисных приложений.