• analiza powypadkowa
  • usługa chmurowa
  • incydent

Analiza powypadkowa: obraz Docker nie znaleziony

Raport z incydentu w związku z przerwą w działaniu usługi Logto w dniu 2023-12-17 z powodu utraty produkcyjnego obrazu Docker.

Simeng
Simeng
Developer

Podsumowanie

Doświadczyliśmy przerwy w działaniu usługi w dniu 2023-12-17 z powodu utraty produkcyjnego obrazu Docker dla Logto.

  • Czas incydentu: 2023-12-17 03:56:00 UTC
  • Czas trwania incydentu: 18 minut
  • Wpływ na usługę: Usługa chmurowa Logto i usługa podstawowa Logto były niedostępne podczas incydentu.
  • Poziom wpływu: Krytyczny
  • Główna przyczyna: Produkcyjny obraz Docker Logto został przypadkowo usunięty. Nie udało się pobrać obrazu z GitHub Container Registry.

Chronologia

CzasWydarzenie
Wczesny 2023-12-17 (dokładny czas nieznany)Automatyczny przepływ pracy retencji obrazów GitHub Logto został wykonany. Obrazy produkcyjne logto i logto-cloud zostały usunięte przypadkowo.
2023-12-17 03:56:00 UTCUsługa chmurowa Logto i usługa podstawowa Logto stały się niedostępne. Incydent wykryty przez nasz system monitorowania.
2023-12-17 04:03:00 UTCIncydent został potwierdzony przez naszego inżyniera na wezwanie.
2023-12-17 04:10:00 UTCNowe wdrożenie usługi chmurowej Logto i usługi podstawowej Logto zostało uruchomione z najnowszym obrazem.
2023-12-17 04:15:00 UTCUsługa chmurowa Logto i usługa podstawowa Logto stały się dostępne. Incydent rozwiązany automatycznie.

Analiza incydentu

Co się stało

Produkcja obrazów usługi Logto została usunięta przez nasz automatyczny przepływ pracy retencji obrazów GitHub. Usługa chmurowa nie zdołała pobrać obrazu z GitHub Container Registry i stała się niedostępna.

Log serwisu

Dlaczego to się stało

Automatyczny przepływ pracy retencji obrazów GitHub przypadkowo usunął produkcyjne obrazy. Przepływ pracy został zaprojektowany do usuwania wszystkich nieotagowanych starszych obrazów, które mają więcej niż 3 dni.

Otagowaliśmy produkcyjne obrazy tagiem prod w celu identyfikacji jako obrazy produkcyjne. Kiedy zostaje uruchomione wdrożenie produkcyjne, nowy obraz z tagiem prod jest budowany i wysyłany do GitHub Container Registry. Tagi prod są usuwane ze starego obrazu po pomyślnym zbudowaniu i wysłaniu nowego obrazu. Stary obraz staje się nieotagowany i zostanie usunięty przez automatyczny przepływ pracy retencji obrazów GitHub.

Obraz usługi Logto został zbudowany do obsługi wielu architektur. Obraz został zbudowany z użyciem buildx i wysłany do GitHub Container Registry z flagą --platform. Wszystkie tagi zostały przypisane do głównej listy manifestów. Tag prod również został przypisany do głównej listy manifestów. Wszystkie podobrazy wymienione pod listą manifestów multi-arch pozostają nieotagowane.

Brak starannego przeglądu struktury tagów i listy manifestów obrazu Docker, po prostu skonfigurowaliśmy automatyczny przepływ pracy retencji obrazów GitHub do usuwania wszystkich nieotagowanych obrazów. Przepływ pracy usunął wszystkie podobrazy wymienione pod listą manifestów multi-arch.

Wpływ

Ten incydent spowodował, że usługa chmurowa Logto i usługa podstawowa Logto były niedostępne przez około 18 minut. Użytkownicy końcowi nie mogli zalogować się do Logto i uzyskać dostępu do swoich aplikacji klienckich. Portal administracyjny chmury Logto również był niedostępny podczas incydentu.

Rozwiązanie

Zatrzymaliśmy automatyczny przepływ pracy retencji obrazów GitHub i wdrożyliśmy nowy obraz z tagiem prod do GitHub Container Registry. Nowy obraz został pomyślnie pobrany przez usługę chmurową Logto i usługę podstawową Logto. Usługa stała się ponownie dostępna.

Wnioski

  • Nigdy nie publikuj przepływu pracy bez starannej oceny i testowania w środowisku produkcyjnym.
  • Wykonaj próbne uruchomienie dowolnego zadania usunięcia zasobów przed jego wykonaniem.
  • Zawsze miej plan awaryjny dla środowiska produkcyjnego.
  • Starannie zdefiniuj nową politykę retencji obrazów.

Środki naprawcze i zapobiegawcze

  • ✅ Natychmiast zatrzymaj automatyczny przepływ pracy retencji obrazów GitHub.