ProHoster > blog > administratie > Uit het leven met Kubernetes: hoe de HTTP-server de Spanjaarden niet bevoordeelde
Uit het leven met Kubernetes: hoe de HTTP-server de Spanjaarden niet bevoordeelde
Een vertegenwoordiger van onze klant, wiens applicatiestack zich in de Microsoft-cloud (Azure) bevindt, heeft een probleem opgelost: onlangs begonnen sommige verzoeken van sommige klanten uit Europa te eindigen met fout 400 (Bad Request). Alle applicaties zijn geschreven in .NET, geΓ―mplementeerd in Kubernetes...
Het lijkt erop dat alleen tcpdump dit probleem zal helpen oplossen... maar ik zal het herhalen over de verkeersketen:
onderzoek
Uiteraard is het beter om naar het verkeer te luisteren op dat specifieke knooppunt, waar Kubernetes een pod heeft ingezet: het volume van de dump zal zodanig zijn dat het mogelijk zal zijn om in ieder geval vrij snel iets te vinden. En inderdaad, bij onderzoek werd het volgende frame opgemerkt:
Bij nadere inspectie van de stortplaats werd het woord opgemerkt M.laga. Het is gemakkelijk te raden dat er geen M.laga-stad in Spanje is (maar dat is er wel). Malaga). We grepen dit idee aan en keken naar de Ingress-configuraties, waar we die van een maand geleden zagen ingevoegd (op verzoek van de klant) "onschadelijk" fragment:
Na het uitschakelen van het doorsturen van deze headers werd alles in orde! (Het werd al snel duidelijk dat de applicatie zelf deze headers niet langer nodig had.)
Laten we nu eens naar het probleem kijken algemener. Het kan eenvoudig binnen de applicatie worden gereproduceerd door een telnet-verzoek in te dienen localhost:80:
Zal terugkeren 400 Bad request β in het applicatielogboek ontvangen we een foutmelding die ons al bekend is:
{
"@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
}
Resultaten van
Specifiek Torenvalk kan niet HTTP-headers met de juiste tekens correct verwerken in UTF-8, die voorkomen in de namen van een vrij groot aantal steden.
Bijkomend speelt in ons geval mee dat de opdrachtgever op dit moment niet van plan is de implementatie van Kestrel in de applicatie te veranderen. Er zijn echter problemen in AspNetCore zelf (β 4318, β 7707) zeggen ze dat dit niet zal helpen...
Samenvattend: de nota gaat niet meer over de specifieke problemen van Kestrel of UTF-8 (in 2019?!), maar over het feit dat mindfulness en consistente studie Elke stap die u zet bij het zoeken naar problemen zal vroeg of laat vruchten afwerpen. Succes!