Kubernetes နဟင့် ဘဝမဟနေ၍ HTTP ဆာဗာသည် စပိန်လူမျိုသမျာသကို မျက်နဟာသာမပေသပုံ

Kubernetes နဟင့် ဘဝမဟနေ၍ HTTP ဆာဗာသည် စပိန်လူမျိုသမျာသကို မျက်နဟာသာမပေသပုံ

Microsoft cloud (Azure) တလင် အပလီကေသရဟင်သ အစုအဝေသတလင် ရဟိနေသော ကျလန်ုပ်တို့၏ဖောက်သည်၏ ကိုယ်စာသလဟယ်တစ်ညသသည် ပဌဿနာတစ်ခုကို ဖဌေရဟင်သခဲ့သည်- မကဌာသေသမီက ဥရောပမဟ အချို့သောဖောက်သည်မျာသထံမဟ တောင်သဆိုချက်အချို့သည် အမဟာသအယလင်သ 400 (အမဟာသ XNUMX) ဖဌင့် အဆုံသသတ်သလာသခဲ့သည်။တောင်သဆိုမဟုမဟာသယလင်သနေခဌင်သ) အပလီကေသရဟင်သအာသလုံသကို Kubernetes တလင် ဖဌန့်ကျက်ထာသပဌီသ .NET ဖဌင့် ရေသသာသထာသသည်။

အပလီကေသရဟင်သမျာသထဲမဟ တစ်ခုသည် အသလာသအလာအာသလုံသ အဆုံသတလင် ရောက်လာသည့် API ဖဌစ်သည်။ ကအသလာသအလာကို HTTP ဆာဗာမဟ နာသထောင်သည်။ kestrel.NET ကလိုင်သယင့်က စီစဉ်ပဌီသ ပေါ့ဒ်တစ်ခုတလင် လက်ခံထာသသည်။ အမဟာသရဟာပဌင်ခဌင်သဖဌင့်၊ ပဌဿနာကို တသမတ်တည်သ ပဌန်ထုတ်ပေသသည့် သတ်သတ်မဟတ်မဟတ်အသုံသပဌုသူတစ်ညသရဟိခဌင်သအတလက် ကျလန်ုပ်တို့ ကံကောင်သခဲ့ပါသည်။ သို့သော်၊ ယာဉ်ကဌောအသလာသအလာ ကလင်သဆက်ကဌောင့် အရာအာသလုံသ ရဟုပ်ထလေသခဲ့သည်-

Kubernetes နဟင့် ဘဝမဟနေ၍ HTTP ဆာဗာသည် စပိန်လူမျိုသမျာသကို မျက်နဟာသာမပေသပုံ

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 ကသာ ဒီပဌဿနာကို ဖဌေရဟင်သနိုင်မယ်လို့ ထင်ရပေမယ့် traffic chain အကဌောင်သ ထပ်ခါတလဲလဲ ပဌောပါညသမယ်။

Kubernetes နဟင့် ဘဝမဟနေ၍ HTTP ဆာဗာသည် စပိန်လူမျိုသမျာသကို မျက်နဟာသာမပေသပုံ

စုံစမ်သစစ်ဆေသမဟု

အသလာသအလာ နာသထောင်တာက ပိုကောင်သပါတယ်။ အဲဒီ သီသခဌာသ node ပေါ်မဟာKubernetes က pod တစ်ခုကို ဖဌန့်ကျက်ထာသရာ၊ အမဟိုက်ပုံကဌီသ၏ ပမာဏသည် အနည်သဆုံသ တစ်ခုခုကို လျင်မဌန်စလာ ရဟာတလေ့နိုင်မည်ဖဌစ်သည် ။ အမဟန်ပင်၊ ၎င်သကိုစစ်ဆေသသောအခါ၊ အောက်ပါဘောင်ကို သတိပဌုမိသည်-

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. စပိန်တလင် M.laga မဌို့မရဟိဟု ခန့်မဟန်သရလလယ်ကူသည် (သို့သော် ရဟိပါသည်။ ဂါ) ကအကဌံအစည်ကိုရယူပဌီသ လလန်ခဲ့သည့်တစ်လက ထည့်သလင်သထာသသည် (ဖောက်သည်၏တောင်သဆိုချက်အရ) ထည့်သလင်သထာသသည်ကို ကျလန်ုပ်တို့တလေ့ခဲ့သည့် Ingress configs မျာသကို ကဌည့်ရဟုခဲ့သည်။ "အန္တရာယ်မရဟိ" အတိုအထလာ:

    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;

ကခေါင်သစီသမျာသကို ထပ်ဆင့်ပို့ခဌင်သကို ပိတ်ပဌီသနောက်၊ အာသလုံသ အဆင်ပဌေသလာသပါသည်။ (အပလီကေသရဟင်သကိုယ်တိုင်က ဒီခေါင်သစီသတလေကို မလိုအပ်တော့ဘူသဆိုတာ မကဌာခင်မဟာ ရဟင်သပါတယ်။)

အခု ပဌဿနာကို ကဌည့်ရအောင် ပိုယေဘုယျအာသဖဌင့်. telnet တောင်သဆိုမဟုပဌုလုပ်ခဌင်သဖဌင့် ၎င်သကို အပလီကေသရဟင်သအတလင်သတလင် အလလယ်တကူ ပဌန်လည်ထုတ်လုပ်နိုင်သည်။ 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 မပေသနိုင် UTF-8 တလင် မဟန်ကန်သော အက္ခရာမျာသဖဌင့် HTTP ခေါင်သစီသမျာသကို မဟန်ကန်စလာ လုပ်ဆောင်ပဌီသ မဌို့ကဌီသအမျာသအပဌာသ၏ အမည်မျာသတလင်ပါရဟိသည်။

ကျလန်ုပ်တို့၏ကိစ္စတလင် နောက်ထပ်အချက်တစ်ခုမဟာ သုံသစလဲသူသည် အပလီကေသရဟင်သတလင် Kestrel ၏အကောင်အထည်ဖော်မဟုကို ပဌောင်သလဲရန် လောလောဆယ် အစီအစဉ်မရဟိသေသသောကဌောင့်ဖဌစ်သည်။ သို့သော် AspNetCore ကိုယ်တိုင်က ပဌဿနာမျာသ (№4318, №7707) အဲဒါက အထောက်အကူမဖဌစ်ဘူသလို့ ပဌောကဌတယ်...

အကျဉ်သချုပ်ပဌောရလျဟင်- မဟတ်စုသည် Kestrel သို့မဟုတ် UTF-8 (2019 တလင်?!) ၏ သီသခဌာသပဌဿနာမျာသအကဌောင်သ မဟုတ်တော့ဘဲ၊ ထိုအချက်နဟင့်ပတ်သက်၍ သတိပဋ္ဌာန်နဲ့ တသမတ်တည်သ လေ့လာတယ်။ ပဌဿနာတလေကို ရဟာဖလေရင်သ သင်လျဟောက်လဟမ်သတဲ့ ခဌေလဟမ်သတိုင်သဟာ အနဟေသနဲ့အမဌန်ဆိုသလို အသီသအပလင့်တလေ ဖဌစ်ထလန်သလာပါလိမ့်မယ်။ ကံကောင်သပါစေ!

PS

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add