Gymterview
middle

Что такое Service и какие типы существуют?

Service — абстракция, которая определяет логическую группу Pod’ов и политику доступа к ним. Обеспечивает стабильный сетевой эндпоинт (IP-адрес и DNS-имя) для набора Pod’ов, даже если сами Pod’ы пересоздаются и их IP-адреса меняются.

Зачем нужен Service

Pod’ы эфемерны — они могут быть уничтожены и созданы заново с другим IP. Service решает эту проблему, предоставляя постоянный адрес и балансировку нагрузки.

Типы Service

Тип Доступность Использование Особенности
ClusterIP (по умолчанию) Только внутри кластера Взаимодействие микросервисов Виртуальный IP, доступный по DNS
NodePort Извне через IP ноды Тестирование, dev-окружения Порт 30000-32767 на каждой ноде
LoadBalancer Извне через балансировщик Продакшен в облаке Создаёт внешний LB (AWS ELB, GCP LB)
ExternalName DNS-алиас Доступ к внешним сервисам Возвращает CNAME, не создаёт прокси
Примеры манифестов для каждого типа Service

ClusterIP:

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

Другие сервисы в кластере обращаются по адресу http://my-java-app-service:80 или http://my-java-app-service.namespace.svc.cluster.local:80.

NodePort:

apiVersion: v1
kind: Service
metadata:
  name: my-java-app-nodeport
spec:
  type: NodePort
  selector:
    app: my-java-app
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30080

LoadBalancer:

apiVersion: v1
kind: Service
metadata:
  name: my-java-app-lb
spec:
  type: LoadBalancer
  selector:
    app: my-java-app
  ports:
    - port: 80
      targetPort: 8080

ExternalName:

apiVersion: v1
kind: Service
metadata:
  name: external-db
spec:
  type: ExternalName
  externalName: database.example.com

На собеседовании: нужно перечислить 4 типа Service и сказать, когда какой использовать. Частая ошибка — не знать, что ClusterIP создаётся по умолчанию, или путать NodePort с LoadBalancer.