Introducción
En Kubernetes, los Pods son efímeros y pueden ser eliminados y recreados en cualquier momento. Esto presenta un desafío en cuanto a la red, ya que es difícil conectarse a un Pod directamente. Para resolver este problema, Kubernetes proporciona una abstracción de nivel superior llamada Servicio. Un Servicio ofrece una dirección IP estable y un nombre DNS para un conjunto de Pods, lo que permite que otros componentes se conecten a ellos fácilmente. En este laboratorio, aprenderás a conectar Pods mediante Servicios en Kubernetes.
Iniciar el clúster de Minikube
Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno de Kubernetes ligero que se ejecuta en tu máquina local.
Navega a tu directorio de trabajo:
Abre la terminal y dirígete a la carpeta del proyecto predeterminada:
cd /home/labex/projectInicia Minikube:
Inicia Minikube para inicializar un clúster de Kubernetes:
minikube start- Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
- Minikube puede tardar unos minutos en iniciarse dependiendo del rendimiento de tu sistema.
Verifica que Minikube esté en ejecución:
Comprueba el estado del clúster de Minikube:
minikube status- Busca componentes como
kubeletyapiserverque aparezcan comoRunning. - Si el clúster no está en ejecución, vuelve a ejecutar
minikube start.
- Busca componentes como
Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.
Crear un Pod
El primer paso es crear un Pod sencillo. Crea un archivo llamado /home/labex/project/myapp-pod.yaml con el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: my-pod-1
labels:
app: nginx
spec:
containers:
- name: my-container
image: nginx
Guarda el archivo y crea el Pod ejecutando el siguiente comando:
minikube kubectl -- apply -f /home/labex/project/myapp-pod.yaml
Esto creará un Pod llamado my-pod-1 con un único contenedor ejecutando la imagen de Nginx.
Crear un Servicio
El segundo paso es crear un Servicio que apunte al Pod que creaste en el paso anterior. Crea un archivo llamado /home/labex/project/service.yaml con el siguiente contenido:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
Guarda el archivo y crea el Servicio ejecutando el siguiente comando:
minikube kubectl -- apply -f /home/labex/project/service.yaml
Esto creará un Servicio llamado my-service que apunta a los Pods con la etiqueta app=nginx y expone el puerto 80.
Probar el Servicio
El tercer paso es probar el Servicio accediendo a él desde otro Pod. Crea un archivo llamado /home/labex/project/test-pod-1.yaml con el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: test-pod-1
spec:
containers:
- name: my-container
image: busybox
command:
- sleep
- "3600"
Guarda el archivo y crea el Pod de prueba ejecutando el siguiente comando:
minikube kubectl -- apply -f /home/labex/project/test-pod-1.yaml
Esto creará un Pod llamado test-pod-1 con un único contenedor ejecutando la imagen de Busybox.
A continuación, accede al Servicio desde el Pod de Busybox con wget:
minikube kubectl -- exec test-pod-1 -- wget -qO- http://my-service
Este comando devuelve la página predeterminada de Nginx, lo que indica que el Servicio funciona correctamente.
Actualizar el Servicio
El cuarto paso es actualizar el Servicio para que apunte a un conjunto diferente de Pods. Actualiza el campo selector en el archivo /home/labex/project/service.yaml con lo siguiente:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: busybox
ports:
- name: http
port: 80
targetPort: 80
Guarda el archivo y actualiza el Servicio ejecutando el siguiente comando:
minikube kubectl -- apply -f /home/labex/project/service.yaml
Esto actualizará el Servicio para que apunte a los Pods con la etiqueta app=busybox. En este punto, el Servicio no tiene puntos de conexión (endpoints) porque ninguno de los Pods existentes utiliza esa etiqueta todavía.
Probar el Servicio actualizado
El quinto paso es probar el Servicio actualizado accediendo a él desde otro Pod. Crea un nuevo Pod de prueba con el siguiente comando:
minikube kubectl -- run my-pod-2 --image=busybox --restart=Never -- sleep 3600
Esto creará un nuevo Pod llamado my-pod-2 con un único contenedor ejecutando la imagen de Busybox.
Antes de cambiar cualquier etiqueta, confirma que el Servicio no tiene puntos de conexión coincidentes:
minikube kubectl -- get endpoints my-service
La salida debería mostrar <none> porque ningún Pod tiene actualmente la etiqueta app=busybox.
Esto sucede porque el selector del Servicio ahora busca app=busybox, pero tu Pod del servidor Nginx todavía está etiquetado como app=nginx. Para solucionar esto, vuelve a etiquetar el Pod del servidor original para que el Servicio apunte de nuevo al contenedor de Nginx.
Ejecuta el siguiente comando para actualizar la etiqueta del Pod del servidor:
minikube kubectl -- label pod my-pod-1 app=busybox --overwrite
Esto actualiza la etiqueta en my-pod-1 para que coincida con el selector del Servicio.
Ahora prueba el Servicio de nuevo desde my-pod-2:
minikube kubectl -- exec my-pod-2 -- wget -qO- http://my-service
Este comando debería devolver la página predeterminada de Nginx, lo que indica que el Servicio vuelve a funcionar correctamente.
Resumen
En este laboratorio, aprendiste a conectar Pods mediante Servicios en Kubernetes. Creaste un Pod de Nginx, lo expusiste con un Servicio y probaste dicho Servicio desde Pods cliente de Busybox. También actualizaste el selector del Servicio y volviste a etiquetar el Pod de Nginx original para que el Servicio volviera a apuntar a un servidor web funcional. Los Servicios son un componente esencial de la red en Kubernetes y te permiten conectarte a los Pods de una manera fiable y escalable.


