ProHoster > Blog > башкаруу > Кубернетес менен болгон жашоодон: 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-жылы?!), бирок бул жөнүндө эстүүлүк жана ырааттуу изилдөө Көйгөйлөрдү издеп жүрүп жасаган ар бир кадамыңыз эртеби-кечпи жемишин берет. Жолуңуз ачык болсун!