Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Kubeconfigs

Recurso Kubeconfig

Kubeconfig es un recurso de Rancher kubeconfigs.ext.cattle.io que permite generar v1.Config archivos kubeconfig para interactuar con Rancher y clústeres gestionados por Rancher.

kubectl api-resources --api-group=ext.cattle.io

Para obtener una descripción de los campos y la estructura del recurso Kubeconfig, ejecuta:

kubectl explain kubeconfigs.ext.cattle.io

Creando un Kubeconfig

Desde Rancher v2.13, status.bearerToken contiene un token Bearer completamente formado y listo para usar que se puede utilizar para autenticar en la API de Rancher.

Solo un usuario de Rancher válido y activo puede crear un Kubeconfig. Por ejemplo, intentar crear un Kubeconfig utilizando una system:admin cuenta de servicio lleva a un error:

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
EOF
Error from server (Forbidden): error when creating "STDIN": kubeconfigs.ext.cattle.io is forbidden: user system:admin is not a Rancher user

El contenido de kubeconfig se genera y se devuelve en el campo .status.value solo una vez cuando Kubeconfig se crea con éxito porque contiene valores secretos para los tokens creados. Por lo tanto, debe ser capturado utilizando una opción de salida apropiada, como -o jsonpath='{.status.value}', o -o yaml.

Se puede crear un kubeconfig para más de un clúster a la vez especificando una lista de nombres de clúster en el campo spec.clusters. Puedes buscar nombres de clúster listando recursos clusters.management.cattle.io.

kubectl get clusters.management.cattle.io -o=jsonpath="{.items[*]['metadata.name', 'spec.displayName']}{'\n'}"
local local
c-m-p66cdvlj downstream1

Los campos metadata.name y metadata.generateName se ignoran, y el nombre del nuevo Kubeconfig se genera automáticamente utilizando el prefijo kubeconfig-.

Puedes usar el campo spec.currentContext para establecer el nombre del clúster, y se utiliza para establecer el contexto actual en el kubeconfig. Si no estableces el campo spec.currentContext, entonces se utiliza el primer clúster en la lista spec.clusters como el contexto actual. Para clústeres habilitados para ACE que no tienen un FQDN establecido, se utiliza el primer nodo del plano de control como el contexto actual.

Para clústeres habilitados para ACE, si se establece el FQDN, entonces se utiliza como una entrada de clúster en el kubeconfig; de lo contrario, se crean entradas para todos los nodos del plano de control.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: [c-m-p66cdvlj, c-m-fcd3g5h]
  description: My Kubeconfig
  currentContext: c-m-p66cdvlj
EOF

Si "*" se especifica como el primer elemento en el campo spec.clusters, el kubeconfig se crea para todos los clústeres a los que el usuario tiene acceso, si los hay.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: ["*"]
  description: My Kubeconfig
EOF

Si spec.ttl no se especifica, los tokens del Kubeconfig se crean con el tiempo de expiración definido en la configuración kubeconfig-default-token-ttl-minutes, que es de 30 días por defecto. Si se especifica spec.ttl, debe ser mayor que 0 y menor o igual al valor de la configuración kubeconfig-default-token-ttl-minutes expresado en segundos.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: [c-m-p66cdvlj] # Downstream cluster
  ttl: 7200 # 2 hours
EOF

Listando Kubeconfigs

Listar Kubeconfigs generados previamente puede ser útil para limpiar tokens de respaldo si el Kubeconfig ya no es necesario (por ejemplo, si fue emitido temporalmente). Los administradores pueden listar todos los Kubeconfigs, mientras que los usuarios regulares solo pueden ver los suyos.

kubectl get kubeconfig
NAME               TTL   TOKENS   STATUS     AGE
kubeconfig-zp786   30d   2/2      Complete   18d
kubeconfig-7zvzp   30d   1/1      Complete   12d
kubeconfig-jznml   30d   1/1      Complete   12d

Usa -o wide para obtener más detalles:

kubectl get kubeconfig -o wide
NAME               TTL   TOKENS   STATUS     AGE     USER         CLUSTERS       DESCRIPTION
kubeconfig-zp786   30d   2/2      Complete   18d     user-w5gcf   *              all clusters
kubeconfig-7zvzp   30d   1/1      Complete   12d     u-w7drc      *
kubeconfig-jznml   30d   1/1      Complete   12d     u-w7drc      *

Viendo un Kubeconfig

Los administradores pueden obtener cualquier Kubeconfig, mientras que los usuarios regulares solo pueden obtener el suyo.

kubectl get kubeconfig kubeconfig-zp786
NAME               TTL   TOKENS   STATUS     AGE
kubeconfig-zp786   30d   2/2      Complete   18d

Usa -o wide para obtener más detalles:

kubectl get kubeconfig kubeconfig-zp786 -o wide
NAME               TTL   TOKENS   STATUS     AGE     USER         CLUSTERS       DESCRIPTION
kubeconfig-zp786   30d   2/2      Complete   18d     user-w5gcf   *              all clusters

Eliminando un Kubeconfig

Los administradores pueden eliminar cualquier Kubeconfig, mientras que los usuarios regulares solo pueden eliminar el suyo. Cuando se elimina un Kubeconfig, los tokens de kubeconfig también se eliminan.

kubectl delete kubeconfig kubeconfig-zp786
kubeconfig.ext.cattle.io "kubeconfig-zp786" deleted

Para eliminar un Kubeconfig usando precondiciones:

cat <<EOF | k delete --raw /apis/ext.cattle.io/v1/kubeconfigs/kubeconfig-zp786 -f -
{
  "apiVersion": "v1",
  "kind": "DeleteOptions",
  "preconditions": {
    "uid": "52183e05-d382-47d2-b4b9-d0735823ce90",
    "resourceVersion": "31331505"
  }
}
EOF

Eliminando una colección de Kubeconfigs

Los administradores pueden eliminar cualquier Kubeconfig, mientras que los usuarios regulares solo pueden eliminar el suyo.

Para eliminar todos los Kubeconfigs:

kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs

Para eliminar una colección de Kubeconfigs por etiqueta:

kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs?labelSelector=foo%3Dbar

Actualizando un Kubeconfig

Solo se pueden actualizar el metadata, por ejemplo, añadiendo una etiqueta o una anotación, y el campo spec.description. Todos los demás campos spec son inmutables.

Para editar un Kubeconfig:

kubectl edit kubeconfig kubeconfig-zp786

Para aplicar un parche a un Kubeconfig y actualizar su descripción:

kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"spec":{"description":"Updated description"}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched

kubectl get kubeconfig kubeconfig-fdcpl -o jsonpath='{.spec.description}'
Updated description

Para aplicar un parche a un Kubeconfig y añadir una etiqueta:

kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"metadata":{"labels":{"foo":"bar"}}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched

kubectl get kubeconfig kubeconfig-zp786 -o jsonpath='{.metadata.labels.foo}'
bar