Для чего нужен Service в Kubernetes?

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

Ответ

Service в Kubernetes — это абстракция, которая определяет устойчивую конечную точку для доступа к логическому набору Pod'ов. Его основная цель — обеспечить сетевое взаимодействие с динамически меняющимся набором рабочих нагрузок.

Решаемые проблемы:

  1. Динамические IP-адреса Pod'ов: При пересоздании Pod получает новый IP.
  2. Масштабирование: Несколько реплик Pod'ов должны быть доступны через единую точку входа.
  3. Балансировка нагрузки: Трафик должен распределяться между всеми здоровыми Pod'ами.

Типы Service и их назначение:

  • ClusterIP (тип по умолчанию): Создает внутренний виртуальный IP, доступный только внутри кластера. Используется для связи между микросервисами.

    apiVersion: v1
    kind: Service
    metadata:
      name: backend-service
    spec:
      type: ClusterIP
      selector:
        app: backend-api
      ports:
        - port: 80          # Порт, на котором Service доступен внутри кластера
          targetPort: 3000  # Порт контейнера в Pod
  • NodePort: Открывает статический порт на КАЖДОМ узле кластера (Node). Трафик на NodeIP:NodePort перенаправляется в Service. Используется для доступа извне в dev-средах или когда нет Ingress/LoadBalancer.

  • LoadBalancer: Интегрируется с облачным провайдером (AWS ELB, GCP Load Balancer) для создания внешнего балансировщика нагрузки, который автоматически направляет трафик в Service. Стандартный способ выхода в интернет.

  • Headless: Создается путем явного указания clusterIP: None. Возвращает DNS-записи, указывающие непосредственно на IP-адреса Pod'ов, минуя прокси и балансировку. Критично для StatefulSet (например, для кластеров БД).

Как это работает: Service постоянно отслеживает Pod'ы через selector и поддерживает актуальный список их IP-адресов в объекте Endpoints. Внутренний компонент kube-proxy на каждой ноде настраивает правила (iptables/IPVS) для перенаправления трафика на эти IP-адреса.