ProHoster > Blog > yönetim > Kubernetes'le hayattan: HTTP sunucusu nasıl İspanyolların lehine olmadı?
Kubernetes'le hayattan: HTTP sunucusu nasıl İspanyolların lehine olmadı?
Uygulama yığını Microsoft bulutunda (Azure) bulunan müşterimizin bir temsilcisi bir sorunu ele aldı: yakın zamanda Avrupa'daki bazı müşterilerden gelen bazı istekler 400 hatasıyla bitmeye başladı (Hatalı İstek). Tüm uygulamalar .NET'te yazılmıştır ve Kubernetes'te konuşlandırılmıştır...
Uygulamalardan biri, sonuçta tüm trafiğin geldiği API'dir. Bu trafik HTTP sunucusu tarafından dinlenir Kerkenez.NET istemcisi tarafından yapılandırılır ve bir bölmede barındırılır. Hata ayıklamada, sorunu sürekli olarak yeniden üreten belirli bir kullanıcının olması açısından şanslıydık. Ancak trafik zinciri nedeniyle her şey karmaşıktı:
Görünüşe göre bu sorunu çözmeye yalnızca tcpdump yardımcı olacak... ancak trafik zinciri hakkında tekrar edeceğim:
soruşturma
Açıkçası, trafiği dinlemek daha iyi söz konusu düğümdeKubernetes'in bir kapsül yerleştirdiği yer: çöplüğün hacmi, en azından bir şeyi oldukça hızlı bir şekilde bulmanın mümkün olacağı kadar büyük olacak. Ve gerçekten de onu incelerken şu çerçeve fark edildi:
Çöplük daha yakından incelendiğinde fark edildi M.laga. İspanya'da M.laga şehrinin olmadığını tahmin etmek kolaydır (ancak Malaga). Bu fikirden yola çıkarak, bir ay önce eklenen Ingress yapılandırmalarına baktık (müşterinin isteği üzerine) "zararsız" pasajı:
Bu başlıkların iletilmesini devre dışı bıraktıktan sonra her şey yoluna girdi! (Kısa sürede uygulamanın kendisinin artık bu başlıklara ihtiyaç duymadığı anlaşıldı.)
Şimdi soruna bakalım daha genel olarak. Telnet isteğinde bulunularak uygulama içerisinde kolaylıkla çoğaltılabilir. localhost:80:
Dönecek 400 Bad request — uygulama günlüğünde bize zaten tanıdık gelen bir hata alacağız:
{
"@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
}
sonuçlar
Özellikle Kerkenez Yapamam Oldukça fazla sayıda şehrin adlarında bulunan UTF-8'deki doğru karakterlerle HTTP başlıklarını doğru şekilde işleyin.
Bizim durumumuzdaki ek bir faktör, müşterinin şu anda uygulamadaki Kestrel uygulamasını değiştirmeyi planlamamasıdır. Ancak AspNetCore'un kendisindeki sorunlar (№ 4318, № 7707) bunun faydası olmayacağını söylüyorlar...
Özetlemek gerekirse: not artık Kestrel veya UTF-8'in (2019'da mı?!) belirli sorunlarıyla ilgili değil, ancak şu gerçekle ilgili: farkındalık ve tutarlı çalışma Sorun ararken attığınız her adım er ya da geç meyvesini verecektir. İyi şanlar!