Какую роль выполняет ресурс Service в Kubernetes?

«Какую роль выполняет ресурс Service в Kubernetes?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Service в Kubernetes — это абстракция, которая определяет логический набор Pods и политику доступа к ним. Это стабильная сетевая конечная точка.

Основные функции:

  1. Стабильный сетевой идентификатор: Pods эфемерны (могут перезапускаться, перемещаться). Service предоставляет постоянные IP-адрес и DNS-имя, не зависящие от жизненного цикла конкретных Pods.
  2. Балансировка нагрузки: Автоматически распределяет входящий трафик между всеми здоровыми Pods, соответствующими селектору (selector).
  3. Сервис-дискавери: Позволяет Pods находить друг друга через DNS (например, my-service.namespace.svc.cluster.local).

Типы Services:

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

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

apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector: # Селектор определяет, какие Pods будут частью сервиса
    app: backend
    tier: api
  ports:
    - name: http
      protocol: TCP
      port: 80       # Порт, на котором Service доступен внутри кластера
      targetPort: 8080 # Порт контейнера в Pod, на который перенаправляется трафик
  type: ClusterIP