ProHoster > Blog > Amministrazione > Da a vita cù Kubernetes: Cumu u servitore HTTP ùn favurisce micca i Spagnoli
Da a vita cù Kubernetes: Cumu u servitore HTTP ùn favurisce micca i Spagnoli
Un rappresentante di u nostru cliente, chì a pila d'applicazioni risiede in u nuvulu Microsoft (Azure), hà indirizzatu un prublema: pocu tempu, alcune richieste di certi clienti da l'Europa cuminciaru à finisce cù l'errore 400 (Richiesta brutta). Tutte l'applicazioni sò scritte in .NET, implementate in Kubernetes...
Una di l'applicazioni hè l'API, attraversu quale tuttu u trafficu vene in fine. Stu trafficu hè intesu da u servitore HTTP Cile, cunfiguratu da u cliente .NET è ospitatu in un pod. Cù debugging, avemu avutu furtunatu in u sensu chì ci era un utilizatore specificu chì ripruduce in modu coherente u prublema. Tuttavia, tuttu era cumplicatu da a catena di trafficu:
Sembra chì solu tcpdump aiuterà à risolve stu prublema ... ma ripeteraghju nantu à a catena di trafficu:
Investigation
Ovviamente, hè megliu à sente u trafficu nantu à quellu nodu specificu, induve Kubernetes hà implementatu un pod: u voluminu di u dump serà cusì chì serà pussibule di truvà almenu qualcosa abbastanza rapidamente. È in verità, quandu esaminendu, u quadru seguente hè statu nutatu:
Dopu un'inspezione più stretta di u dump, a parolla hè stata nutata M.laga. Hè facilitu invintà chì ùn ci hè micca a cità M.laga in Spagna (ma ci hè aramunt). Pigliendu sta idea, avemu vistu a cunfigurazione Ingress, induve avemu vistu quellu inseritu un mese fà (à a dumanda di u cliente) snippet "innocu".:
Dopu avè disattivatu l'invio di sti intestazioni, tuttu hè diventatu bè! (Presto hè diventatu chjaru chì l'applicazione stessa ùn hà più bisognu di sti intestazioni).
Avà fighjemu u prublema più in generale. Pò esse facilmente riproduciutu in l'applicazione fendu una dumanda telnet à localhost:80:
Tornerà 400 Bad request - in u logu di l'applicazione riceveremu un errore chì ci hè digià familiarizatu:
{
"@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
}
Risultati
In particulare Kestrel ùn pò prucessa currettamente l'intestazione HTTP cù i caratteri curretti in UTF-8, chì sò cuntenuti in i nomi di un gran numaru di cità.
Un fattore supplementu in u nostru casu hè chì u cliente ùn hà micca prughjettatu di cambià l'implementazione di Kestrel in l'applicazione. Tuttavia, i prublemi in AspNetCore stessu (No.NNUMX, No.NNUMX) dicenu chì questu ùn aiuterà micca ...
Per sintetizà: a nota ùn hè più nantu à i prublemi specifichi di Kestrel o UTF-8 (in 2019?!), Ma di u fattu chì mindfulness è studiu coerente Ogni passu chì fate mentre cercate i prublemi, prima o dopu, darà fruttu. Bona Furtuna !