Aislar cargas de trabajo con espacios de nombres (Namespaces)

KubernetesKubernetesIntermediate
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Kubernetes ofrece espacios de nombres (namespaces) como una forma de aislar las cargas de trabajo y los recursos en un clúster. En este laboratorio, aprenderá cómo utilizar los espacios de nombres para aislar las cargas de trabajo y los recursos. Creará un espacio de nombres, desplegará una aplicación web simple en el espacio de nombres y verificará que la aplicación web está aislada de los demás recursos en el clúster.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} kubernetes/get -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} kubernetes/create -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} kubernetes/expose -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} kubernetes/apply -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} kubernetes/describe -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} kubernetes/exec -.-> lab-9199{{"Aislar cargas de trabajo con espacios de nombres (Namespaces)"}} end

Iniciar el clúster de Minikube

Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de proyecto predeterminada:

    cd /home/labex/project
  2. Iniciar 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.
  3. Verificar que Minikube está en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.

Crear un espacio de nombres (namespace)

En este paso, crearás un espacio de nombres llamado webapp para aislar la aplicación web de los demás recursos en el clúster.

Crea un archivo llamado namespace.yaml con el siguiente contenido:

apiVersion: v1
kind: Namespace
metadata:
  name: webapp

Aplica el espacio de nombres a tu clúster con el siguiente comando:

kubectl apply -f namespace.yaml

Verifica que el espacio de nombres se haya creado con el siguiente comando:

kubectl get namespaces

Debes ver el espacio de nombres webapp en la lista de espacios de nombres.

Desplegar una aplicación web

En este paso, desplegarás una aplicación web simple en el espacio de nombres (namespace) webapp.

Crea un archivo llamado web-app.yaml con el siguiente contenido:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Este archivo crea un Despliegue (Deployment) con una réplica de un contenedor que ejecuta la última versión del servidor web Nginx.

Aplica el Despliegue a tu clúster con el siguiente comando:

kubectl apply -f web-app.yaml

Verifica que la aplicación web esté en ejecución en el espacio de nombres webapp con el siguiente comando:

kubectl get pods -n webapp

Debes ver el pod web-app en la lista de pods en ejecución en el espacio de nombres webapp.

Exponer la aplicación web

En este paso, expondrás la aplicación web al mundo exterior utilizando un Servicio (Service) de Kubernetes.

Crea un archivo llamado web-app-service.yaml con el siguiente contenido:

apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: webapp
spec:
  selector:
    app: web-app
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

Este archivo crea un Servicio que expone la aplicación web al clúster utilizando una dirección IP de clúster (ClusterIP).

Aplica el Servicio a tu clúster con el siguiente comando:

kubectl apply -f web-app-service.yaml

Verifica que el Servicio esté en ejecución en el espacio de nombres (namespace) webapp con el siguiente comando:

kubectl get services -n webapp

Debes ver el servicio web-app en la lista de servicios en ejecución en el espacio de nombres webapp.

Verificar el aislamiento del espacio de nombres (namespace)

En este paso, verificarás que la aplicación web está aislada de los demás recursos en el clúster.

Crea un archivo llamado other-app.yaml con el siguiente contenido:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: other
spec:
  replicas: 1
  selector:
    matchLabels:
      app: other
  template:
    metadata:
      labels:
        app: other
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

En este archivo, estás creando otro Despliegue (Deployment) llamado other en el espacio de nombres predeterminado (default namespace) que ejecuta un contenedor con la imagen nginx.

Aplica el Despliegue a tu clúster con el siguiente comando:

kubectl apply -f other-app.yaml

Verifica que el Despliegue esté en ejecución en el espacio de nombres predeterminado con el siguiente comando:

kubectl get pods | grep other

Debes ver el pod other en la lista de pods en ejecución en el espacio de nombres predeterminado.

Verificar el acceso entre espacios de nombres (cross-namespace access)

Primero, encuentra el nombre del pod que está ejecutando tu aplicación ejecutando el siguiente comando:

kubectl get pods -l app=other

Debes ver el pod other. Anota el nombre del pod.

A continuación, ejecuta el siguiente comando para abrir una sesión de shell en el contenedor que está ejecutando tu aplicación:

kubectl exec -it pod-name -- /bin/sh

Reemplaza <pod-name> con el nombre del pod que anotaste anteriormente.

Una vez que estés en la sesión de shell, ejecuta el siguiente comando para acceder al Despliegue (Deployment) web-app:

curl web-app.webapp

Debes ver la respuesta HTML del servidor web Nginx.

Resumen

En este laboratorio, aprendiste cómo usar espacios de nombres (namespaces) para aislar cargas de trabajo y recursos en un clúster de Kubernetes. Creaste un espacio de nombres, desplegaste una aplicación web simple en ese espacio de nombres, expusiste la aplicación web al mundo exterior utilizando un Servicio (Service) de Kubernetes y verificaste que la aplicación web está aislada de los demás recursos en el clúster.