ProHoster > Blog > Stjórnsýsla > Frá lífinu með Kubernetes: Hvernig HTTP þjónninn var ekki ívilnandi við Spánverja
Frá lífinu með Kubernetes: Hvernig HTTP þjónninn var ekki ívilnandi við Spánverja
Fulltrúi viðskiptavinar okkar, þar sem umsóknarstafla er í Microsoft skýinu (Azure), tók á vandamáli: nýlega fóru sumar beiðnir frá sumum viðskiptavinum frá Evrópu að enda með villu 400 (Slæm beiðni). Öll forrit eru skrifuð í .NET, dreift í Kubernetes...
Eitt af forritunum er API, sem öll umferð kemur að lokum í gegnum. HTTP þjónninn hlustar á þessa umferð Kestrel, stillt af .NET biðlara og hýst í hólf. Með villuleit vorum við heppin í þeim skilningi að það var ákveðinn notandi sem endurskapaði vandamálið stöðugt. Hins vegar var allt flókið af umferðarkeðjunni:
Það virðist sem aðeins tcpdump muni hjálpa til við að leysa þetta vandamál ... en ég mun endurtaka um umferðarkeðjuna:
Rannsókn
Augljóslega er betra að hlusta á umferðina á þessum sérstaka hnút, þar sem Kubernetes hefur sett upp pod: rúmmál sorphaugsins verður þannig að hægt verður að finna að minnsta kosti eitthvað nokkuð fljótt. Og reyndar, þegar það var skoðað, var tekið eftir eftirfarandi ramma:
Við nánari skoðun á sorphaugnum var orðið vart M.laga. Það er auðvelt að giska á að það sé engin M.laga borg á Spáni (en það er það Malaga). Við gripum þessa hugmynd og skoðuðum Ingress stillingarnar, þar sem við sáum þá sett inn fyrir mánuði síðan (að beiðni viðskiptavinarins) "skaðlaus" brot:
Kem aftur 400 Bad request — í umsóknarskránni munum við fá villu sem er okkur þegar kunn:
{
"@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
}
Niðurstöður
Nánar tiltekið Kestrel getur það ekki vinna rétt úr HTTP hausum með réttum stöfum í UTF-8, sem eru innifalin í nöfnum nokkuð stórra borga.
Aukaatriði í okkar tilviki er að viðskiptavinur ætlar ekki að breyta útfærslu Kestrel í umsókninni eins og er. Hins vegar vandamál í AspNetCore sjálfu (№ 4318, № 7707) þeir segja að þetta muni ekki hjálpa...
Til að draga saman: athugasemdin snýst ekki lengur um sérstök vandamál Kestrel eða UTF-8 (árið 2019?!), heldur um þá staðreynd að núvitund og stöðugt nám Hvert skref sem þú tekur á meðan þú leitar að vandamálum mun fyrr eða síðar bera ávöxt. Gangi þér vel!