የማመልከቻ ቁልል በማይክሮሶፍት ደመና (አዙር) ውስጥ የሚኖር የደንበኞቻችን ተወካይ አንድ ችግር አቅርቧል፡ በቅርቡ ከአውሮፓ አንዳንድ ደንበኞች አንዳንድ ጥያቄዎች በስህተት 400 ማለቅ ጀመሩ።
ከመተግበሪያዎቹ አንዱ ኤፒአይ ነው፣ በዚህም ሁሉም ትራፊክ በመጨረሻ ይመጣል። ይህ ትራፊክ በኤችቲቲፒ አገልጋይ ይደመጣል
በ Ingress ውስጥ ያለው ስህተት ይህን ይመስላል፡-
{
"number_fields":{
"status":400,
"request_time":0.001,
"bytes_sent":465,
"upstream_response_time":0,
"upstream_retries":0,
"bytes_received":2328
},
"stream":"stdout",
"string_fields":{
"ingress":"app",
"protocol":"HTTP/1.1",
"request_id":"f9ab8540407208a119463975afda90bc",
"path":"/api/sign-in",
"nginx_upstream_status":"400",
"service":"app",
"namespace":"production",
"location":"/front",
"scheme":"https",
"method":"POST",
"nginx_upstream_response_time":"0.000",
"nginx_upstream_bytes_received":"120",
"vhost":"api.app.example.com",
"host":"api.app.example.com",
"user":"",
"address":"83.41.81.250",
"nginx_upstream_addr":"10.240.0.110:80",
"referrer":"https://api.app.example.com/auth/login?long_encrypted_header",
"service_port":"http",
"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"time":"2019-03-06T18:29:16+00:00",
"content_kind":"cache-headers-not-present",
"request_query":""
},
"timestamp":"2019-03-06 18:29:16",
"labels":{
"app":"nginx",
"pod-template-generation":"6",
"controller-revision-hash":"1682636041"
},
"namespace":"kube-nginx-ingress",
"nsec":6726612,
"source":"kubernetes",
"host":"k8s-node-55555-0",
"pod_name":"nginx-v2hcb",
"container_name":"nginx",
"boolean_fields":{}
}
በተመሳሳይ ጊዜ, Kestrel ሰጥቷል:
HTTP/1.1 400 Bad Request
Connection: close
Date: Wed, 06 Mar 2019 12:34:20 GMT
Server: Kestrel
Content-Length: 0
ከፍተኛ የቃላት አነጋገር ቢኖረውም የ Kestrel ስህተት እጅግ በጣም ይዟል ትንሽ ጠቃሚ መረጃ:
{
"number_fields":{"ThreadId":76},
"stream":"stdout",
"string_fields":{
"EventId":"{"Id"=>17, "Name"=>"ConnectionBadRequest"}",
"SourceContext":"Microsoft.AspNetCore.Server.Kestrel",
"ConnectionId":"0HLL2VJSST5KV",
"@mt":"Connection id "{ConnectionId}" bad request data: "{message}"",
"@t":"2019-03-07T13:06:48.1449083Z",
"@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()",
"message":"Malformed request: invalid headers."
},
"timestamp":"2019-03-07 13:06:48",
"labels":{
"pod-template-hash":"2368795483",
"service":"app"
},
"namespace":"production",
"nsec":145341848,
"source":"kubernetes",
"host":"k8s-node-55555-1",
"pod_name":"app-67bdcf98d7-mhktx",
"container_name":"app",
"boolean_fields":{}
}
ይህንን ችግር ለመፍታት tcpdump ብቻ የሚረዳ ይመስላል… ግን ስለ የትራፊክ ሰንሰለት እደግማለሁ-
ምርመራ
ትራፊክን ማዳመጥ የተሻለ እንደሆነ ግልጽ ነው። በዚያ የተወሰነ መስቀለኛ መንገድ ላይ, ኩበርኔትስ ፖድ ባሰማራበት ቦታ: የቆሻሻ መጣያው መጠን ቢያንስ ቢያንስ አንድ ነገር በፍጥነት ማግኘት የሚቻል ይሆናል. እና በእውነቱ ፣ እሱን ሲመረምሩ ፣ የሚከተለው ፍሬም ተስተውሏል-
GET /back/user HTTP/1.1
Host: api.app.example.com
X-Request-ID: 27ceb14972da8c21a8f92904b3eff1e5
X-Real-IP: 83.41.81.250
X-Forwarded-For: 83.41.81.250
X-Forwarded-Host: api.app.example.com
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Original-URI: /front/back/user
X-Scheme: https
X-Original-Forwarded-For: 83.41.81.250
X-Nginx-Geo-Client-Country: Spain
X-Nginx-Geo-Client-City: M.laga
Accept-Encoding: gzip
CF-IPCountry: ES
CF-RAY: 4b345cfd1c4ac691-MAD
CF-Visitor: {"scheme":"https"}
pragma: no-cache
cache-control: no-cache
accept: application/json, text/plain, */*
origin: https://app.example.com
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
referer: https://app.example.com/auth/login
accept-language: en-US,en;q=0.9,en-GB;q=0.8,pl;q=0.7
cookie: many_encrypted_cookies; .AspNetCore.Identity.Application=something_encrypted;
CF-Connecting-IP: 83.41.81.250
True-Client-IP: 83.41.81.250
CDN-Loop: cloudflare
HTTP/1.1 400 Bad Request
Connection: close
Date: Wed, 06 Mar 2019 12:34:20 GMT
Server: Kestrel
Content-Length: 0
የቆሻሻ መጣያውን በቅርበት ሲመረመሩ ቃሉ ተስተውሏል። M.laga
. በስፔን ውስጥ ም.ላጋ ከተማ እንደሌለ መገመት ቀላል ነው (ግን ግን አለ
ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Nginx-Geo-Client-Country $geoip_country_name;
proxy_set_header X-Nginx-Geo-Client-City $geoip_city;
የእነዚህን ራስጌዎች ማስተላለፍ ካሰናከለ በኋላ ሁሉም ነገር ደህና ሆነ! (ብዙም ሳይቆይ መተግበሪያው ራሱ እነዚህን ራስጌዎች እንደማያስፈልጋቸው ግልጽ ሆነ።)
አሁን ችግሩን እንይ በአጠቃላይ. የቴሌኔት ጥያቄ በማቅረብ በመተግበሪያው ውስጥ በቀላሉ ሊባዛ ይችላል። localhost:80
:
GET /back/user HTTP/1.1
Host: api.app.example.com
cache-control: no-cache
accept: application/json, text/plain, */*
origin: https://app.example.com
Cookie: test=Desiree
... ይመለሳል 401 Unauthorized
, እንደተጠበቀው. ብናደርግ ምን ይሆናል፡-
GET /back/user HTTP/1.1
Host: api.app.example.com
cache-control: no-cache
accept: application/json, text/plain, */*
origin: https://app.example.com
Cookie: test=Désirée
?
ይመለሳል 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
በእኛ ጉዳይ ላይ ተጨማሪ ምክንያት ደንበኛው በአሁኑ ጊዜ በመተግበሪያው ውስጥ የ Kestrel ትግበራን ለመለወጥ እቅድ የለውም. ሆኖም፣ በAspNetCore ውስጥ ያሉ ጉዳዮች (
ለማጠቃለል፡ ማስታወሻው ከአሁን በኋላ ስለ Kestrel ወይም UTF-8 ልዩ ችግሮች (በ2019?!) አይደለም፣ ነገር ግን ስለ ጥንቃቄ እና የማያቋርጥ ጥናት ችግሮችን በሚፈልጉበት ጊዜ የሚወስዱት እያንዳንዱ እርምጃ ይዋል ይደር እንጂ ፍሬ ያፈራል. መልካም ምኞት!
PS
በብሎጋችን ላይ ያንብቡ፡-
- «
በ Kubernetes አሠራር ውስጥ 6 አዝናኝ የስርዓት ስህተቶች [እና መፍትሄዎቻቸው] "; - «
የኩበርኔትስ ምክሮች እና ዘዴዎች፡ ብጁ የስህተት ገጾች በNGINX Ingress ውስጥ "; - «
ለ Kubernetes የ Ingress መቆጣጠሪያዎች አጠቃላይ እይታ እና ንፅፅር "; - «
በኩበርኔትስ ኖዶች መካከል ፒንግዎችን መከታተል - የእኛ የምግብ አሰራር "; - «
ስለ ሊኑክስ አውታረ መረብ ንዑስ ስርዓት 3 ያልተለመዱ ጉዳዮች ».
ምንጭ: hab.com