ProHoster > Bloc > Administració > De la vida amb Kubernetes: com el servidor HTTP no afavoria els espanyols
De la vida amb Kubernetes: com el servidor HTTP no afavoria els espanyols
Un representant del nostre client, la pila d'aplicacions del qual resideix al núvol de Microsoft (Azure), va solucionar un problema: recentment, algunes sol·licituds d'alguns clients d'Europa van començar a acabar amb l'error 400 (Sol·licitud incorrecta). Totes les aplicacions estan escrites en .NET, desplegades a Kubernetes...
Una de les aplicacions és l'API, a través de la qual finalment arriba tot el trànsit. Aquest trànsit és escoltat pel servidor HTTP Xoriguer, configurat pel client .NET i allotjat en un pod. Amb la depuració, vam tenir sort en el sentit que hi havia un usuari específic que reproduïa constantment el problema. Tot i això, tot es va complicar per la cadena de trànsit:
Sembla que només tcpdump ajudarà a resoldre aquest problema... però repetiré sobre la cadena de trànsit:
Investigació
Evidentment, és millor escoltar el trànsit en aquest node específic, on Kubernetes ha desplegat un pod: el volum de l'abocador serà tal que serà possible trobar almenys alguna cosa amb força rapidesa. I de fet, en examinar-lo, es va notar el següent marc:
En inspeccionar més de prop l'abocador, es va notar la paraula M.laga. És fàcil endevinar que no hi ha cap ciutat M.laga a Espanya (però n'hi ha Màlaga). Aprofitant aquesta idea, vam mirar les configuracions d'Ingress, on vam veure la inserida fa un mes (a petició del client) fragment "inofensiu".:
Després de desactivar el reenviament d'aquestes capçaleres, tot va anar bé! (Aviat va quedar clar que l'aplicació ja no necessitava aquestes capçaleres.)
Ara mirem el problema més generalment. Es pot reproduir fàcilment dins de l'aplicació fent una sol·licitud de telnet a localhost:80:
Tornarà 400 Bad request — al registre de l'aplicació rebrem un error que ja ens és familiar:
{
"@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
}
Resultats de
Concretament Xoriguer no pot processar correctament les capçaleres HTTP amb els caràcters correctes en UTF-8, que es troben en els noms d'un nombre bastant gran de ciutats.
Un factor addicional en el nostre cas és que el client actualment no té previst canviar la implementació de Kestrel a l'aplicació. Tanmateix, els problemes al mateix AspNetCore (№ 4318, № 7707) diuen que això no ajudarà...
En resum: la nota ja no tracta dels problemes específics de Kestrel o UTF-8 (el 2019?!), sinó del fet que mindfulness i estudi coherent Cada pas que feu mentre busqueu problemes tard o d'hora donarà els seus fruits. Bona sort!