Service
ClusterIP (por defecto)
| ---
apiVersion: v1
kind: Service
metadata:
name: ejemplo-clusterip
namespace: default
labels:
app: mi-app
spec:
type: ClusterIP # Es el tipo por defecto, se puede omitir
selector:
app: mi-app # Selecciona los pods con esta etiqueta
ports:
- name: http
protocol: TCP
port: 80 # Puerto expuesto por el Service
targetPort: 8080 # Puerto del contenedor al que se dirige
---
|
Este Service expone el puerto 80 internamente, y lo redirige al puerto 8080 del contenedor.
NodePort
Accesible desde fuera del clúster, vía IP del nodo + puerto asignado
| ---
apiVersion: v1
kind: Service
metadata:
name: ejemplo-nodeport
namespace: default
spec:
type: NodePort
selector:
app: mi-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080 # Puerto accesible desde fuera (entre 30000-32767)
---
|
Este Service expone el puerto 30080 en cada nodo del clúster, que reenvía al 8080 del contenedor.
LoadBalancer
Proporciona una IP pública externa (si hay un cloud provider o metalLB, etc.)
| ---
apiVersion: v1
kind: Service
metadata:
name: ejemplo-loadbalancer
namespace: default
spec:
type: LoadBalancer
selector:
app: mi-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
---
|
En entornos como GKE, EKS o usando MetalLB, se te asignará una IP externa para este Service.
Esto es útil si no tienes un LoadBalancer real pero quieres exponer el servicio desde fuera:
| spec:
type: ClusterIP
externalIPs:
- 192.168.1.100
|
Hará que el tráfico hacia esa IP externa se enrute al Service.