Ответ
В Kubernetes три основных типа Service для управления доступом к подам:
-
ClusterIP — сервис по умолчанию. Создает внутренний, стабильный IP-адрес, доступный только внутри кластера. Используется для внутренней коммуникации между компонентами.
apiVersion: v1 kind: Service metadata: name: my-internal-service spec: type: ClusterIP selector: app: my-app ports: - port: 80 targetPort: 9376 -
NodePort — открывает статический порт (в диапазоне 30000-32767) на IP-адресе каждой ноды (Node) кластера. Трафик на
<NodeIP>:<NodePort>перенаправляется в сервис. Используется для простого внешнего доступа, например, в dev-средах или для сервисов, не требующих балансировки извне.apiVersion: v1 kind: Service metadata: name: my-nodeport-service spec: type: NodePort selector: app: my-app ports: - port: 80 targetPort: 9376 nodePort: 30007 # Опционально. Если не указан, будет выбран случайный. -
LoadBalancer — стандартный способ для публикации сервиса в облачных средах (AWS, GCP, Azure). Kubernetes API взаимодействует с провайдером, который автоматически создает внешний балансировщик нагрузки и назначает ему внешний IP-адрес. Весь входящий трафик идет на балансировщик, который распределяет его по подам.
apiVersion: v1 kind: Service metadata: name: my-loadbalancer spec: type: LoadBalancer selector: app: my-app ports: - port: 80 targetPort: 9376
Дополнительные типы и уточнения:
- ExternalName — маппит сервис на внешнее DNS-имя (CNAME). Полезно для интеграции с внешними сервисами.
- Ingress — не является типом Service, а представляет собой отдельный объект API. Ingress — это более гибкий и мощный способ управлять внешним HTTP/HTTPS доступом, предоставляющий маршрутизацию на основе хостов и путей, SSL/TLS-терминацию. Для работы Ingress требуется контроллер Ingress (например, nginx-ingress, traefik).