← Назад к вопросам

Что такое Cluster IP в Kubernetes?

1.3 Junior🔥 231 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Cluster IP в Kubernetes?

Cluster IP — это один из основных типов Service (Сервиса) в Kubernetes, который представляет собой стабильный внутренний IP-адрес и DNS-имя для набора Pod'ов. Этот адрес доступен только внутри кластера Kubernetes и не маршрутизируется извне. Основная цель Cluster IP — обеспечить внутреннюю коммуникацию между микросервисами в кластере, абстрагируя динамическую природу Pod'ов.

Ключевые характеристики Cluster IP

  1. Стабильная внутренняя точка доступа:

    • Pod'ы в Kubernetes эфемерны — они могут пересоздаться на другом узле с другим IP.
    • Cluster IP предоставляет постоянный адрес, который не меняется при рестартах или масштабировании Pod'ов.
  2. Балансировка нагрузки:

    • Сервис автоматически распределяет трафик между всеми Pod'ами, соответствующими селекторам (selectors).
  3. DNS-резолвинг:

    • Каждый Service получает DNS-имя в формате <service-name>.<namespace>.svc.cluster.local.
    • Внутри кластера приложения могут обращаться друг к другу по этому имени.

Архитектурная роль

Cluster IP действует как абстракция 4-го уровня (L4), скрывая детали реализации:

  • kube-proxy на каждом узле отслеживает изменения Service и Pod'ов через API-сервер.
  • Для каждого Service создаются правила iptables/IPVS, которые перенаправляют трафик с Cluster IP на реальные IP Pod'ов.

Пример манифеста Service с типом ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: backend-service
  namespace: production
spec:
  type: ClusterIP  # Это значение по умолчанию, можно не указывать
  selector:
    app: backend
    tier: api
  ports:
    - protocol: TCP
      port: 80        # Порт, на котором Service принимает запросы
      targetPort: 8080 # Порт контейнера в Pod'ах

Практическое применение

  • Связь между микросервисами: Frontend Pod'ы обращаются к backend через backend-service.production.svc.cluster.local:80.
  • Изоляция окружений: В разных namespace можно создать сервисы с одинаковым именем.
  • Подключение stateful-приложений: Базовый слой для более сложных сервисов (например, Headless Services для StatefulSets).

Как это работает технически

  1. Создание Service:

    kubectl apply -f service.yaml
    
  2. Kubernetes назначает Cluster IP из пуска внутренних адресов (диапазон задаётся в --service-cluster-ip-range у API-сервера).

  3. kube-proxy обновляет правила на всех узлах:

    # Пример просмотра iptables правил
    sudo iptables-save | grep backend-service
    
  4. DNS-сервис (CoreDNS/kube-dns) автоматически создаёт DNS-запись.

Ограничения и особенности

  • Только внутренняя доступность: Для внешнего доступа нужны Service типов NodePort или LoadBalancer.
  • Статический диапазон: Необходимо планировать размер пула Cluster IP, чтобы избежать исчерпания.
  • Сетевые политики: Для ограничения трафика между Service'ами используются NetworkPolicies.

Отличие от других типов Service

Тип ServiceНазначениеВидимость
ClusterIPВнутренняя коммуникацияТолько внутри кластера
NodePortВнешний доступ через порт узлаВнешний (через порт 30000-32767)
LoadBalancerИнтеграция с облачными балансировщикамиВнешний (через облачный LB)
ExternalNameCNAME на внешний сервисПрокси для внешних ресурсов

Best Practices

  • Используйте DNS-имена, а не IP-адреса, для гибкости.
  • Чётко определяйте селекторы, чтобы Service находил нужные Pod'ы.
  • Мониторьте метрики Service: количество активных эндпоинтов, задержки.
  • Для внутреннего TLS используйте сервисные mesh-решения (Istio, Linkerd) или cert-manager с внутренними CA.

Cluster IP — фундаментальный строительный блок сетевой модели Kubernetes, обеспечивающий надёжное service discovery и балансировку нагрузки для современного cloud-native стека. Без этой абстракции управление динамическими микросервисными архитектурами было бы значительно сложнее.

Что такое Cluster IP в Kubernetes? | PrepBro