Ответ
Service в Kubernetes — это абстракция, которая определяет логический набор Pods и политику доступа к ним. Это стабильная сетевая конечная точка.
Основные функции:
- Стабильный сетевой идентификатор: Pods эфемерны (могут перезапускаться, перемещаться). Service предоставляет постоянные IP-адрес и DNS-имя, не зависящие от жизненного цикла конкретных Pods.
- Балансировка нагрузки: Автоматически распределяет входящий трафик между всеми здоровыми Pods, соответствующими селектору (selector).
- Сервис-дискавери: Позволяет 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