Services

Services

Pody vznikají a zanikají a jejich IP se mění. Service je stabilní adresa před nimi, se zabudovaným rozkládáním zátěže.

graph LR C[Klient] --> S[Service nginx-svc<br/>ClusterIP 10.96.x.x] S --> P1[Pod 10.244.1.5] S --> P2[Pod 10.244.2.7] S --> P3[Pod 10.244.3.9]

Service vybírá pody podle labelů. IP odpovídajících připravených podů skončí v EndpointSlice a kube-proxy podle toho naprogramuje každý uzel.

Typy

TypOdkud je dostupnáPoznámka
ClusterIPjen zevnitř clusteruvýchozí
NodePort<ip-libovolného-uzlu>:30000-32767otevře port na všech uzlech
LoadBalancerzvenčípotřebuje cloud nebo MetalLB – v tomto clusteru není
ExternalNamejen DNS CNAME
spec:
  type: NodePort
  selector:
    app: nginx          # musí odpovídat labelům podů
  ports:
    - port: 8080        # port Service
      targetPort: 80    # port kontejneru
      nodePort: 30080   # port na každém uzlu

DNS

nginx-svc                        # stejný namespace
nginx-svc.dev                    # jiný namespace
nginx-svc.dev.svc.cluster.local  # plně kvalifikované

Headless Services

clusterIP: None znamená žádnou virtuální IP; DNS vrátí přímo adresy podů. Takhle dává StatefulSet každé replice stabilní jméno – viz StatefulSets.

Když to nefunguje

kubectl get endpointslices -l kubernetes.io/service-name=nginx-svc

Žádné endpointy znamenají, že selektor neodpovídá žádnému připravenému podu. Zkontrolujte labely, pak readiness probe, pak targetPort.

Reference