Dryf zegara może zepsuć tokeny i zaplanowane zadania, ponieważ aplikacje kontenerowe porównują znaczniki czasu z zegarem systemowym, który widzą. Gdy ten zegar jest z przodu, z tyłu lub nagle skorygowany, ważne tokeny mogą wydawać się wygasłe lub jeszcze nieaktywne, a zaplanowane zadania mogą być wykonywane z opóźnieniem, za wcześnie, dwukrotnie lub wcale.
Kontenery zwykle nie tworzą niezależnego, wiarygodnego źródła czasu. Polegają na hoście, maszynie wirtualnej lub środowisku piaskownicy, więc jeden problem z synchronizacją może wpłynąć na uwierzytelnianie, kopie zapasowe, sprawdzanie certyfikatów, bazy danych, logi i kilka kontenerów jednocześnie.
Skąd kontener bierze czas?
Normalny kontener Linux odczytuje zegary jądra, a nie działa jako pełny, niezależny zegar sprzętowy. Oznacza to, że czas kontenera zależy od synchronizacji hosta, nawet gdy każda aplikacja ma inny obraz i ustawienie strefy czasowej.
Strefa czasowa zmienia sposób wyświetlania znacznika czasu, a nie podstawowy moment UTC. Dryf zegara to inny problem: systemowa idea aktualnego momentu jest błędna względem wystawcy, API, bazy danych lub harmonogramu.
Wirtualizacja, wstrzymanie i wznowienie, przeciążone hosty, zablokowany ruch synchronizacji czasu lub awaria usługi NTP mogą powodować przesunięcie. Kontenery mogą pokazywać ten sam błędny czas, ponieważ korzystają z tego samego źródła zegara.
Dlaczego roszczenia czasowe JWT zawodzą, gdy zegary się nie zgadzają?
Walidacja JWT zwykle porównuje aktualny czas z `exp`, `nbf` i czasami `iat`. dryf zegara zmienia decyzje dotyczące granic tokena w momencie, gdy token staje się aktywny lub wygasa.
Weryfikator działający z wyprzedzeniem może odrzucić świeżo wydany token jako już wygasły. Weryfikator działający z opóźnieniem może nadal akceptować wygasły token, podczas gdy wystawca działający z wyprzedzeniem może utworzyć wartość `iat` lub `nbf`, która wydaje się pochodzić z przyszłości weryfikatora.
Podpis może pozostać całkowicie ważny, ponieważ dryf zegara nie zmienia bajtów tokena. Błąd występuje w polityce opartej na czasie stosowanej po weryfikacji kryptograficznej.
Ile zapasu czasu zegara jest bezpieczne?
Biblioteki tokenów często dopuszczają niewielką tolerancję, aby normalne różnice między maszynami nie powodowały niestabilnego uwierzytelniania. małe marginesy dryfu zegara zapobiegają fałszywemu odrzuceniu, gdy serwery różnią się tylko o kilka sekund.
Margines tolerancji nie zastępuje zsynchronizowanych zegarów. Duża tolerancja skutecznie wydłuża czas życia każdego tokena i może ukryć uszkodzony zegar hosta, osłabiając kontrolę wygaśnięcia i ważności.
Używaj wąskiego marginesu dopasowanego do środowiska, a następnie monitoruj rzeczywiste odchylenie. Powtarzające się błędy `token not active`, `issued in the future` lub przedwczesnego wygaśnięcia powinny wywołać dochodzenie w sprawie czasu, a nie stopniowe zwiększanie tolerancji.
Dlaczego zaplanowane zadania mogą uruchamiać się o niewłaściwej porze?
Cron i harmonogramy aplikacji oceniają czas zegara ściennego, aby zdecydować, kiedy praca jest do wykonania. W kontenerach zaplanowane zadania polegają na zegarze kontenera, więc dryf hosta przesuwa punkt wyzwalania.
Wolny zegar może opóźniać kopie zapasowe, sprzątanie, odnawianie certyfikatów lub skanowanie mediów. Skok czasu do przodu może pominąć wąskie okno harmonogramu, podczas gdy korekta do tyłu może sprawić, że niektóre harmonogramy napotkają ten sam interwał zegara ściennego ponownie.
Różne harmonogramy radzą sobie z przeskokami czasu inaczej. Niektóre obliczają następny absolutny czas, inne śpią przez określone okresy, a harmonogramy klastrowe mogą polegać na dzierżawach lub znacznikach czasu bazy danych, aby zdecydować, która instancja jest właścicielem zadania.
Jak dryf dezorientuje logi i rozproszoną pracę?
Gdy kontenery mają różne czasy, zdarzenie może wydawać się zakończone przed jego rozpoczęciem lub późniejsze żądanie może otrzymać wcześniejszy znacznik czasu. dryf zegara zniekształca rozproszone ślady, nawet gdy sama sekwencja aplikacji jest poprawna.
Blokady bazy danych, wygasanie pamięci podręcznej, limity szybkości, podpisane adresy URL, kontrole TLS i dzierżawy lidera mogą również zależeć od znaczników czasu. Efekt może wyglądać jak błąd uwierzytelniania, sieci lub aplikacji, a nie typowy problem z zegarem.
Używanie zegarów monotonicznych do pomiaru upływu czasu zapobiega problemom z timerami spowodowanym korektami zegara ściennego, ale harmonogramy kalendarzowe i roszczenia tokenów między systemami nadal wymagają zsynchronizowanego czasu rzeczywistego.
Jak serwer domowy powinien kontrolować dryf zegara?
Synchronizuj hosta z wiarygodnymi źródłami czasu i monitoruj przesunięcie, a nie tylko sprawdzaj, czy działa usługa NTP. zaplanowane zadania wymagają monitorowania wykonania, ponieważ poprawny crontab nie gwarantuje, że zadanie faktycznie uruchomiło się na czas.
Alarmuj o utracie synchronizacji, dużym przesunięciu, powtarzających się korektach, błędach na granicach tokenów i braku sygnałów życia zadań. Po wstrzymaniu, migracji lub długiej przerwie potwierdź czas przed poleganiem na uwierzytelnianiu lub automatycznych kopiach zapasowych.
Projektuj krytyczne zadania jako idempotentne i zapisuj ich ostatnie udane logiczne uruchomienie. Zapobiega to cichemu tworzeniu duplikatów lub brakujących zadań po skoku zegara, podczas gdy niezależne kopie zapasowe zachowują opcje odzyskiwania poza aktywnymi kontenerami.
| Funkcja zależna od czasu | Zegar przyspieszony | Zegar opóźniony |
|---|---|---|
| Wygasanie JWT | Ważne tokeny mogą wydawać się wygasłe | Wygasłe tokeny mogą być dłużej akceptowane |
| JWT not-before lub issued-at | Inne usługi mogą widzieć przyszłe znaczniki czasowe | Świeże tokeny mogą wydawać się jeszcze nieważne |
| Zaplanowana kopia zapasowa | Okno może pojawić się wcześniej lub zostać pominięte po skoku | Kopia zapasowa może się opóźnić |
| Rozproszone logi i śledzenie | Wydarzenia pojawiają się później niż u rówieśników | Wydarzenia wydają się poprzedzać swoje przyczyny |
Najczęściej zadawane pytania
Czy kontenery mają niezależne zegary?
Normalne kontenery Linuxa dzielą zegary jądra hosta. Mogą używać różnych ustawień strefy czasowej, ale problem synchronizacji hosta może wpłynąć na wiele kontenerów jednocześnie.
Czy podpisy JWT mogą przejść, podczas gdy token jest odrzucony?
Tak. Weryfikacja podpisu potwierdza integralność i posiadanie klucza przez wystawcę. Twierdzenia czasowe to osobne reguły walidacji, które mogą zawieść, gdy zegary się nie zgadzają.
Czy zwiększenie marginesu JWT rozwiąże problem dryfu zegara?
Może ukryć małe oczekiwane różnice, ale duży margines osłabia ograniczenia czasowe i ukrywa uszkodzony zegar. Host powinien być nadal synchronizowany i monitorowany.
Czy korekta zegara może spowodować dwukrotne uruchomienie zadania cron?
To zależy od harmonogramu. Cofnięcie zegara ściennego może powtórzyć lokalny przedział czasowy, podczas gdy niektóre harmonogramy śledzą wcześniejsze uruchomienia lub używają timerów monotonicznych, aby uniknąć duplikacji.
Ostateczne wnioski
Dryf zegara zmienia czas z wspólnego odniesienia w niespójną lokalną opinię. Tokeny zawodzą na granicach `exp`, `nbf` lub `iat`, zaplanowane zadania przesuwają się względem rzeczywistego czasu, a logi tracą wiarygodną kolejność. Mały margines tokenów, synchronizacja hostów, monitorowanie przesunięć, zadania idempotentne i niezależne kopie zapasowe zapobiegają traktowaniu problemu z zegarem jako wielu niezwiązanych awarii kontenerów na serwerze domowym.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Dlaczego Home Assistant działa inaczej w sieci lokalnej i przy połączeniach zdalnych?
Sesje Home Assistant w sieci LAN i zdalne korzystają z różnych ścieżek sieciowych; opóźnienie zdalne obejmuje DNS, szyfrowanie, sieć WAN, serwer proxy lub VPN...

Czy Home Assistant działa niezawodnie za CGNAT-em lub podwójnym NAT-em?
CGNAT i podwójny NAT zazwyczaj nie wpływają na lokalne sterowanie Home Assistantem; zmieniają głównie sposób, w jaki zdalni klienci mogą utworzyć ścieżkę przychodzącą do...

Jak opóźnienie sieci wpływa na działanie Home Assistant podczas awarii Internetu?
Utrata dostępu do Internetu i opóźnienia sieciowe to różne awarie: lokalne ścieżki urządzeń mogą nadal działać szybko, podczas gdy DNS, integracje z chmurą, bramy...

