ProHoster > Blog > administration > Fra livet med Kubernetes: Hvordan HTTP-serveren ikke favoriserede spanierne
Fra livet med Kubernetes: Hvordan HTTP-serveren ikke favoriserede spanierne
En repræsentant for vores klient, hvis applikationsstack ligger i Microsoft-skyen (Azure), adresserede et problem: for nylig begyndte nogle anmodninger fra nogle klienter fra Europa at ende med fejl 400 (Dårlig anmodning). Alle applikationer er skrevet i .NET, implementeret i Kubernetes...
En af applikationerne er API'et, hvorigennem al trafik i sidste ende kommer. Denne trafik lyttes til af HTTP-serveren Kestrel, konfigureret af .NET-klienten og hostet i en pod. Med debugging var vi heldige i den forstand, at der var en specifik bruger, der konsekvent gengav problemet. Alt blev dog kompliceret af trafikkæden:
Det ser ud til, at kun tcpdump vil hjælpe med at løse dette problem ... men jeg vil gentage om trafikkæden:
undersøgelse
Det er klart, at det er bedre at lytte til trafikken på den specifikke node, hvor Kubernetes har installeret en pod: volumen af dumpen vil være sådan, at det vil være muligt at finde i det mindste noget ret hurtigt. Og faktisk, da man undersøgte det, blev følgende ramme bemærket:
Ved nærmere inspektion af lossepladsen blev ordet bemærket M.laga. Det er let at gætte, at der ikke er nogen M.laga-by i Spanien (men det er der Málaga). Med denne idé kiggede vi på Ingress-konfigurationerne, hvor vi så den, der blev indsat for en måned siden (på kundens anmodning) "harmløs" uddrag:
Efter at have deaktiveret videresendelsen af disse overskrifter, blev alt fint! (Det blev hurtigt klart, at selve applikationen ikke længere havde brug for disse overskrifter.)
Lad os nu se på problemet mere generelt. Det kan nemt gengives inde i applikationen ved at lave en telnet-anmodning til localhost:80:
Kommer tilbage 400 Bad request — i applikationsloggen vil vi modtage en fejl, der allerede er kendt for os:
{
"@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
}
Resultaterne af
Nærmere bestemt Kestrel kan ikke behandle HTTP-headers korrekt med de korrekte tegn i UTF-8, som er indeholdt i navnene på et ret stort antal byer.
En yderligere faktor i vores tilfælde er, at klienten ikke på nuværende tidspunkt planlægger at ændre implementeringen af Kestrel i applikationen. Men problemer i selve AspNetCore (№ 4318, № 7707) siger de, at det ikke vil hjælpe...
For at opsummere: notatet handler ikke længere om de specifikke problemer med Kestrel eller UTF-8 (i 2019?!), men om det faktum, at mindfulness og konsekvent undersøgelse Hvert skridt du tager, mens du søger efter problemer, vil før eller siden bære frugt. Held og lykke!