Servicios

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 serviciospods son laefímeros maneray sus IPs pueden cambiar, por lo que tieneun KubernetesService actúa como un punto fijo de exponerentrada que redirige el tráfico a los serviciospods correctos, incluso si estos son recreados o se mueven a otro nodo.
Funciones principales de redun deservicio:
-
Existen tres tipos de servicios ClusterIP, NodePortDescubrimiento y
LoadBalancer.Los tres tipos de servicio aportan una IP interna del cluster de Kubernetes,balanceo de carga:y-
resolverDistribuye automáticamente el tráfico entre los pods que coincidan con el selector definido.
permiten -
-
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.
-
-
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:
-
ClusterIP (por defecto):
-
Expone el servicio
porinternamentenombre (DNS) con una URLdentro deltipoclúster.‘.namespace.svc.cluster.local'.No es accesible desde fuera.
-
-
LosNodePort:servicios-
tipo ‘NodePort' además también aportanAbre un puerto
públicoenaccesiblecadadesde fueranodo delcluster.clústerLosyserviciosredirigedeleltipotráfico‘LoadBalancer'asololosestánpods.disponible
del -
-
LoadBalancer:
-
Crea un balanceador de carga externo (si el clúster está en
algunaunanubes públicasnube comoGoogle,AWS,etc.GCP, Azure) yaportanlotambiénconectaunaalIP pública.servicio.
-
-
ExternalName:
-
No redirige tráfico, pero mapea un nombre DNS interno a un nombre DNS externo.
-
Ejemplo de servicioun "NodePortService" paratipo la app: web. Modifica el fichero "myapp.yml" añadiendo:NodePort
---
apiVersion: v1
kind: Service
metadata:
name: service1myservice
spec:
type: NodePort
selector:
app: webmyapp
ports:
- protocol: TCP
port: 80
targetPort: 80
Funcionamiento
-
El selector
app: myapphace que este Service envíe tráfico a todos los pods que tengan la etiquetaapp=myapp. -
El puerto
80del Service se mapea al puerto80del pod (targetPort).
# AplicaCrea o aplica los cambios
kubectl apply -f myapp.ymlyaml
# 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