Из живота са Кубернетесом: Како ХТТП сервер није фаворизовао Шпанце
Представник нашег клијента, чији се скуп апликација налази у Мицрософт облаку (Азуре), позабавио се проблемом: недавно су неки захтеви неких клијената из Европе почели да се завршавају грешком 400 (Лош захтев). Све апликације су написане у .НЕТ-у, распоређене у Кубернетес-у...
Једна од апликација је АПИ, преко којег на крају долази сав саобраћај. Овај саобраћај слуша ХТТП сервер Кестрел, који је конфигурисао .НЕТ клијент и смештен у под. Са отклањањем грешака, имали смо среће у смислу да је постојао одређени корисник који је доследно репродуковао проблем. Међутим, све је закомпликовао саобраћајни ланац:
Чини се да ће само тцпдумп помоћи у решавању овог проблема... али поновићу о ланцу саобраћаја:
Истрага
Очигледно, боље је слушати саобраћај на том специфичном чвору, где је Кубернетес поставио под: запремина депоније ће бити таква да ће бити могуће пронаћи барем нешто прилично брзо. И заиста, приликом његовог прегледа, примећен је следећи оквир:
Пажљивијим прегледом депоније примећена је реч M.laga. Лако је претпоставити да у Шпанији не постоји град М.лага (али постоји Малага). Уважавајући ову идеју, погледали смо Ингресс конфигурације, где смо видели ону убачену пре месец дана (на захтев клијента) "безопасни" исечак:
Ће се вратити 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
}
Резултати
Конкретно ветрушка не могу правилно обрадити ХТТП заглавља са исправним знаковима у УТФ-8, који се налазе у називима прилично великог броја градова.
Додатни фактор у нашем случају је то што клијент тренутно не планира да мења имплементацију Кестрела у апликацији. Међутим, проблеми у самом АспНетЦоре (№ КСНУМКС, № КСНУМКС) кажу да ово неће помоћи...
Да резимирамо: белешка више није о конкретним проблемима Кестрела или УТФ-8 (2019?!), већ о томе да је свесност и доследно проучавање Сваки корак који предузмете у потрази за проблемима ће пре или касније уродити плодом. Срећно!