ProHoster > Blog > Bestjoer > Fan it libben mei Kubernetes: Hoe't de HTTP-tsjinner de Spanjerts net favorisearre
Fan it libben mei Kubernetes: Hoe't de HTTP-tsjinner de Spanjerts net favorisearre
In fertsjintwurdiger fan ús kliïnt, waans applikaasjestapel leit yn 'e Microsoft-wolk (Azure), hat in probleem oanpakt: koartlyn begon guon oanfragen fan guon kliïnten út Jeropa te einigjen mei flater 400 (Minne fersyk). Alle applikaasjes binne skreaun yn .NET, ynset yn Kubernetes...
Ien fan de tapassingen is de API, dêr't alle ferkear úteinlik troch komt. Dit ferkear wurdt harke troch de HTTP-tsjinner Torenfalk, ynsteld troch de .NET-kliïnt en hosted yn in pod. Mei debuggen wiene wy gelok yn 't sin dat d'r in spesifike brûker wie dy't it probleem konsekwint reprodusearre. Alles waard lykwols komplisearre troch de ferkearsketting:
It liket derop dat allinich tcpdump dit probleem sil helpe oplosse ... mar ik sil werhelje oer de ferkearsketting:
Undersyk
Fansels is it better om nei it ferkear te harkjen op dat spesifike knooppunt, dêr't Kubernetes in pod ynset hat: it folume fan 'e dump sil sa wêze dat it mooglik is om teminsten frij gau wat te finen. En yndie, by it ûndersiikjen, waard it folgjende frame opmurken:
By neier ynspektearjen fan de stoart waard it wurd opfallen M.laga. It is maklik te rieden dat d'r gjin M.laga-stêd is yn Spanje (mar d'r is Málaga). Troch dit idee oan te pakken, seagen wy nei de Ingress-konfiguraasjes, wêr't wy dejinge seagen in moanne lyn ynfoege (op fersyk fan 'e kliïnt) "harmless" snippet:
Nei it útskeakeljen fan it trochstjoeren fan dizze kopteksten, waard alles goed! (It waard al gau dúdlik dat de applikaasje sels dizze kopteksten net mear nedich hie.)
Litte wy no nei it probleem sjen mear algemien. It kin maklik wurde reprodusearre binnen de applikaasje troch it meitsjen fan in telnet-fersyk oan localhost:80:
Sil weromkomme 400 Bad request - yn it applikaasjelog krije wy in flater dy't ús 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
Spesifyk Kestrel kinne net HTTP-headers korrekt ferwurkje mei de juste karakters yn UTF-8, dy't yn 'e nammen fan in frij grut oantal stêden binne befette.
In ekstra faktor yn ús gefal is dat de klant op it stuit net fan plan is de ymplemintaasje fan Kestrel yn 'e applikaasje te feroarjen. Problemen yn AspNetCore sels (No.4318, No.7707) se sizze dat dit net helpt ...
Gearfetsjend: de notysje giet net mear oer de spesifike problemen fan Kestrel of UTF-8 (yn 2019?!), mar oer it feit dat mindfulness en konsekwint stúdzje Elke stap dy't jo nimme by it sykjen nei problemen sil ier of letter frucht drage. Súkses!