Skip to main content

Servicios

image.png

Un Service en Kubernetes es un recurso que proporciona una abstracción para exponer y acceder a un conjunto de pods de manera estable y confiable. Los pods son efímeros y sus IPs pueden cambiar, por lo que un Service actúa como un punto fijo de entrada que redirige el tráfico a los pods correctos, incluso si estos son recreados o se mueven a otro nodo.

Funciones principales de un servicio:

  1. Descubrimiento y balanceo de carga:

    • Distribuye automáticamente el tráfico entre los pods que coincidan con el selector definido.

  2. Dirección IP estable:

    • Mientras que los pods tienen IPs dinámicas, el Service proporciona una IP virtual estable (ClusterIP) o un nombre DNS interno.

  3. Exposición de la aplicación:

    • Puede exponer una aplicación internamente dentro del clúster o externamente hacia internet.

Tipos de servicios en Kubernetes:

  1. ClusterIP (por defecto):

    • Expone el servicio internamente dentro del clúster. No es accesible desde fuera.

  2. NodePort:

    • Abre un puerto en cada nodo del clúster y redirige el tráfico a los pods.

  3. LoadBalancer:

    • Crea un balanceador de carga externo (si el clúster está en una nube como AWS, GCP, Azure) y lo conecta al servicio.

  4. ExternalName:

    • No redirige tráfico, pero mapea un nombre DNS interno a un nombre DNS externo.

Ejemplo de un "Service" tipo NodePort
---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  type: NodePort
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Funcionamiento

  • El selector app: myapp hace que este Service envíe tráfico a todos los pods que tengan la etiqueta app=myapp.

  • El puerto 80 del Service se mapea al puerto 80 del pod (targetPort).

# Crea o aplica los cambios
kubectl apply -f myapp.yaml

# comprueba
kubectl get all

NAME        READY   STATUS    RESTARTS   AGE
pod/myapp   1/1     Running   0          15m

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        44h
service/service1     NodePort    10.96.146.193   <none>        80:31926/TCP   15m