Service в Kubernetes — абстракция "стабильная точка входа в группу Pod'ов". Pod'ы эфемерны (умирают, пересоздаются с новыми IP), а Service имеет стабильный ClusterIP и DNS-имя (`my-service.my-namespace.svc.cluster.local`). Другие Pod'ы обращаются к Service, тот балансирует между живыми Pod'ами по label-selector.
Типы: (1) ClusterIP (default) — только внутри кластера, для inter-service связи. (2) NodePort — открывает порт на всех нодах (30000-32767), для dev/staging. (3) LoadBalancer — cloud provisions внешний LB (у Hetzner Cloud LB €5/мес). (4) Headless (clusterIP: None) — не даёт IP, DNS резолвится в список Pod IP (для stateful workload — Postgres cluster).
Endpoints — Service связывается с Pod'ами через label-selector. При обновлении labels endpoints перезаполняются автоматически. `kubectl get endpoints my-service` показывает текущие Pod IPs.
Внешний трафик HTTP — не через LoadBalancer Service (дорого — 1 LB на 1 сервис), а через Ingress (nginx-ingress / Traefik / Istio) — единая точка входа с host/path-routing. `Service` при этом внутренний ClusterIP.