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:
-
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.
-
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.
-
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. -
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
?
-
Ubicación del archivo
kubeconfig
:- De manera predeterminada, el archivo
kubeconfig
suele estar ubicado en~/.kube/config
en sistemas Linux y macOS, oC:\Users\TU_USUARIO\.kube\config
en Windows. - Si tienes varios clústeres, puedes tener múltiples archivos
kubeconfig
y especificar cuál usar.
- De manera predeterminada, el archivo
-
Comando
kubectl
ykubeconfig
: Cuando usaskubectl
para interactuar con un clúster de Kubernetes,kubectl
busca el archivokubeconfig
para obtener los detalles necesarios para conectarse al clúster. Si tienes varios clústeres configurados en el archivokubeconfig
, puedes cambiar entre ellos usando diferentes contextos. -
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
-
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
:
-
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. -
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. -
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.