Soti nan lavi ak Kubernetes: Ki jan sèvè HTTP a pa t 'favè Espanyòl yo
Yon reprezantan kliyan nou an, ki gen yon pil aplikasyon ki abite nan nwaj Microsoft (Azure), te adrese yon pwoblèm: dènyèman, kèk demann soti nan kèk kliyan soti nan Ewòp te kòmanse fini ak erè 400 (Move Demann). Tout aplikasyon yo ekri nan .NET, deplwaye nan Kubernetes...
Youn nan aplikasyon yo se API, atravè tout trafik finalman vini. Se sèvè HTTP a ki koute trafik sa a Krenèl, configuré pa kliyan an .NET ak anime nan yon gous. Avèk debogaj, nou te gen chans nan sans ke te gen yon itilizatè espesifik ki toujou repwodui pwoblèm nan. Sepandan, tout bagay te konplike pa chèn trafik la:
Li ta sanble ke sèlman tcpdump pral ede rezoud pwoblèm sa a ... men mwen pral repete sou chèn trafik la:
Envestigasyon
Li evidan, li pi bon pou koute trafik sou ne espesifik sa a, kote Kubernetes te deplwaye yon gous: volim pil fatra a pral tankou ke li pral posib jwenn omwen yon bagay trè byen vit. Ak tout bon, lè w ap egzamine li, yo te remake ankadreman sa a:
Lè yo te fin enspeksyon pil fatra a, yo te remake mo a M.laga. Li fasil devine ke pa gen okenn vil M.laga nan peyi Espay (men gen malaga). Sezi lide sa a, nou gade konfigirasyon Ingress yo, kote nou te wè youn nan mete yon mwa de sa (sou demann kliyan an) fragment "inofansif".:
Ap retounen 400 Bad request — nan jounal aplikasyon an nou pral resevwa yon erè ki deja abitye pou nou:
{
"@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
}
Rezilta
Espesyalman Kestrel pa kapab kòrèkteman trete tèt HTTP ak karaktè ki kòrèk yo nan UTF-8, ki genyen nan non yo nan yon kantite jistis gwo nan vil yo.
Yon faktè adisyonèl nan ka nou an se ke kliyan an pa kounye a planifye chanje aplikasyon an nan Kestrel nan aplikasyon an. Sepandan, pwoblèm nan AspNetCore tèt li (№ 4318, № 7707) yo di ke sa pap ede...
Pou rezime: nòt la pa sou pwoblèm espesifik Kestrel oswa UTF-8 (nan 2019?!), men sou lefèt ke atensyon ak etid konsistan Chak etap ou fè pandan w ap chèche pwoblèm yo pral pi bonè oswa pita bay fwi. Bon chans!