Skip to content

Cum să expui aplicații cu Service-uri în Kubernetes — ClusterIP, NodePort, LoadBalancer

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să expui aplicații cu Service. We cover key concepts, practical examples, and best practices.

Problema

Ai un Deployment cu Pod-uri care rulează, dar nu poți accesa aplicația din afara clusterului sau alte Pod-uri nu pot comunica cu ea.

Soluția Pas cu Pas

1. Creează un Service de tip ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
kubectl apply -f service-clusterip.yaml

Output:

service/nginx-service created

2. Verifică Service-ul

kubectl get svc

Output:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)
nginx-service   ClusterIP   10.96.123.45   <none>        80/TCP

3. Expune cu NodePort

apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
kubectl apply -f service-nodeport.yaml

Accesează la http://<IP-nod>:30080.

4. Expune cu LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
kubectl apply -f service-lb.yaml
kubectl get svc nginx-lb -w

Output:

NAME       TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)
nginx-lb   LoadBalancer   10.96.1.1     <pending>     80:31000/TCP

După alocare, EXTERNAL-IP devine adresa IP publică a load balancer-ului.

5. Testează comunicarea între Pod-uri

kubectl run test --image=busybox -it --rm -- nslookup nginx-service

Prevenție

  • Folosește ClusterIP pentru comunicare internă între servicii.
  • Folosește NodePort doar pentru testare sau medii mici.
  • Folosește LoadBalancer în cloud (AWS, GCP, Azure) pentru expunere publică.
  • Potrivește selector cu label-urile Pod-urilor țintă.

Greșeli Comune

  1. Selector greșit — Service-ul nu găsește Pod-uri dacă label-urile nu se potrivesc.
  2. Port mismatchtargetPort trebuie să fie portul container-ului, nu portul Service-ului.
  3. NodePort în afara range-ului — Portul trebuie să fie între 30000-32767.
  4. LoadBalancer fără provider cloudEXTERNAL-IP rămâne <pending> în medii on-premise.
  5. Service fără Pod-uri ready — Service-ul nu va direcționa trafic către Pod-uri nestaționate.

Exercițiu

Creează un Deployment cu 3 replici, expune-l cu un Service ClusterIP, verifică rezolvarea DNS dintr-un Pod de test, apoi schimbă tipul la NodePort.

FAQ

### Ce tip de Service să folosesc pentru comunicare internă?

ClusterIP. Este tipul implicit și expune Service-ul doar în interiorul clusterului.

Cum obțin o adresă IP publică?

Folosește type: LoadBalancer. În cloud, provider-ul creează automat un load balancer cu IP public.

Pot accesa un Service ClusterIP din exterior?

Nu direct. Folosește kubectl port-forward svc/nginx-service 8080:80 pentru acces temporar din exterior.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează seamless cu Kubernetes pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro