CLI de kubelatch¶
Todos los comandos y flags de kubelatch, el cliente para personas. La guía paso a paso está en La CLI; los comandos del binario del servidor (kubelatch-server serve, user …), en la CLI del servidor.
kubelatch login [<url>] [--device] [--ca-file <pem>] [-o <fichero>]
kubelatch logout
kubelatch status
kubelatch kubeconfig [--merge] [--alias <id>=<nombre>]... [-o <fichero>]
kubelatch request --cluster <id> --role <role> (--namespace <ns> | --cluster-wide)
[--for <duration>] --reason <text> [--ticket <ticket>] [--no-wait]
kubelatch request cancel <id>
kubelatch credentials
kubelatch credentials revoke <id>
kubelatch exec-credential
kubelatch version
kubelatch help [<comando>]
Los mensajes están en inglés, como los de kubectl. Los flags pueden ir antes o después de la URL.
kubelatch login¶
Te hace entrar y escribe el kubeconfig. La primera vez necesita la URL de kubelatch; queda guardada y los siguientes logins la reutilizan.
| Flag | Qué hace |
|---|---|
--device |
En vez de abrir el navegador, imprime una URL (<url>/cli/device) y un código del tipo BCDF-GHJK para escribirlo en cualquier navegador donde hayas entrado. Pregunta a kubelatch cada 5 s hasta que alguien lo aprueba; el código dura 10 minutos. |
--ca-file <pem> |
Una CA en la que confiar además de en las del sistema, para un kubelatch con certificado de una CA privada. Queda guardada con la URL. |
-o <fichero> |
Escribe el kubeconfig en ese fichero en vez de en ~/.kube/kubelatch.yaml. |
Sin --device, escucha en un puerto aleatorio de 127.0.0.1, abre el navegador en <url>/cli/approve/<id> (e imprime esa URL, por si el navegador no se abre) y espera hasta 5 minutos la aprobación. La sesión dura lo que diga KUBELATCH_CLI_SESSION_TTL, 12 h por defecto. Un login nuevo revoca la sesión anterior, incluso si es de otro servidor (en ese servidor antiguo, con su CA).
kubelatch logout¶
Revoca en kubelatch la credencial de la sesión y borra session.json. Si no llega a kubelatch, borra igualmente la sesión local y sale con 1: la credencial sigue valiendo hasta que caduque, así que revócala desde la web. Sin sesión imprime Not signed in. y sale con 0.
kubelatch status¶
Servidor, usuario, caducidad de la sesión y una línea por cada cluster al que tienes acceso: el contexto, el nombre del cluster y los permisos (nivel, namespace o whole cluster, y la caducidad de los que la tienen).
Después de los clusters lista tus solicitudes de acceso que aún esperan decisión, cada una con cuánto hace que la pediste, cuándo caduca y su enlace. No imprime nada si no espera ninguna o si el servidor no puede listarlas (edición Free, un servidor más antiguo).
kubelatch kubeconfig¶
Vuelve a escribir los contextos, por ejemplo tras un permiso nuevo.
| Flag | Qué hace |
|---|---|
--merge |
Fusiona en el fichero que diga KUBECONFIG (el primero que exista; el último si no existe ninguno) o en ~/.kube/config, en vez de escribir ~/.kube/kubelatch.yaml. Solo añade o reemplaza los clusters y contextos kubelatch-* y el usuario kubelatch, quita los kubelatch-* de clusters a los que ya no tienes acceso y nunca cambia current-context. Un fichero que no se lee como kubeconfig no se toca. |
--alias <id>=<nombre> |
Llama kubelatch-<nombre> al cluster y contexto del cluster <id>, en vez de kubelatch-<id>. Repetible; --alias <id>= quita el alias. <nombre> cumple ^[a-z0-9]([a-z0-9-]{0,62})$, y dos clusters no pueden acabar con el mismo nombre. Se guarda en aliases.yaml y se aplica en cada ejecución posterior, con o sin --merge; un id sin cluster en tu acceso se conserva y se avisa. Con --merge, las entradas con un alias antiguo se quitan como cualquier otra entrada kubelatch-* obsoleta. |
-o <fichero> |
Escribe ese fichero. Con --merge, fusiona en él. |
El fichero tiene un cluster y un contexto por cluster, kubelatch-<cluster>, que apuntan a <url>/clusters/<cluster>, y el usuario kubelatch con el exec plugin (command: kubelatch, args: [exec-credential], interactiveMode: Never); ningún token. El certificate-authority-data es la CA del propio kubelatch (KUBELATCH_KUBECONFIG_CA) o, si no tiene, la de --ca-file. Sin --merge, current-context es el primer cluster.
kubelatch request¶
En Pro, pide un rol en un cluster durante un tiempo y espera a que alguien decida.
kubelatch request --cluster <id> --role <role> (--namespace <ns> | --cluster-wide)
[--for <duration>] --reason <text> [--ticket <ticket>] [--no-wait]
kubelatch request cancel <id>
| Flag | Qué hace |
|---|---|
--cluster <id> |
El id del cluster. Obligatorio. |
--role <role> |
El rol que pides. Obligatorio. |
--namespace <ns> o --cluster-wide |
Dónde vale el rol. Exactamente uno de los dos. |
--for <duration> |
Cuánto tiempo: duraciones de Go más días (2h, 90m, 1d, 1d12h). Sin él, la duración que propone el formulario web para ese rol, o lo que una prórroga puede sumar todavía cuando es menos. Una prórroga que pide más se rechaza, con lo que sí cabe. |
--reason <text> |
Por qué lo necesitas. Obligatorio. |
--ticket <ticket> |
El ticket que lo respalda, como INC-123. |
--no-wait |
Imprime la solicitud y sale con 0 sin esperar. |
Imprime el enlace de la solicitud y quién decide: los administradores (Waiting for ana or luis to decide.), o los dueños del sitio con él (Waiting for luis, carmen (owners of prod/pagos) or an administrator to decide., que termina en and 3 more pasados 50 nombres), primero los dueños propios del namespace. Después consulta cada 5 segundos hasta que se aprueba, se deniega, caduca o se cancela; Ctrl-C la deja pendiente. La misma orden sobre un permiso directo que ya tienes es una prórroga (Extension of debugger in prod/pagos by 2h). Un rol que el entorno concede sin aprobación se concede al momento (Granted by the rule of staging: …). Si el cluster es nuevo para ti, la última línea te dice que ejecutes kubelatch kubeconfig. kubelatch request cancel <id> retira una solicitud tuya. En Free dice a quién pedir el acceso y sale con 1.
kubelatch credentials¶
Lista tus credenciales: el id (la de la sesión, con un *), nombre, tipo (standard o cli), cluster (all o uno), caducidad, último uso y estado. kubelatch credentials revoke <id> revoca una tuya; si es la de la sesión, la sesión también termina.
kubelatch exec-credential¶
Lo ejecuta kubectl, no tú. Imprime un ExecCredential (client.authentication.k8s.io/v1) con el token y la caducidad de la sesión, sin salir a la red:
{"apiVersion":"client.authentication.k8s.io/v1","kind":"ExecCredential","status":{"expirationTimestamp":"2026-09-28T06:12:00Z","token":"klt_…"}}
Sin una sesión válida sale con 1 e imprime, para que kubectl lo muestre, error: no kubelatch session: run "kubelatch login" o error: the kubelatch session expired: run "kubelatch login".
kubelatch version y kubelatch help¶
version imprime la versión de la release de la que viene el binario, como v0.40.0.
help, y también -h y --help, lista los comandos con un resumen de una línea (exec-credential aparte, porque lo ejecuta kubectl), las variables de entorno y los códigos de salida. kubelatch help <comando>, o kubelatch <comando> -h (también --help), imprime el uso, la descripción, los flags y los ejemplos de ese comando. La ayuda sale con 0; help con un comando desconocido sale con 2.
Un flag o un argumento incorrecto imprime el error y el uso del comando, y sale con 2.
Ficheros y entorno¶
| Nombre | Qué |
|---|---|
~/.config/kubelatch/config.yaml |
La URL y la CA de --ca-file. Modo 0600, en una carpeta 0700. |
~/.config/kubelatch/aliases.yaml |
Los nombres que --alias dio a los contextos: id del cluster a nombre. Solo existe si usas --alias. |
~/.config/kubelatch/session.json |
La sesión: token, id de la credencial, login y caducidad. Modo 0600. Lo borra logout, y cualquier comando que la encuentre caducada o rechazada por kubelatch. |
~/.kube/kubelatch.yaml |
El kubeconfig de login y kubeconfig, sin secretos. |
KUBELATCH_CONFIG_DIR |
Cambia la carpeta de los tres primeros. |
KUBECONFIG |
Dónde escribe kubeconfig --merge. |
Hasta dónde llega el token de la sesión está en el modelo de seguridad.
Códigos de salida y errores¶
| Código | Cuándo |
|---|---|
0 |
El comando terminó bien. |
1 |
Falló: no hay sesión, no se llega a kubelatch, un error de la API. |
2 |
Argumentos no válidos o comando desconocido. |
3 |
kubelatch request: la solicitud se denegó. |
4 |
kubelatch request: la solicitud caducó o se canceló. |
Mensajes habituales:
| Mensaje | Qué significa |
|---|---|
no kubelatch session: run "kubelatch login" |
No has iniciado sesión, o la cerraste. |
the kubelatch session expired: run "kubelatch login" |
Han pasado 12 h (o lo que diga KUBELATCH_CLI_SESSION_TTL). |
the kubelatch session is no longer valid (revoked or expired on the server): run "kubelatch login" |
Se revocó la credencial desde la web o se deshabilitó tu cuenta. |
the first login needs kubelatch's URL: kubelatch login https://kubelatch.example.com |
Todavía no hay ninguna URL guardada. Código de salida 2. |
cannot reach kubelatch at …: … |
Red o TLS. Con x509: certificate signed by unknown authority, vuelve a entrar con --ca-file. |
refusing plain http to … |
La URL es http:// y no es localhost. |
the login was cancelled in the browser |
Alguien pulsó «Cancelar» en la página de aprobación. |
no approval came from the browser within 5m0s: … |
Nadie lo aprobó a tiempo; vuelve a probar, o usa --device. |
the code expired before anyone approved it: run kubelatch login --device again |
Se agotaron los 10 minutos del código de --device. |
this sign-in request has expired or was already used: run kubelatch login again |
kubelatch ya no conoce la petición: caducó en el servidor o se canceló. |
Binarios¶
Cada release adjunta kubelatch para Linux y macOS en amd64 y arm64: kubelatch_<versión>_<os>_<arch>.tar.gz y kubelatch_<versión>_checksums.txt, compartido con kubelatch-server. Cómo instalarla está en La CLI.