Cum să expui aplicații cu Service-uri în Kubernetes — ClusterIP, NodePort, LoadBalancer
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
ClusterIPpentru comunicare internă între servicii. - Folosește
NodePortdoar pentru testare sau medii mici. - Folosește
LoadBalancerîn cloud (AWS, GCP, Azure) pentru expunere publică. - Potrivește
selectorcu label-urile Pod-urilor țintă.
Greșeli Comune
- Selector greșit — Service-ul nu găsește Pod-uri dacă label-urile nu se potrivesc.
- Port mismatch —
targetPorttrebuie să fie portul container-ului, nu portul Service-ului. - NodePort în afara range-ului — Portul trebuie să fie între 30000-32767.
- LoadBalancer fără provider cloud —
EXTERNAL-IPrămâne<pending>în medii on-premise. - 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
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