Errores¶
Los códigos y mensajes que devuelve kubelatch, qué significan y qué hacer con cada uno. Los mensajes están en español y se muestran tal cual en kubectl y en la interfaz.
Errores del proxy¶
El proxy (/clusters/<id>/...) responde siempre con un objeto Status de Kubernetes, así que kubectl muestra el mensaje directamente:
{"kind": "Status", "apiVersion": "v1", "status": "Failure", "message": "credencial revocada", "reason": "Unauthorized", "code": 401}
Toda respuesta lleva la cabecera Audit-ID. Si abres una incidencia, incluye ese valor.
| Código | Mensaje | Qué significa | Qué hacer |
|---|---|---|---|
400 |
ruta no válida: segmentos vacíos, '.' o '..' o caracteres escapados no están permitidos |
La ruta tiene //, ., .., un escape o un %. |
Revisa el server del kubeconfig: debe ser https://<kubelatch>/clusters/<id>, sin nada más. |
400 |
identificador de cluster no válido: … |
El segmento tras /clusters/ no puede ser el id de un cluster. |
Usa el kubeconfig que te dio kubelatch. |
400 |
kubelatch no admite cabeceras Impersonate-* (kubectl --as no está soportado) |
Usaste --as, --as-group o una herramienta que usa la impersonación. |
Quita --as. Si necesitas probar permisos de otro, usa el acceso nativo de administración. |
401 |
hace falta un token de kubelatch (Authorization: Bearer klt_...) |
No hay token, o no tiene el formato de un token de kubelatch. | Comprueba que el kubeconfig tiene el token completo. |
401 |
credencial desconocida |
El token no existe en kubelatch (mal copiado, de otra instalación, o su cluster se borró). | Emite una credencial nueva. |
401 |
credencial revocada |
Alguien revocó la credencial. | Emite una nueva; si no fuiste tú, avisa a un admin. |
401 |
credencial caducada |
Pasó su fecha de caducidad. | Renueva la credencial. |
403 |
la cuenta está deshabilitada |
La cuenta dueña de la credencial está deshabilitada. | Habla con un admin. |
403 |
esta credencial está restringida al cluster <id> |
La credencial se emitió para otro cluster. | Usa el contexto correcto o emite una credencial para este cluster. |
403 |
user:<login> no tiene permisos activos en el cluster <id> |
No tienes ningún permiso vigente en ese cluster (nunca lo tuviste, se revocó o caducó). | Pide el permiso a un admin. |
403 |
la credencial ya no es válida: revocada, caducada, cuenta deshabilitada o permisos cambiados |
La petición estaba en curso y se cortó porque algo cambió. | Vuelve a lanzarla; si sigue fallando, mira las filas anteriores. |
404 |
cluster desconocido |
No hay ningún cluster con ese id. | Revisa el server del kubeconfig. |
500 |
error interno |
Fallo inesperado de kubelatch. | Busca el Audit-ID en el log de kubelatch. |
502 |
no se pudo hablar con el API server del cluster: tiempo de espera agotado |
El API server no respondió a tiempo. | Un admin debe revisar la red entre kubelatch y el cluster. |
502 |
no se pudo hablar con el API server del cluster: el certificado del API server no coincide con la CA registrada |
El certificado del API server cambió o no es el registrado. | Un admin vuelve a ejecutar el one-liner con el kubeconfig actual del cluster (trae la CA nueva) y pega el JSON en «Volver a pegar tokens». |
502 |
no se pudo hablar con el API server del cluster: API server inalcanzable |
Conexión rechazada, nombre sin resolver o red inalcanzable. | Un admin comprueba la URL del cluster y la ruta de red (ver Clusters privados). |
502 |
no se pudo hablar con el API server del cluster: error de conexión |
Otro fallo de conexión. | El detalle completo está en el log de kubelatch. |
503 |
el cluster todavía no tiene tokens configurados |
El cluster está registrado pero falta pegar el JSON del bootstrap. | Un admin termina el registro del cluster. |
503 |
kubelatch no puede consultar su base de datos |
Postgres no responde, o (si solo pasa en un cluster) sus tokens no se pueden descifrar porque cambió KUBELATCH_ENCRYPTION_KEY; el log dice proxy: load cluster. |
Un admin revisa Postgres o vuelve a pegar los tokens del cluster. |
503 |
kubelatch no puede registrar la petición |
No se pudo escribir la fila de auditoría; sin ella la petición no se reenvía. | Un admin revisa Postgres. |
503 |
kubelatch se está reiniciando |
La réplica se está apagando (un rollout). | Reintenta: kubectl y client-go lo hacen solos. |
Un 403 con un mensaje en inglés del estilo User "user:<login>" cannot list resource "secrets"… no es de kubelatch: es el RBAC del cluster diciendo que tu nivel no incluye esa acción (ver Niveles).
Estados que solo verás en la auditoría¶
| Estado | Error | Qué significa |
|---|---|---|
101 |
Una conexión actualizada (exec, attach, port-forward, cp). La fila se completa al cerrarse. |
|
101 |
stream cortado: la credencial ya no es válida |
Un stream abierto que kubelatch cortó al revocar, caducar, deshabilitar o cambiar permisos. |
499 |
cliente desconectado |
El cliente colgó antes de recibir la respuesta. |
| cualquiera | kubelatch reiniciando |
El stream se cortó porque la réplica se apagaba. |
Errores del login con GitHub¶
Cuando el login con GitHub falla, kubelatch redirige a /login?error=<código> (o a /mi-cuenta?error=<código> si vinculabas desde «Mi cuenta»), y la página muestra el mensaje de la tabla. Cada código tiene un ancla #github-<código>.
Un código desconocido muestra «No se pudo entrar con GitHub.». Casi todos los fallos dejan un login.failure con el código en el registro del plano de control; los de state por cookie ausente, caducada o de otra sesión, y los de server, solo quedan en el log. Cómo resolver cada caso está en Si algo falla y en Solución de problemas.
Errores de la API¶
Bajo /api/, los errores son JSON con un solo campo:
{"error": "sesión caducada o no válida"}
| Código | Mensajes habituales | Qué significa |
|---|---|---|
400 |
cuerpo JSON no válido; el motivo concreto de una validación (el namespace kube-system está protegido: …, ttl no válido: usa por ejemplo 7d o 12h, …) |
Petición mal formada o que no cumple la política. |
401 |
sesión no iniciada; sesión caducada o no válida; usuario o contraseña incorrectos |
Falta la sesión, caducó o se revocó; o el login falló (el mensaje es el mismo para cualquier motivo). |
403 |
solo para administradores; petición de otro origen rechazada; esta cuenta entra con GitHub: no usa contraseña; solo un administrador puede operar sobre credenciales de otros; solo puedes consultar tus propios permisos |
Falta el rol, la petición viene de otro origen o la acción no está permitida a esa cuenta. |
404 |
no encontrado; usuario no encontrado; cluster no encontrado; enlace no válido; el acceso con GitHub no está configurado |
El recurso no existe (o no es tuyo). |
405 |
método no permitido |
Ruta conocida, método no admitido. La cabecera Allow dice cuáles valen. |
409 |
ese permiso ya existe; ese login ya existe (los logins no se reutilizan); no se puede quitar ni deshabilitar al último administrador activo; sin permisos activos: no hay ningún cluster al que dar acceso; ya hay una reconciliación de este cluster en curso; el cluster no tiene tokens todavía: … |
Conflicto con el estado actual. |
410 |
el enlace ha caducado o ya se ha usado; pide uno nuevo a un administrador |
Enlace de invitación o vinculación gastado, caducado o revocado. |
413 |
cuerpo demasiado grande |
Más de 64 KiB. |
429 |
demasiados intentos |
Cuenta bloqueada 15 minutos tras 5 fallos, o límite de 10 intentos por minuto e IP. |
500 |
error interno |
Fallo inesperado; el detalle está en el log. |
502 |
Un resumen del fallo del cluster | Listar los namespaces de un cluster, conceder un permiso o reconciliar necesitaba hablar con el cluster y no pudo. |
503 |
el intercambio de CI no está configurado; el reconciliador no está disponible |
Una pieza interna no está disponible. |
Intercambio de CI¶
POST /v1/ci/github-actions/token usa el mismo formato {"error": "…"}:
| Código | Mensaje | Qué hacer |
|---|---|---|
401 |
token no válido |
Cualquier problema del propio token: firma, caducidad, audiencia, emisor, reutilización. El motivo exacto está en el log y en el evento ci.exchange.failure. Comprueba que la audiencia es tu KUBELATCH_BASE_URL. |
403 |
ninguna trust rule coincide con este workflow (repository_owner_id=… repository_id=… ref=… environment=…): … |
Un admin debe crear la trust rule con esos ids. |
403 |
el bot <bot> de la trust rule «<regla>» está deshabilitado |
Un admin rehabilita el bot. |
403 |
el bot <bot> no tiene permisos activos en ningún cluster: … |
Un admin concede permisos al bot. |
429 |
demasiados intentos |
Más de 60 peticiones por minuto desde la misma IP. |
Un token rechazado por la política (403) no se gasta: el workflow puede reintentar cuando el admin arregle la configuración.
Webhook de GitHub¶
POST /v1/github/webhook responde 404 sin GITHUB_WEBHOOK_SECRET, 401 firma no válida si el secreto no coincide, 415 si el content type no es application/json, 413 con más de 1 MiB y 400 si el cuerpo no es JSON. Un member_removed del último administrador que puede entrar responde 200 pero no deshabilita a nadie: revisa el log.