Skip to content

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.

Extra

Esto es útil si no tienes un LoadBalancer real pero quieres exponer el servicio desde fuera:

1
2
3
4
spec:
  type: ClusterIP
  externalIPs:
  - 192.168.1.100

Hará que el tráfico hacia esa IP externa se enrute al Service.