ProHoster > Blogi > Haldamine > Elust Kubernetesega: kuidas HTTP-server hispaanlasi ei soosinud
Elust Kubernetesega: kuidas HTTP-server hispaanlasi ei soosinud
Meie kliendi esindaja, kelle rakenduste pinu asub Microsofti pilves (Azure), käsitles probleemi: hiljuti hakkasid mõned Euroopast pärit klientide päringud lõppema veaga 400 (Halb päring). Kõik rakendused on kirjutatud .NET-is, juurutatud Kubernetesis...
Üks rakendustest on API, mille kaudu kogu liiklus lõpuks tuleb. Seda liiklust kuulab HTTP-server tuuletallaja, mille on konfigureerinud .NET-i klient ja mida hostitakse kaustas. Silumisega meil vedas selles mõttes, et oli konkreetne kasutaja, kes probleemi järjekindlalt kordas. Kõik tegi aga keeruliseks liiklusahel:
Näib, et ainult tcpdump aitab seda probleemi lahendada ... aga kordan liiklusahela kohta:
Uurimine
Ilmselgelt on parem liiklust kuulata sellel konkreetsel sõlmel, kus Kubernetes on kasutanud podi: prügila maht on selline, et sealt on võimalik üsna kiiresti vähemalt midagi leida. Ja tõepoolest, seda uurides jäi silma järgmine kaader:
Prügikohta lähemalt uurides jäi see sõna silma M.laga. Lihtne on arvata, et Hispaanias pole M.laga linna (aga on Malaga). Sellest ideest kinni haarates vaatasime Ingressi konfiguratsioone, kus nägime kuu aega tagasi sisestatut (kliendi soovil) "kahjutu" jupp:
Tuleb tagasi 400 Bad request — rakenduste logisse kuvatakse meile juba tuttav tõrketeade:
{
"@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
}
Tulemused
Täpsemalt Kestrel ei saa õigesti töötlema HTTP-päiseid õigete tähemärkidega UTF-8-s, mis sisalduvad üsna paljude linnade nimedes.
Täiendav asjaolu meie puhul on see, et klient ei plaani hetkel Kestreli rakendamist rakenduses muuta. Kuid probleemid AspNetCore'is endas (№ 4318, № 7707) nad ütlevad, et see ei aita...
Kokkuvõtteks: märkus ei räägi enam Kestreli ega UTF-8 spetsiifilistest probleemidest (2019. aastal?!), vaid sellest, et tähelepanelikkus ja järjepidev õppimine Iga samm, mille teete probleemide otsimisel, kannab varem või hiljem vilja. Edu!