ప్రోహోస్టర్ > బ్లాగ్ > పరిపాలన > కుబెర్నెటీస్తో జీవితం నుండి: HTTP సర్వర్ స్పెయిన్ దేశస్థులకు ఎలా అనుకూలంగా లేదు
కుబెర్నెటీస్తో జీవితం నుండి: HTTP సర్వర్ స్పెయిన్ దేశస్థులకు ఎలా అనుకూలంగా లేదు
మైక్రోసాఫ్ట్ క్లౌడ్ (అజూర్)లో అప్లికేషన్ స్టాక్ ఉన్న మా క్లయింట్ ప్రతినిధి సమస్యను పరిష్కరించారు: ఇటీవల, యూరప్ నుండి కొంతమంది క్లయింట్ల నుండి వచ్చిన కొన్ని అభ్యర్థనలు లోపం 400తో ముగియడం ప్రారంభించాయి (తప్పుడు విన్నపం) అన్ని అప్లికేషన్లు .NETలో వ్రాయబడ్డాయి, కుబెర్నెట్స్లో అమలు చేయబడ్డాయి...
అప్లికేషన్లలో ఒకటి API, దీని ద్వారా అన్ని ట్రాఫిక్ అంతిమంగా వస్తుంది. ఈ ట్రాఫిక్ HTTP సర్వర్ ద్వారా వినబడుతుంది కెస్ట్రెల్, .NET క్లయింట్ ద్వారా కాన్ఫిగర్ చేయబడింది మరియు పాడ్లో హోస్ట్ చేయబడింది. డీబగ్గింగ్తో, సమస్యను స్థిరంగా పునరుత్పత్తి చేసే నిర్దిష్ట వినియోగదారు ఉన్నారనే అర్థంలో మేము అదృష్టవంతులం. అయితే, ట్రాఫిక్ చైన్ ద్వారా ప్రతిదీ సంక్లిష్టంగా ఉంది:
ఈ సమస్యను పరిష్కరించడానికి tcpdump మాత్రమే సహాయపడుతుందని అనిపిస్తుంది... కానీ నేను ట్రాఫిక్ చైన్ గురించి పునరావృతం చేస్తాను:
విచారణ
సహజంగానే, ట్రాఫిక్ వినడం మంచిది నిర్దిష్ట నోడ్లో, కుబెర్నెటెస్ పాడ్ని అమర్చిన చోట: డంప్ యొక్క వాల్యూమ్ కనీసం ఏదైనా త్వరగా కనుగొనడం సాధ్యమయ్యే విధంగా ఉంటుంది. మరియు వాస్తవానికి, దానిని పరిశీలించినప్పుడు, ఈ క్రింది ఫ్రేమ్ గుర్తించబడింది:
డంప్ని నిశితంగా పరిశీలించగా, ఆ పదం గమనించబడింది M.laga. స్పెయిన్లో M.laga నగరం లేదని ఊహించడం సులభం (కానీ ఉంది మాలాగా) ఈ ఆలోచనను స్వీకరించడం ద్వారా, మేము ఇన్గ్రెస్ కాన్ఫిగర్లను చూశాము, అక్కడ మేము ఒక నెల క్రితం చొప్పించినదాన్ని చూశాము (క్లయింట్ అభ్యర్థన మేరకు) "హాని లేని" స్నిప్పెట్:
తిరిగి వస్తుంది 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లో?!) యొక్క నిర్దిష్ట సమస్యల గురించి కాదు, కానీ వాస్తవం గురించి సంపూర్ణత మరియు స్థిరమైన అధ్యయనం సమస్యల కోసం వెతుకుతున్నప్పుడు మీరు వేసే ప్రతి అడుగు త్వరగా లేదా తరువాత ఫలిస్తుంది. అదృష్టం!