ProHoster > Блог > басқарма > Кубернетеспен өмірден: HTTP сервері испандарға қалай ұнамады
Кубернетеспен өмірден: HTTP сервері испандарға қалай ұнамады
Қолданбалар стегі Microsoft бұлтында (Azure) орналасқан клиентіміздің өкілі мәселеге тоқталды: жақында Еуропадан келген кейбір клиенттердің сұраулары 400 қатемен аяқтала бастады (Сұраныс қате). Барлық қолданбалар .NET-те жазылған, Kubernetes-те орналастырылған...
Қолданбалардың бірі API болып табылады, ол арқылы барлық трафик ақыр соңында келеді. Бұл трафикті HTTP сервері тыңдайды Кестрел, .NET клиенті арқылы конфигурацияланған және бөлімшеде орналастырылған. Түзету арқылы мәселені дәйекті түрде қайта шығаратын белгілі бір пайдаланушы бар деген мағынада біз бақытты болдық. Дегенмен, бәрі трафик тізбегімен қиын болды:
Бұл мәселені шешуге тек tcpdump көмектесетін сияқты ... бірақ мен трафик тізбегі туралы қайталаймын:
Тергеу
Көлік қозғалысын тыңдаған дұрыс екені анық нақты түйінде, мұнда Кубернетес подводты орналастырды: қоқыс көлемі кем дегенде бір нәрсені тез табуға болатындай болады. Шынында да, оны зерттеген кезде келесі кадр байқалды:
Қоқыс үйіндісін мұқият қарап шыққанда, сөз байқады M.laga. Испанияда M.laga қаласы жоқ екенін болжау оңай (бірақ бар Малага). Осы идеяны ескере отырып, біз Ingress конфигурацияларын қарастырдық, онда біз бір ай бұрын енгізілгенін көрдік (клиенттің өтініші бойынша) «зиянсыз» үзінді:
Қайта береді 400 Bad request — қолданбалар журналында біз бұрыннан таныс қатені аламыз:
{
"@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
}
Нәтижелері
Атап айтқанда, Kestrel мүмкін емес көптеген қалалардың атауларында қамтылған UTF-8 ішіндегі дұрыс таңбалармен HTTP тақырыптарын дұрыс өңдеу.
Біздің жағдайдағы қосымша фактор - клиент қазіргі уақытта қолданбадағы Kestrel енгізуін өзгертуді жоспарламайды. Дегенмен, AspNetCore ішіндегі мәселелер (№4318, №7707) бұл көмектеспейді дейді...
Қорытындылай келе: ескерту енді Kestrel немесе UTF-8 (2019 жылы ?!) нақты проблемалары туралы емес, бұл факт туралы. зейін және дәйекті зерттеу Мәселелерді іздеу кезінде жасаған әрбір қадамыңыз ерте ме, кеш пе өз жемісін береді. Іске сәт!