ProHoster > Blog > Adminisztráció > A Kubernetes életéből: Hogyan nem kedvezett a HTTP-szerver a spanyoloknak
A Kubernetes életéből: Hogyan nem kedvezett a HTTP-szerver a spanyoloknak
Ügyfelünk képviselője, akinek az alkalmazásverme a Microsoft felhőben (Azure) található, megoldott egy problémát: a közelmúltban egyes európai ügyfelektől érkező kérések 400-as hibával (Rossz kérés). Minden alkalmazás .NET-ben íródott, Kubernetesben telepítve...
Az egyik alkalmazás az API, amelyen keresztül végül minden forgalom érkezik. Ezt a forgalmat a HTTP szerver figyeli Vörös vércse, amelyet a .NET-ügyfél konfigurál, és egy podban tárolja. A hibakereséssel abban az értelemben szerencsénk volt, hogy volt egy konkrét felhasználó, aki következetesen reprodukálta a problémát. A forgalmi lánc azonban mindent bonyolított:
Úgy tűnik, hogy csak a tcpdump segít megoldani ezt a problémát... de megismétlem a forgalmi láncot:
Vizsgálat
Nyilván jobb hallgatni a forgalmat az adott csomóponton, ahol a Kubernetes egy podot telepített: a dump térfogata akkora lesz, hogy legalább valamit elég gyorsan meg lehessen találni. És valóban, a vizsgálat során a következő képkockát vettük észre:
A szemétlerakó alapos vizsgálatakor észrevették a szót M.laga. Könnyű kitalálni, hogy Spanyolországban nincs M.laga város (de van Málaga). Ezt az ötletet megragadva megnéztük az Ingress konfigokat, ahol az egy hónapja beillesztettet láttuk (a kliens kérésére) "ártalmatlan" részlet:
Vissza fog térni 400 Bad request — az alkalmazásnaplóban egy számunkra már ismert hibaüzenetet kapunk:
{
"@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
}
Eredményei
Pontosabban Kestrel nem tud megfelelően dolgozza fel a HTTP-fejléceket a megfelelő karakterekkel az UTF-8-ban, amelyeket meglehetősen sok város neve tartalmaz.
Esetünkben további tényező, hogy az ügyfél jelenleg nem tervezi megváltoztatni a Kestrel alkalmazásban való megvalósítását. Azonban magában az AspNetCore-ban felmerülő problémák (№ 4318, № 7707) azt mondják, ez nem segít...
Összefoglalva: a jegyzet már nem a Kestrel vagy az UTF-8 konkrét problémáiról szól (2019-ben?!), hanem arról, hogy figyelmesség és következetes tanulás Minden lépés, amit a problémák keresése közben tesz, előbb-utóbb meghozza gyümölcsét. Sok szerencsét!