ProHoster > Blog > İdarə > Kubernetes ilə həyatdan: HTTP serveri ispanlara necə üstünlük vermədi
Kubernetes ilə həyatdan: HTTP serveri ispanlara necə üstünlük vermədi
Tətbiq yığını Microsoft buludunda (Azure) yerləşən müştərimizin nümayəndəsi bir problemə müraciət etdi: bu yaxınlarda Avropadan bəzi müştərilərin bəzi sorğuları 400 xətası ilə bitməyə başladı (Pis istək). Bütün proqramlar .NET-də yazılıb, Kubernetes-də yerləşdirilib...
Tətbiqlərdən biri bütün trafikin sonda gəldiyi API-dir. Bu trafik HTTP serveri tərəfindən dinlənir Ləzzət, .NET müştərisi tərəfindən konfiqurasiya edilmiş və podda yerləşdirilmişdir. Sazlama ilə, problemi ardıcıl olaraq təkrarlayan xüsusi bir istifadəçinin olması mənasında şanslı idik. Bununla birlikdə, hər şey trafik zənciri ilə çətinləşdi:
Görünür ki, yalnız tcpdump bu problemi həll etməyə kömək edəcək ... amma trafik zənciri haqqında təkrar edəcəyəm:
İstintaq
Aydındır ki, trafikə qulaq asmaq daha yaxşıdır həmin xüsusi qovşaqda, Kubernetes bir pod yerləşdirdiyi yerdə: zibilin həcmi elə olacaq ki, ən azı olduqca tez bir şey tapmaq mümkün olacaq. Və həqiqətən də, onu araşdırarkən aşağıdakı çərçivə diqqət çəkdi:
Zibilliyə daha yaxından baxanda söz diqqət çəkdi M.laga. İspaniyada M.laga şəhərinin olmadığını təxmin etmək asandır (amma var Malaga). Bu ideyadan istifadə edərək, bir ay əvvəl daxil edilmişi gördük (müştərinin istəyi ilə) Ingress konfiqurasiyalarına baxdıq. "zərərsiz" parça:
Geri dönəcək 400 Bad request — tətbiq jurnalında artıq bizə tanış olan xəta alacağıq:
{
"@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
}
Nəticələri
Xüsusilə Kestrel edə bilməz kifayət qədər çox sayda şəhərin adlarında olan UTF-8-də düzgün simvollarla HTTP başlıqlarını düzgün şəkildə emal edin.
Bizim vəziyyətimizdə əlavə bir amil müştərinin hazırda tətbiqdə Kestrel tətbiqini dəyişdirməyi planlaşdırmamasıdır. Bununla belə, AspNetCore-un özündə problemlər (№ 4318, № 7707) deyirlər ki, bu kömək etməyəcək...
Xülasə etmək üçün: qeyd artıq Kestrel və ya UTF-8-in spesifik problemləri haqqında deyil (2019-cu ildə?!), lakin faktdır ki, zehinlilik və ardıcıl öyrənmə Problemləri axtararkən atdığınız hər addım gec-tez öz bəhrəsini verəcək. Uğurlar!