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Перезапускает поды