ProHoster > وبلاگ > اداره > از زندگی با Kubernetes: چگونه سرور HTTP به نفع اسپانیایی ها نبود
از زندگی با Kubernetes: چگونه سرور HTTP به نفع اسپانیایی ها نبود
نماینده مشتری ما، که پشته برنامه هایش در ابر مایکروسافت (Azure) قرار دارد، به یک مشکل رسیدگی کرد: اخیراً برخی از درخواست های برخی از مشتریان از اروپا با خطای 400 پایان یافتند (درخواست بد). همه برنامه ها در دات نت نوشته شده اند و در Kubernetes مستقر شده اند...
یکی از برنامه های کاربردی API است که در نهایت تمام ترافیک از طریق آن می آید. این ترافیک توسط سرور HTTP گوش داده می شود کیستر، توسط مشتری دات نت پیکربندی شده و در یک پاد میزبانی می شود. با اشکال زدایی، ما خوش شانس بودیم به این معنا که یک کاربر خاص وجود داشت که به طور مداوم مشکل را بازتولید می کرد. با این حال، همه چیز توسط زنجیره ترافیک پیچیده شد:
به نظر می رسد که فقط tcpdump به حل این مشکل کمک می کند ... اما در مورد زنجیره ترافیک تکرار می کنم:
تحقیق
بدیهی است که بهتر است به ترافیک گوش دهید روی آن گره خاص، جایی که Kubernetes یک pod مستقر کرده است: حجم تخلیه به اندازه ای خواهد بود که حداقل می توان چیزی را خیلی سریع پیدا کرد. و در واقع، هنگام بررسی آن، قاب زیر مورد توجه قرار گرفت:
با بررسی دقیق تر زباله، این کلمه متوجه شد 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
}
نمایش نتایج: از
به طور خاص کسترل نمیتونم هدرهای HTTP را با کاراکترهای صحیح در UTF-8 که در نام تعداد نسبتاً زیادی از شهرها موجود است، به درستی پردازش کنید.
یک عامل اضافی در مورد ما این است که مشتری در حال حاضر برنامه ای برای تغییر اجرای Kestrel در برنامه ندارد. با این حال، مشکلات در خود AspNetCore (№ 4318, № 7707) آنها می گویند که این کمکی نمی کند ...
به طور خلاصه: یادداشت دیگر در مورد مشکلات خاص Kestrel یا UTF-8 (در سال 2019؟!) نیست، بلکه در مورد این واقعیت است که ذهن آگاهی و مطالعه مداوم هر قدمی که هنگام جستجوی مشکلات برمیدارید دیر یا زود به ثمر میرسد. موفق باشید!