Organizar el acceso a los clústeres utilizando archivos kubeconfig
Utilice los archivos kubeconfig para organizar la información acerca de los clústeres, los
usuarios, los Namespaces y los mecanismos de autenticación. La herramienta de
línea de comandos kubectl
utiliza los archivos kubeconfig para hallar la información que
necesita para escoger un clúster y comunicarse con el servidor API de un clúster.
kubeconfig
.
Por defecto, kubectl
busca un archivo llamado config
en el directorio $HOME/.kube
.
Puedes especificar otros archivos kubeconfig mediante la configuración de la variable
de entorno KUBECONFIG
o mediante la configuracion del flag
--kubeconfig
.
Para obtener instrucciones paso a paso acerca de cómo crear y especificar los archivos kubeconfig, consulte el recurso Configurar El Acceso A Múltiples Clústeres.
Compatibilidad con múltiples clústeres, usuarios y mecanismos de autenticación
Suponga que tiene diversos clústeres y que sus usuarios y componentes se autentican de diversas maneras. Por ejemplo:
- Un kubelet en ejecución se podría autenticar usando certificados.
- Un usuario se podría autenticar utilizando tokens.
- Los administradores podrían tener un conjunto de certificados que sean suministrados a los usuarios individualmente.
Con los archivos kubeconfig puedes organizar tus clústeres, usuarios y Namespaces. También puedes definir diferentes contextos para realizar de forma rápida y fácil cambios entre clústeres y Namespaces.
Contexto
Un elemento context en un archivo kubeconfig se utiliza para agrupar los parámetros de
acceso bajo un nombre apropiado. Cada contexto tiene tres parámetros: clúster, Namespace
y usuario.
Por defecto, la herramienta de línea de comandos kubectl
utiliza los parámetros del
contexto actual para comunicarse con el clúster.
Para seleccionar el contexto actual:
kubectl config use-context
Variable de entorno KUBECONFIG
La variable de entorno KUBECONFIG
contiene una lista de archivos kubeconfig.
En el caso de Linux y Mac, la lista está delimitada por dos puntos. Si se trata
de Windows, la lista está delimitada por punto y coma. La variable de entorno
KUBECONFIG
no es indispensable. Si la variable de entorno KUBECONFIG
no existe,
kubectl
utiliza el archivo kubeconfig por defecto $HOME/.kube/config
.
Si la variable de entorno KUBECONFIG
existe, kubectl
utiliza una
configuración eficiente que es el resultado de la fusión de los archivos
listados en la variable de entorno KUBECONFIG
.
Fusionando archivos kubeconfig
Para poder ver su configuración, escriba el siguiente comando:
kubectl config view
Como se ha descrito anteriormente, la respuesta de este comando podría resultar a partir de un solo archivo kubeconfig, o podría ser el resultado de la fusión de varios archivos kubeconfig.
A continuación se muestran las reglas que usa kubectl
cuando fusiona archivos kubeconfig:
-
Si el flag
--kubeconfig
está activado, usa solamente el archivo especificado. Sin fusionar. Sólo se permite una instancia con este flag.En caso contrario, si la variable de entorno
KUBECONFIG
está activada, sera usada como un listado de los archivos a ser fusionados. Fusionar los archivos listados en la variable de entornoKUBECONFIG
de acuerdo con estas reglas:- Ignorar nombres de archivo vacíos.
- Producir errores para archivos con contenido que no pueden ser deserializados.
- El primer archivo que establezca un valor particular o una clave se impone.
- Nunca cambie el valor o la clave.
Ejemplo: Conserva el contexto del primer archivo para configurar el
contexto actual
. Ejemplo: Si dos archivos especifican unred-user
, utilice sólo los valores del primer archivo. Incluso desechar el segundo archivo aunque tenga registros que no tengan conflictos.
Para obtener un ejemplo de configuración de la variable de entorno
KUBECONFIG
, consulte la sección Configuración de la variable de entorno KUBECONFIG.En caso contrario, utilice el archivo kubeconfig predeterminado
$HOME/.kube/config
, sin fusionar. -
Determinar el contexto a utilizar con base en el primer acierto en esta secuencia:
- Si es que existe, utilice el flag
---contexto
de la línea de comandos. - Utilice el
contexto actual
procedente de los archivos kubeconfig fusionados.
En este punto se permite un contexto vacío.
- Si es que existe, utilice el flag
-
Determinar el clúster y el usuario. En este caso, puede o no haber un contexto. Determine el clúster y el usuario con base en el primer acierto que se ejecute dos veces en esta secuencia: una para el usuario y otra para el clúster:
- Si es que existen, utilice el flag
--user
o--cluster
de la línea de comandos. - Si el contexto no está vacío, tome el usuario o clúster del contexto.
En este caso el usuario y el clúster pueden estar vacíos.
- Si es que existen, utilice el flag
-
Determinar la información del clúster a utilizar. En este caso, puede o no haber información del clúster. Se construye cada pieza de la información del clúster con base en esta secuencia, el primer acierto se impone:
- Si es que existen, use el flag
--server
,--certificate-authority
,--insecure-skip-tls-verify
en la línea de comandos. - Si existen atributos de información de clúster procedentes de los archivos kubeconfig fusionados, utilícelos.
- Falla si no existe la ubicación del servidor.
- Si es que existen, use el flag
-
Determinar la información del usuario a utilizar. Cree información de usuario utilizando las mismas reglas que la información de clúster, con la excepción de permitir sólo un mecanismo de autenticación por usuario:
- Si es que existen, utilice el flag
--client-certificate
,--client-key
,--username
,--password
,--token
de la línea de comandos. - Utilice los campos
user
de los archivos kubeconfig fusionados. - Falla si hay dos mecanismos de autenticación contradictorios.
- Si es que existen, utilice el flag
-
Si todavía falta información, utilice los valores predeterminados y solicite información de autenticación.
Referencias de archivos
Las referencias, así también como, las rutas de un archivo kubeconfig son relativas a la ubicación del archivo kubeconfig.
Las referencias de un archivo en la línea de comandos son relativas al directorio actual de trabajo.
Dentro de $HOME/.kube/config
, las rutas relativas se almacenan de manera relativa a la ubicación del archivo kubeconfig , al igual que las rutas absolutas
se almacenan absolutamente.