intermediate
Service
Давайте стабильную виртуальную сеть и балансировку для меняющегося набора podов по labels.
Service даёт стабильную виртуальную сеть для меняющегося набора pod'ов по labels. Клиенты обращаются к DNS-имени Service, а не к IP pod'ов.
| Тип | Типичное применение | |-----|---------------------| | ClusterIP | Внутренний app-to-app трафик (по умолчанию) | | NodePort | Порт на каждой ноде (dev/legacy) | | LoadBalancer | Облачный LB перед pod'ами | | Headless | Прямой DNS pod'ов для StatefulSet |
apiVersion: v1
kind: Service
metadata:
name: api
spec:
selector:
app: api
ports:
- port: 80
targetPort: 3000
Ingress обычно маршрутизирует внешний HTTP к Service — не напрямую к IP pod'ов.
На интервью: типы Service, selectors, `port` vs `targetPort`, headless и связь с Ingress.
Типовые ошибки: неверный selector молча указывает на ноль или чужие pod'ы; LoadBalancer на каждый сервис.
Компромисс — простое exposure (LoadBalancer везде) против least-privilege в сети.
Чеклист:
- Точное совпадение selectors.
- Тип Service по потребности exposure.
- HTTP через Ingress где уместно.
- Проверка endpoints через `kubectl get endpoints`.