ProHoster > Blag > Riarachán > Ón saol le Kubernetes: Mar nach raibh an freastalaí HTTP i bhfabhar na Spáinnigh
Ón saol le Kubernetes: Mar nach raibh an freastalaí HTTP i bhfabhar na Spáinnigh
Thug ionadaí dár gcliant, a bhfuil a chruach feidhmchlár ina chónaí i scamall Microsoft (Azure), aghaidh ar fhadhb: le déanaí, tháinig deireadh le roinnt iarratais ó chliaint áirithe ón Eoraip le hearráid 400 (Drochiarratas). Tá gach feidhmchlár scríofa in .NET, imlonnaítear iad in Kubernetes...
Is é ceann de na hiarratais an API, trína dtagann gach trácht ar deireadh thiar. Éisteann an freastalaí HTTP leis an trácht seo Podóg, arna chumrú ag an gcliant .NET agus á óstáil i pod. Le debugging, bhí an t-ádh linn sa chiall go raibh úsáideoir ar leith a atáirgeadh go seasta ar an bhfadhb. Mar sin féin, bhí gach rud casta ag an slabhra tráchta:
Tá an chuma ar an scéal nach gcuideoidh ach tcpdump leis an bhfadhb seo a réiteach... ach déarfaidh mé arís faoin slabhra tráchta:
Imscrúdú
Ar ndóigh, tá sé níos fearr éisteacht le trácht ar an nód sonrach sin, áit a bhfuil Kubernetes tar éis pod a imscaradh: beidh toirt an dumpála chomh mór sin go mbeifear in ann rud éigin a aimsiú go tapa ar a laghad. Agus go deimhin, agus é á scrúdú, tugadh an fráma seo a leanas faoi deara:
Tar éis iniúchadh níos dlúithe a dhéanamh ar an dumpáil, tugadh an focal faoi deara M.laga. Is furasta buille faoi thuairim nach bhfuil aon chathair M.laga sa Spáinn (ach tá Malaga). Ag glacadh leis an smaoineamh seo, d’fhéachamar ar na cumraíochtaí Ingress, áit a bhfaca muid an ceann a cuireadh isteach mí ó shin (ar iarratas an chliaint) "harmless" blúire:
Tar éis cur ar aghaidh na gceanntásca seo a dhíchumasú, d'éirigh gach rud go breá! (Ba léir go gairid nach raibh na ceanntásca seo ag teastáil ón bhfeidhmchlár féin a thuilleadh.)
Anois, déanaimis féachaint ar an bhfadhb níos ginearálta. Is féidir é a atáirgeadh go héasca taobh istigh den fheidhmchlár ach iarratas telnet a dhéanamh localhost:80:
Fillfidh 400 Bad request — i loga an iarratais gheobhaimid earráid atá eolach dúinn cheana féin:
{
"@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
}
Torthaí
Go sonrach Kestrel ní féidir próiseáil i gceart ceanntásca HTTP leis na carachtair cearta in UTF-8, atá le fáil in ainmneacha líon measartha mór de na cathracha.
Fachtóir breise inár gcás ná nach bhfuil sé beartaithe ag an gcliant cur i bhfeidhm Kestrel a athrú san iarratas faoi láthair. Mar sin féin, saincheisteanna in AspNetCore féin (№ 4318, № 7707) deir siad nach gcuideoidh sé seo...
Mar achoimre: ní bhaineann an nóta a thuilleadh le fadhbanna sonracha Kestrel nó UTF-8 (in 2019?!), ach faoin bhfíric go bhfuil aire agus staidéar comhsheasmhach Luath nó mall beidh toradh ar gach céim a ghlacfaidh tú agus tú ag cuardach fadhbanna. Ádh mór!