Skip to main content

Namespaces

image.png

Los namespaces en Kubernetes son una forma de aislar y organizar recursos dentro de un mismo clúster.

Piensa en ellos como "espacios de trabajo" o "compartimentos" virtuales donde puedes tener recursos que no interfieren entre sí, aunque tengan el mismo nombre.

Utilidad

  1. Separar entornos: Puedes tener un namespace para desarrollo, otro para testing y otro para producción dentro del mismo clúster.

  2. Evitar conflictos de nombres: Puedes tener un Deployment llamado web-app en dos namespaces diferentes sin que choquen entre ellos.

  3. Aplicar políticas y límites:

    • Puedes aplicar quotas de recursos por namespace (CPU, memoria).

    • Puedes definir reglas de seguridad o control de acceso (RBAC) por namespace.

  4. Facilitar la administración: En clústeres grandes, los namespaces ayudan a que los equipos trabajen de manera aislada y organizada.


Namespaces por defecto
  • default: Namespace por defecto donde se crean los recursos si no especificas otro.

  • kube-system: Recursos internos del sistema de Kubernetes (DNS, kube-proxy, etc.).

  • kube-public: Datos accesibles de forma pública dentro del clúster (rara vez se usa directamente).

  • kube-node-lease: Namespace para gestionar heartbeats de los nodos (para detectar si un nodo está vivo).

Comandos para trabajar con Namespaces:

# Devuelve el listado de namespaces
kubectl get namespaces

# Crea un namespace
kubectl create namespace <nombre>

# Especifical el namespace en el cliente kubectl
kubectl apply -f pod.yaml --namespace=<nombre>

# Establecer un determinado namespace como predeterminado
kubectl config set-context --current -–namespace=<nombre>

Definir un namespace dentro de un YAML

metadata:
  name: myapp
  namespace: desarrollo