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Чтобы дать стабильный адрес поверх меняющихся IP подов и балансировать трафик
CЧтобы собирать образы
DЧтобы шифровать трафик
2. Какой тип Service доступен только внутри кластера?
ALoadBalancer
BNodePort
CClusterIP
DIngress
3. Что делает тип LoadBalancer?
AОткрывает порт на каждом узле
BПросит у облака внешний балансировщик с публичным IP
CСоздаёт ConfigMap
DПерезапускает поды