Service: зачем он нужен
IP подов постоянно меняются — Service даёт стабильный адрес, по которому всегда можно достучаться до приложения.
Service — объект, который даёт стабильную точку доступа (виртуальный IP и DNS-имя) к набору подов и балансирует трафик между ними.
Поды эфемерны: при каждом пересоздании у пода новый IP. Если бы фронтенд обращался к бэкенду по IP пода, связь рвалась бы при любом перезапуске. Service решает это: он даёт неизменный адрес, а трафик сам распределяет по живым подам, которые подходят под его селектор.
Манифест Service
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web # на какие поды слать трафик
ports:
- port: 80 # порт самого сервиса
targetPort: 80 # порт контейнера в подеService выбирает поды по меткам (app: web), ровно как ReplicaSet. Создал поды — Service автоматически начинает балансировать на них.
Три типа Service
Тип определяет, кому виден сервис:
- ClusterIP (по умолчанию) — виртуальный IP внутри кластера. Снаружи недоступен. Так общаются сервисы между собой.
- NodePort — открывает фиксированный порт (30000–32767) на каждом узле. Снаружи доступен по
IP_узла:порт. Удобно для локальной проверки. - LoadBalancer — просит у облака внешний балансировщик с публичным IP. Основной способ публикации в облаке.
# NodePort: доступ снаружи по IP узла
apiVersion: v1
kind: Service
metadata:
name: web-nodeport
spec:
type: NodePort
selector:
app: web
ports:
- port: 80
targetPort: 80
nodePort: 30080 # необязательно; иначе выберется самkubectl apply -f web-svc.yaml
kubectl get service webВывод:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web ClusterIP 10.96.140.21 <none> 80/TCP 5s
| Тип | Доступ | Когда |
| ClusterIP | только внутри кластера | связь сервис-сервис |
| NodePort | порт на каждом узле | локальная проверка |
| LoadBalancer | публичный IP от облака | прод в облаке |
Итог
- Service — стабильный адрес для эфемерных подов плюс балансировка.
- Поды выбираются по меткам через selector.
- ClusterIP — внутри, NodePort — порт узла, LoadBalancer — внешний IP облака.
Проверьте себя
1. Зачем нужен Service, если у подов уже есть IP?
AЧтобы хранить конфигурацию
BЧтобы собирать образы
CЧтобы дать стабильный адрес поверх меняющихся IP подов и балансировать трафик
DЧтобы шифровать трафик
2. Какой тип Service доступен только внутри кластера?
ALoadBalancer
BNodePort
CIngress
DClusterIP
3. Что делает тип LoadBalancer?
AПросит у облака внешний балансировщик с публичным IP
BОткрывает порт на каждом узле
CСоздаёт ConfigMap
DПерезапускает поды