Saka urip karo Kubernetes: Kepiye server HTTP ora milih wong Spanyol
Perwakilan klien kita, sing tumpukan aplikasi ana ing awan saka Microsoft (Azure), ngatasi masalah: bubar, sawetara panjaluk saka sawetara klien saka Eropa wiwit rampung kanthi kesalahan 400 (Panjaluk sing ala). Kabeh aplikasi ditulis ing .NET, disebarake ing Kubernetes...
Salah sawijining aplikasi yaiku API, ing ngendi kabeh lalu lintas pungkasane teka. Lalu lintas iki dirungokake dening server HTTP kestrel, diatur dening klien .NET lan dadi tuan rumah ing pod. Kanthi debugging, kita begja amarga ana pangguna tartamtu sing terus-terusan ngasilake masalah kasebut. Nanging, kabeh rumit dening rantai lalu lintas:
Kayane mung tcpdump sing bakal mbantu ngatasi masalah iki ... nanging aku bakal mbaleni babagan rantai lalu lintas:
Investigasi
Temenan, luwih becik ngrungokake lalu lintas ing simpul tartamtu kasebut, ing ngendi Kubernetes wis masang pod: volume mbucal bakal kaya sing bakal bisa kanggo nemokake ing paling soko cantik cepet. Lan pancen, nalika mriksa, pigura ing ngisor iki katon:
Sawise dipriksa kanthi tliti babagan mbucal, tembung kasebut katon M.laga. Iku gampang kanggo guess sing ora ana kutha M.laga ing Spanyol (nanging ana MΓ‘laga). Ngrebut ide iki, kita ndeleng konfigurasi Ingress, ing ngendi kita ndeleng sing dipasang wulan kepungkur (kanthi panjaluk klien) "ora mbebayani" cuplikan:
Bakal bali 400 Bad request - ing log aplikasi kita bakal nampa kesalahan sing wis kita kenal:
{
"@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
}
Hasil
Khusus Kestrel ora bisa ngolah header HTTP kanthi bener kanthi karakter sing bener ing UTF-8, sing ana ing jeneng kutha sing cukup akeh.
Faktor tambahan ing kasus kita yaiku klien saiki ora ngrancang ngganti implementasine Kestrel ing aplikasi kasebut. Nanging, masalah ing AspNetCore dhewe (No.4318, No.7707) dheweke ngomong yen iki ora bakal mbantu ...
Kanggo ngringkes: cathetan kasebut ora ana maneh babagan masalah khusus Kestrel utawa UTF-8 (ing 2019?!), nanging babagan kasunyatan sing mindfulness lan sinau konsisten Saben langkah sing sampeyan lakoni nalika nggoleki masalah cepet utawa mengko bakal metokake woh. Sugeng enjang!