Kubeconfig

El archivo kubeconfig es un archivo de configuración utilizado por Kubernetes para almacenar información sobre cómo conectarse a un clúster de Kubernetes. Este archivo contiene los detalles necesarios para que las herramientas de línea de comandos, como kubectl, puedan interactuar con uno o varios clústeres de Kubernetes.

¿Qué contiene un kubeconfig?

El archivo kubeconfig suele incluir la siguiente información:

  1. Clusters: Contiene información sobre los clústeres Kubernetes a los que puedes conectarte, como la URL del servidor de la API de Kubernetes y los certificados SSL para la conexión.

  2. Usuarios (Contexts): Define los diferentes usuarios que pueden interactuar con el clúster. Incluye la información de autenticación, como tokens de acceso, certificados, o claves privadas.

  3. Contextos (Contexts): Un contexto en el kubeconfig define una combinación de un clúster, un usuario y un espacio de nombres (namespace). Al cambiar el contexto, puedes especificar qué clúster, usuario y namespace debe usarse para interactuar con Kubernetes.

  4. Namespaces: El namespace predeterminado en el que se ejecutarán los comandos de kubectl, a menos que se especifique otro.

¿Cómo se usa el archivo kubeconfig?

  1. Ubicación del archivo kubeconfig:

    • De manera predeterminada, el archivo kubeconfig suele estar ubicado en ~/.kube/config en sistemas Linux y macOS, o C:\Users\TU_USUARIO\.kube\config en Windows.
    • Si tienes varios clústeres, puedes tener múltiples archivos kubeconfig y especificar cuál usar.
  2. Comando kubectl y kubeconfig: Cuando usas kubectl para interactuar con un clúster de Kubernetes, kubectl busca el archivo kubeconfig para obtener los detalles necesarios para conectarse al clúster. Si tienes varios clústeres configurados en el archivo kubeconfig, puedes cambiar entre ellos usando diferentes contextos.

  3. Cambiar de contexto: Puedes cambiar el contexto (es decir, clúster, usuario y namespace) con el siguiente comando:

    kubectl config use-context <nombre_del_contexto>
    

    Para ver los contextos disponibles:

    kubectl config get-contexts
    
  4. Especificar un archivo kubeconfig personalizado: Si tienes múltiples archivos de configuración, puedes especificar cuál usar con el comando:

    kubectl --kubeconfig=/ruta/al/archivo/config get pods
    

Ejemplo de un archivo kubeconfig:

apiVersion: v1
kind: Config
clusters:
- name: my-cluster
  cluster:
    server: https://my-cluster-endpoint:6443
    certificate-authority-data: <certificado-base64>
contexts:
- name: my-context
  context:
    cluster: my-cluster
    user: my-user
    namespace: default
current-context: my-context
users:
- name: my-user
  user:
    client-certificate-data: <certificado-base64>
    client-key-data: <clave-base64>

Campos principales:

  • clusters: Lista de clústeres a los que puedes conectarte. Incluye el endpoint del clúster y, opcionalmente, los certificados.
  • contexts: Combinaciones de clúster, usuario y namespace. Define a qué clúster conectarse, con qué usuario y en qué namespace ejecutar los comandos.
  • users: Información de autenticación, como certificados o tokens para acceder a los clústeres.
  • current-context: El contexto actual que kubectl usará para las operaciones.

Uso común de kubeconfig:

  1. Acceso a múltiples clústeres: Si trabajas con varios clústeres de Kubernetes (por ejemplo, entornos de desarrollo, prueba y producción), puedes usar un archivo kubeconfig para definir la configuración de cada uno y cambiar entre ellos fácilmente.

  2. Autenticación y autorización: El kubeconfig maneja los detalles de autenticación, como certificados y tokens, que aseguran que los usuarios y herramientas que interactúan con el clúster estén autorizados para hacerlo.

  3. Gestión de entornos: Los equipos que trabajan en diferentes entornos (dev, staging, prod) usan kubeconfig para gestionar configuraciones complejas de clústeres y permisos.

Resumen:

El archivo kubeconfig es una pieza fundamental para cualquier administrador o usuario de Kubernetes, ya que permite definir cómo conectarse, autenticar y gestionar clústeres de Kubernetes de forma segura. Con él, puedes gestionar múltiples clústeres, usuarios y contextos de manera flexible y eficiente, y es esencial para el uso del comando kubectl y otras herramientas relacionadas con Kubernetes.

Ejemplo de comando kubectl config

kubectl config set-credentials myself --username=admin --password=secret
kubectl config set-cluster local-server --server=http://localhost:8080
kubectl config set-context default-context --cluster=local-server --user=myself
kubectl config use-context default-context
kubectl config set contexts.default-context.namespace the-right-prefix
kubectl config view

YAML de configuración resultante (kubeconfig)

apiVersion: v1
clusters:
- cluster:
    server: http://localhost:8080
  name: local-server
contexts:
- context:
    cluster: local-server
    namespace: the-right-prefix
    user: myself
  name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: myself
  user:
    password: secret
    username: admin

Este es un ejemplo de cómo se configura un clúster de Kubernetes, un contexto y un usuario, y cómo se selecciona el contexto a utilizar para trabajar con kubectl.

Como cambiar el current-context

Ver por completo el fichero config de .kube

kubectl config view
kubectl config view -o json

Podemos ver el contexto actual con:

kubectl config current-context

Cambiar el contexto:

kubectl config use-context otro-contexto

Agregando o modificando un nuevo cluter nuestro config

Si existe lo modifica, si no existe lo crea.

kubectl config set-cluster nombre-cluster --server=http://192.100.120.2

Si hacemos

kubectl config view

Veremos que se agrego el nuevo cluster.

Crear nuevo fichero para config de cluster

Si lo que buscamos es crear un fichero nuevo con las configuraciones del cluster podemos hacer uso del flag --kubeconfig

kubectl --kubeconfig=config_fichero config set-cluster nombre-cluster --server=http://120.2.2.4
  • La IP del servidor API depende de cómo se haya configurado tu clúster.
  • Puede ser una IP pública (para clústeres en la nube o expuestos a internet) o una IP local (para clústeres locales o on-premises). Esta puede ser una dirección interna de la red local (como 192.168.x.x) o una dirección pública si el servidor está expuesto a internet.
  • Debes configurar correctamente esta IP en el comando kubectl para que pueda conectarse al servidor Kubernetes adecuado.
  • Si tu clúster está configurado en un servidor físico o virtual (on-premises), la IP será la de la máquina que aloja Esta puede ser una dirección interna de la red local (como 192.168.x.x) o una dirección pública si el servidor está expuesto a internet.

Al hacer ls veremos que el archivo se creo correctamente

# Establecer el clúster
kubectl --kubeconfig=config_fichero config set-cluster my-cluster --server=http://120.2.2.4

# Agregar las credenciales del usuario
kubectl --kubeconfig=config_fichero config set-credentials my-user --username=admin --password=secret

# Crear el contexto que asocia el clúster y el usuario
kubectl --kubeconfig=config_fichero config set-context my-context --cluster=my-cluster --user=my-user

# Usar el contexto recién creado
kubectl --kubeconfig=config_fichero config use-context my-context

Actualizando el contexto con un certificado :

kubectl --kubeconfig=config_fichero config set-cluster my-cluster --server=https://120.2.2.4 --certificate-authority=/etc/kubernetes/ca.crt

Este comando agrega o actualiza el clúster llamado my-cluster en el archivo de configuración config_fichero, y asocia ese clúster con el servidor https://120.2.2.4 y el archivo CA especificado.