Postmortem: Puerta de enlace incorrecta
Informe del incidente por la interrupción del servicio de Logto el 2024-01-11 debido a fallo en la renovación del dominio.
Informe del incidente por la interrupción del servicio de Logto el 2024-01-11 debido a fallo en la renovación del dominio.
El 2024-01-11, los servicios de Logto experimentaron una interrupción del servicio con muchos errores 502 Bad Gateway.
logto.app expiró y la renovación no se completó.logto.app podría haber expirado. Verificamos el registrador del dominio y descubrimos que no se renovó exitosamente y el dominio había expirado.Nuestros dominios generalmente se renuevan automáticamente a través de nuestro registrador de dominios. Sin embargo, en esta instancia, el proceso de renovación falló debido a una posible mala configuración. En consecuencia, el dominio logto.app expiró y los registros de DNS se actualizaron para apuntar a la página de estacionamiento del registrador.
Hasta ahora, el servicio de autenticación permanece operativo, pero la mayoría de las solicitudes no pueden llegar a él. La excepción es el inquilino administrador de Logto, que se enlaza al dominio auth.logto.io y no se ve afectado por la expiración.
Además del servicio de autenticación, también tenemos un servicio en la nube que orquesta los inquilinos de Logto y sirve el Logto Cloud Console (una aplicación de frontend).
Cuando un usuario opera el Cloud Console, la aplicación no llama directamente al servicio de autenticación; en cambio, llama al servicio en la nube para todas las operaciones de gestión.
Para alinearse con la API de gestión de Logto, diseñamos un endpoint de "proxy de API de gestión" para delegar solicitudes al servicio de autenticación. Todo el flujo se ve así:
Dado que el dominio *.logto.app tiene un problema de desajuste de certificado, el servicio en la nube (Node.js) rechaza la solicitud y lanza un error.
Normalmente, los errores de solicitud se capturan para evitar que todo el servicio se bloquee. Sin embargo, dado que el error fue propagado desde el módulo proxy, la lógica de manejo de errores existente no pudo capturarlo, lo que resultó en un bloqueo del servicio.
Aunque cada servicio de Logto tiene al menos tres réplicas, todas las réplicas se bloquearon fácilmente debido al error que ocurría en casi todas las solicitudes del Cloud Console. El mecanismo de recuperación automática toma tiempo para activarse, causando que el servicio no esté disponible por un tiempo.
Esta es la razón por la cual los usuarios están viendo errores 502 Bad Gateway (todas las réplicas se bloquearon). Una vez que el servicio en la nube está activo, nuevas solicitudes y solicitudes de reintento del Cloud Console llegan, y el ciclo de bloqueos continúa.
Cuando el servicio en la nube está inactivo, también impacta al servicio de autenticación en ciertos endpoints, mayormente /api/.well-known/sign-in-exp. Este endpoint se utiliza para obtener la configuración de la experiencia de inicio de sesión, que incluye información del conector que necesita ser obtenida del servicio en la nube.
logto.app.