ProHoster > Blog > uprava > Iz života s Kubernetesom: Kako HTTP poslužitelj nije bio naklonjen Španjolcima
Iz života s Kubernetesom: Kako HTTP poslužitelj nije bio naklonjen Španjolcima
Predstavnik našeg klijenta, čiji se paket aplikacija nalazi u Microsoftovom oblaku (Azure), obratio se na problem: nedavno su neki zahtjevi od nekih klijenata iz Europe počeli završavati s pogreškom 400 (Loš zahtjev). Sve aplikacije su napisane u .NET-u, postavljene u Kubernetesu...
Jedna od aplikacija je i API preko kojeg u konačnici dolazi sav promet. Ovaj promet sluša HTTP poslužitelj Vjetrić, konfiguriran od strane .NET klijenta i smješten u pod. S otklanjanjem pogrešaka imali smo sreće u smislu da je postojao određeni korisnik koji je dosljedno ponavljao problem. No, sve je zakomplicirao prometni lanac:
Čini se da će samo tcpdump pomoći u rješavanju ovog problema ... ali ponovit ću o lancu prometa:
istraga
Očito je bolje slušati promet na tom specifičnom čvoru, gdje je Kubernetes postavio pod: volumen odlagališta bit će takav da će biti moguće pronaći barem nešto prilično brzo. I doista, prilikom pregleda uočen je sljedeći okvir:
Pomnijim pregledom odlagališta uočena je riječ M.laga. Lako je pogoditi da u Španjolskoj ne postoji grad M.laga (ali postoji Malaga). Uhvativši se ove ideje, pogledali smo konfiguracije Ingressa, gdje smo vidjeli onu umetnutu prije mjesec dana (na zahtjev klijenta) "bezazleni" isječak:
Će se vratiti 400 Bad request — u dnevniku aplikacije dobit ćemo grešku koja nam je već poznata:
{
"@t":"2019-03-31T12:59:54.3746446Z",
"@mt":"Connection id "{ConnectionId}" bad request data: "{message}"",
"@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()",
"ConnectionId":"0HLLLR1J974L9",
"message":"Malformed request: invalid headers.",
"EventId":{
"Id":17,
"Name":"ConnectionBadRequest"
},
"SourceContext":"Microsoft.AspNetCore.Server.Kestrel",
"ThreadId":71
}
Rezultati
Konkretno Kestrel ne mogu ispravno obraditi HTTP zaglavlja s ispravnim znakovima u UTF-8, koji su sadržani u imenima prilično velikog broja gradova.
Dodatni faktor u našem slučaju je da klijent trenutno ne planira mijenjati implementaciju Kestrela u aplikaciji. Međutim, problemi u samom AspNetCoreu (№ 4318, № 7707) kažu da ovo neće pomoći...
Da rezimiramo: bilješka se više ne odnosi na specifične probleme Kestrela ili UTF-8 (u 2019?!), već na činjenicu da pažljivost i dosljedno proučavanje Svaki korak koji napravite u potrazi za problemima prije ili kasnije urodi plodom. Sretno!