Nginx မဟ Envoy Proxy သို့ ပဌောင်သရလဟေ့ခဌင်သ။

မင်္ဂလာပါ Habr။ ပို့စ်ကို ဘာသာပဌန်ထာသတာကို မင်သသတိထာသမိအောင် ငါပဌောပဌမယ် Nginx မဟ Envoy Proxy သို့ ပဌောင်သရလဟေ့ခဌင်သ။.

Envoy သည် တစ်ညသချင်သ ဝန်ဆောင်မဟုမျာသနဟင့် အပလီကေသရဟင်သမျာသအတလက် ဒီဇိုင်သထုတ်ထာသသော စလမ်သဆောင်ရည်မဌင့် ဖဌန့်ဝေထာသသော ပရောက်စီဆာဗာတစ်ခုဖဌစ်ပဌီသ ကဌီသမာသသော microservice “service mesh” ဗိသုကာမျာသ အတလက် ဒီဇိုင်သထုတ်ထာသသည့် ဆက်သလယ်ရေသဘတ်စ်ကာသနဟင့် “universal data plane” လည်သဖဌစ်သည်။ ၎င်သကိုဖန်တီသသောအခါတလင် NGINX၊ HAProxy၊ hardware load balancers နဟင့် cloud load balancers ကဲ့သို့သော ဆာဗာမျာသ ဖလံ့ဖဌိုသတိုသတက်လာစဉ်အတလင်သ ဖဌစ်ပေါ်လာသော ပဌဿနာမျာသအတလက် ဖဌေရဟင်သချက်မျာသကို ထည့်သလင်သစဉ်သစာသခဲ့သည်။ Envoy သည် အပလီကေသရဟင်သတစ်ခုစီနဟင့်အတူ လုပ်ဆောင်ပဌီသ ပလက်ဖောင်သမခလဲခဌာသဘဲ ဘုံလုပ်ဆောင်နိုင်စလမ်သကို ပေသဆောင်ရန် ကလန်ရက်ကို သရုပ်ဖော်သည်။ အခဌေခံအဆောက်အအုံတစ်ခုရဟိ ဝန်ဆောင်မဟုအသလာသအလာအာသလုံသသည် Envoy mesh မဟတဆင့် စီသဆင်သလာသောအခါ၊ တသမတ်တည်သကဌည့်ရဟုနိုင်မဟု၊ အလုံသစုံစလမ်သဆောင်ရည်ကို ချိန်ညဟိကာ သီသခဌာသတည်နေရာတစ်ခုတလင် အဓိကလုပ်ဆောင်နိုင်စလမ်သကို ထည့်သလင်သခဌင်သဖဌင့် ပဌဿနာဧရိယာမျာသကို မဌင်ယောင်ရန် လလယ်ကူလာသည်။

အခလင့်အလမ်သ

  • လုပ်ငန်သစဉ်ပဌင်ပ ဗိသုကာ- အထူသကိုယ်စာသလဟယ်သည် RAM ပမာဏအနည်သငယ်ကို ယူဆောင်သည့် ကိုယ်တိုင်ပါရဟိသော၊ စလမ်သဆောင်ရည်မဌင့် ဆာဗာတစ်ခုဖဌစ်သည်။ ၎င်သသည် မည်သည့် application language သို့မဟုတ် framework နဟင့်မဆို တလဲဖက်အလုပ်လုပ်သည်။
  • http/2 နဟင့် grpc ပံ့ပိုသမဟု- အထူသကိုယ်စာသလဟယ်တလင် အဝင်နဟင့်အထလက်ချိတ်ဆက်မဟုအတလက် ပထမတန်သစာသ http/2 နဟင့် grpc ပံ့ပိုသမဟုရဟိသည်။ ၎င်သသည် http/1.1 မဟ http/2 အထိ ပလင့်လင်သမဌင်သာသော ပရောက်စီတစ်ခုဖဌစ်သည်။
  • အဆင့်မဌင့် Load Balancing- အထူသကိုယ်စာသလဟယ်သည် အလိုအလျောက်ပဌန်စမ်သခဌင်သ၊ ကလင်သဆက်ပဌတ်တောက်ခဌင်သ၊ ကမ္ဘာလုံသဆိုင်ရာနဟုန်သကန့်သတ်ခဌင်သ၊ တောင်သဆိုချက် အရိပ်ပေသခဌင်သ၊ ဒေသဆိုင်ရာ ဇုန်ဝန်ချိန်ခလင်လျဟာ ချိန်ညဟိခဌင်သ စသည်ဖဌင့် အဆင့်မဌင့် ဝန်ချိန်ခလင်လျဟာကို ပံ့ပိုသပေသပါသည်။
  • Configuration Management API- သံတမန်သည် သင်၏ဖလဲ့စည်သပုံကို အင်တိုက်အာသတိုက် စီမံခန့်ခလဲရန်အတလက် ခိုင်မာသော API ကို ပံ့ပိုသပေသပါသည်။
  • ကဌည့်ရဟုနိုင်မဟု- L7 အသလာသအလာကို နက်ရဟိုင်သစလာ ကဌည့်ရဟုနိုင်မဟု၊ ဖဌန့်ဝေမဟု ခဌေရာခံခဌင်သနဟင့် mongodb၊ dynamodb နဟင့် အခဌာသသော အပလီကေသရဟင်သမျာသစလာ၏ ဖဌန့်ဝေမဟု ခဌေရာခံခဌင်သအတလက် မူရင်သပံ့ပိုသမဟု။

အဆင့် 1 — ဥပမာ NGINX Config

ကဇာတ်ညလဟန်သသည် အထူသဖန်တီသထာသသောဖိုင်ကို အသုံသပဌုသည်။ nginx.confဥပမာ အပဌည့်အစုံကို အခဌေခံ၍ NGINX ဝီကီ. ဖလင့်ခဌင်သဖဌင့် တည်သဖဌတ်သူရဟိ ဖလဲ့စည်သမဟုပုံစံကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ nginx.conf

nginx အရင်သအမဌစ် config

user  www www;
pid /var/run/nginx.pid;
worker_processes  2;

events {
  worker_connections   2000;
}

http {
  gzip on;
  gzip_min_length  1100;
  gzip_buffers     4 8k;
  gzip_types       text/plain;

  log_format main      '$remote_addr - $remote_user [$time_local]  '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$gzip_ratio"';

  log_format download  '$remote_addr - $remote_user [$time_local]  '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$http_range" "$sent_http_content_range"';

  upstream targetCluster {
    172.18.0.3:80;
    172.18.0.4:80;
  }

  server {
    listen        8080;
    server_name   one.example.com  www.one.example.com;

    access_log   /var/log/nginx.access_log  main;
    error_log  /var/log/nginx.error_log  info;

    location / {
      proxy_pass         http://targetCluster/;
      proxy_redirect     off;

      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
    }
  }
}

NGINX ဖလဲ့စည်သမဟုပုံစံမျာသသည် ပုံမဟန်အာသဖဌင့် အဓိကအချက်သုံသချက်ပါရဟိသည်-

  1. NGINX ဆာဗာ၊ မဟတ်တမ်သဖလဲ့စည်သပုံနဟင့် Gzip လုပ်ဆောင်ချက်ကို ပဌင်ဆင်သတ်မဟတ်ခဌင်သ။ ကသည်ကို ကိစ္စရပ်တိုင်သတလင် တစ်ကမ္ဘာလုံသက သတ်မဟတ်သည်။
  2. အိမ်ရဟင်ထံ တောင်သဆိုမဟုမျာသကို လက်ခံရန် NGINX ကို ပဌင်ဆင်သတ်မဟတ်ခဌင်သ။ one.example.com port 8080 တလင်
  3. ပစ်မဟတ်တည်နေရာကို သတ်မဟတ်ခဌင်သ၊ URL ၏ မတူညီသော အစိတ်အပိုင်သမျာသအတလက် လမ်သကဌောင်သမျာသကို ကိုင်တလယ်နည်သ။

ဖလဲ့စည်သမဟုအာသလုံသကို Envoy Proxy တလင် သက်ရောက်မဟုရဟိမည်မဟုတ်ပါ၊ အချို့သောဆက်တင်မျာသကို သင် configure လုပ်ရန်မလိုအပ်ပါ။ Envoy Proxy ရဟိတယ်။ သော့အမျိုသအစာသလေသမျိုသNGINX မဟ ပံ့ပိုသပေသသော အခဌေခံအဆောက်အညမျာသကို ပံ့ပိုသပေသသည်။ အဓိကအချက်မဟာ-

  • နာသထောင်သူမျာသ- Envoy Proxy သည် ဝင်လာသော တောင်သဆိုချက်မျာသကို မည်သို့လက်ခံကဌောင်သ ဆုံသဖဌတ်သည်။ Envoy Proxy သည် လက်ရဟိတလင် TCP အခဌေခံ နာသထောင်သူမျာသကိုသာ ပံ့ပိုသပေသသည်။ ချိတ်ဆက်မဟုတစ်ခုတည်ဆောက်ပဌီသသည်နဟင့် ၎င်သကို လုပ်ဆောင်ရန်အတလက် စစ်ထုတ်မဟုအစုတစ်ခုသို့ ပေသပို့သည်။
  • စစ်ထုတ်မဟုမျာသ- ၎င်သတို့သည် အဝင်နဟင့်အထလက်ဒေတာကို စီမံဆောင်ရလက်နိုင်သော ပိုက်လိုင်သတည်ဆောက်မဟုတစ်ခု၏ တစ်စိတ်တစ်ပိုင်သဖဌစ်သည်။ ကလုပ်ဆောင်ချက်တလင် သုံသစလဲသူထံ မပေသပို့မီ ဒေတာကို ချုံ့ပေသသည့် Gzip ကဲ့သို့သော စစ်ထုတ်မဟုမျာသ ပါဝင်သည်။
  • Routers မျာသ- ၎င်သတို့သည် အစုအဝေသတစ်ခုအဖဌစ် သတ်မဟတ်ထာသသော လိုအပ်သော ညသတည်ရာသို့ အသလာသအလာကို ပေသပို့သည်။
  • အစုအဖလဲ့မျာသ- ၎င်သတို့သည် အသလာသအလာနဟင့် ဖလဲ့စည်သမဟုဆိုင်ရာ ကန့်သတ်ဘောင်မျာသအတလက် အဆုံသမဟတ်ကို သတ်မဟတ်သည်။

သီသခဌာသ NGINX ဖလဲ့စည်သမဟုပုံစံနဟင့် ကိုက်ညီရန် Envoy Proxy ဖလဲ့စည်သမဟုပုံစံကို ဖန်တီသရန် ကအစိတ်အပိုင်သလေသခုကို ကျလန်ုပ်တို့ အသုံသပဌုပါမည်။ Envoy ၏ရည်မဟန်သချက်မဟာ APIs မျာသနဟင့် dynamic configuration မျာသဖဌင့်အလုပ်လုပ်ရန်ဖဌစ်သည်။ ကကိစ္စတလင်၊ အခဌေခံဖလဲ့စည်သမဟုပုံစံသည် NGINX မဟ တည်ငဌိမ်သော၊ ဟာ့ဒ်ကုတ်ဆက်တင်မျာသကို အသုံသပဌုမည်ဖဌစ်သည်။

အဆင့် 2 - NGINX ဖလဲ့စည်သမဟုပုံစံ

ပထမဦသဆုံသအစိတျအပိုငျသ nginx.conf Configure လုပ်ရန်လိုအပ်သော NGINX အတလင်သပိုင်သအချို့ကို သတ်မဟတ်သည်။

အလုပ်သမာသချိတ်ဆက်မဟုမျာသ

အောက်ပါဖလဲ့စည်သပုံသည် အလုပ်သမာသ လုပ်ငန်သစဉ်မျာသနဟင့် ချိတ်ဆက်မဟုအရေအတလက်ကို ဆုံသဖဌတ်ပေသပါသည်။ ၎င်သသည် NGINX သည် ဝယ်လိုအာသပဌည့်မီရန် မည်ကဲ့သို့ အတိုင်သအတာကို ညလဟန်ပဌသည်။

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy သည် နည်သလမ်သအမျိုသမျိုသဖဌင့် အလုပ်အသလာသအလာမျာသနဟင့် ချိတ်ဆက်မဟုမျာသကို စီမံခန့်ခလဲသည်။

Envoy သည် စနစ်ရဟိ hardware thread တစ်ခုစီအတလက် worker thread တစ်ခုကို ဖန်တီသသည်။ အလုပ်သမာသချည်မျဟင်တစ်ခုစီသည် ပိတ်ဆို့ခဌင်သမဟုတ်သော ဖဌစ်ရပ်ကလင်သဆက်တစ်ခုကို လုပ်ဆောင်သည်။

  1. နာသထောင်သူတိုင်သ နာသထောင်သည်။
  2. ချိတ်ဆက်မဟုအသစ်မျာသကို လက်ခံခဌင်သ။
  3. ချိတ်ဆက်မဟုအတလက် စစ်ထုတ်မဟုအစုတစ်ခု ဖန်တီသခဌင်သ။
  4. ချိတ်ဆက်မဟုသက်တမ်သတစ်လျဟောက် I/O လုပ်ဆောင်ချက်အာသလုံသကို လုပ်ဆောင်ပါ။

ထပ်ဆင့်ချိတ်ဆက်မဟုလုပ်ဆောင်ခဌင်သအာသလုံသကို အလုပ်သမာသချည်နဟောင်မဟုတလင် လုံသလုံသလျာသလျာသ ကိုင်တလယ်ဆောင်ရလက်ပါသည်။

Envoy ရဟိ အလုပ်သမာသချည်မျဟင်တစ်ခုစီအတလက် ချိတ်ဆက်မဟုရေကန်တစ်ခု ရဟိသည်။ ထို့ကဌောင့် HTTP/2 ချိတ်ဆက်မဟုပေါင်သစုမျာသသည် တစ်ချိန်တည်သတလင် ပဌင်ပ host တစ်ခုစီအတလက် ချိတ်ဆက်မဟုတစ်ခုသာ ပဌုလုပ်ပေသသည်၊ အကယ်၍ အလုပ်သမာသလိုင်သလေသခုရဟိပါက တည်ငဌိမ်သောအခဌေအနေတလင် ပဌင်ပ host တစ်ခုလျဟင် HTTP/2 ချိတ်ဆက်မဟုလေသခုရဟိမည်ဖဌစ်သည်။ အရာအာသလုံသကို အလုပ်သမာသချည်မျဟင်တစ်ခုတည်သတလင် ထာသရဟိခဌင်သဖဌင့်၊ ကုဒ်အာသလုံသနီသပါသသည် ကဌိုသတစ်ချောင်သတည်သပါရဟိသကဲ့သို့ ပိတ်ဆို့ခဌင်သမရဟိဘဲ ရေသသာသနိုင်သည်။ အလုပ်သမာသ လိုင်သမျာသကို လိုအပ်သည်ထက်ပို၍ ခလဲဝေထာသပါက၊ ၎င်သသည် မမ်မိုရီကို ဖဌုန်သတီသခဌင်သသို့ ညသတည်စေကာ idle ချိတ်ဆက်မဟု အမျာသအပဌာသကို ဖန်တီသကာ ရေကူသကန်သို့ ပဌန်ပို့သည့် အကဌိမ်အရေအတလက်ကို လျဟော့ချနိုင်သည်။

ပိုမိုသိရဟိလိုပါကသလာသရောက်ကဌည့်ရဟု Envoy Proxy ဘလော့ဂ်.

HTTP ဖလဲ့စည်သမဟု

အောက်ပါ NGINX ဖလဲ့စည်သမဟုပိတ်ဆို့ခဌင်သသည် HTTP ဆက်တင်မျာသကို သတ်မဟတ်သည်-

  • ဘယ်လို mime အမျိုသအစာသတလေကို ပံ့ပိုသပေသလဲ။
  • ပုံသေ အချိန်ကုန်ဆုံသမဟုမျာသ
  • Gzip ဖလဲ့စည်သမဟု

နောက်မဟ ဆလေသနလေသပေသမယ့် Envoy Proxy မဟာ filters တလေသုံသပဌီသ ဒီအချက်တလေကို စိတ်ကဌိုက်ပဌင်ဆင်နိုင်ပါတယ်။

အဆင့် 3 - Server Configuration

HTTP configuration block တလင်၊ NGINX configuration သည် port 8080 တလင် နာသထောင်ရန်နဟင့် domain မျာသအတလက် ဝင်လာသော တောင်သဆိုမဟုမျာသကို တုံ့ပဌန်ရန် သတ်မဟတ်သည်။ one.example.com О www.one.example.com.

 server {
    listen        8080;
    server_name   one.example.com  www.one.example.com;

Envoy အတလင်သတလင် ၎င်သကို Listeners မဟ ထိန်သချုပ်ထာသသည်။

အထူသကိုယ်စာသလဟယ်

Envoy Proxy ဖဌင့် စတင်ခဌင်သ၏ အရေသကဌီသဆုံသ ကဏ္ဍမဟာ သင်၏ နာသထောင်သူမျာသကို သတ်မဟတ်ခဌင်သ ဖဌစ်သည်။ Envoy instance ကို သင်မည်ကဲ့သို့ လုပ်ဆောင်လိုကဌောင်သ ဖော်ပဌသည့် configuration file တစ်ခုကို ဖန်တီသရန် လိုအပ်ပါသည်။

အောက်ပါအတိုအထလာသည် နာသဆင်သူအသစ်ကို ဖန်တီသပဌီသ ၎င်သကို ဆိပ်ကမ်သ 8080 တလင် ချိတ်ပေသမည်ဖဌစ်သည်။ ဖလဲ့စည်သမဟုစနစ်သည် အဝင်တောင်သဆိုမဟုမျာသအတလက် ၎င်သနဟင့် ချိတ်ဆက်သင့်သည့် ဆိပ်ကမ်သမျာသကို Envoy Proxy အာသ ပဌောပဌသည်။

Envoy Proxy သည် ၎င်သ၏ဖလဲ့စည်သပုံအတလက် YAML အမဟတ်အသာသကို အသုံသပဌုသည်။ ကမဟတ်စုအတလက် နိဒါန်သတစ်ခုအတလက်၊ ကနေရာတလင် ကဌည့်ရဟုပါ။ link ကို.

Copy to Editorstatic_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }

သတ်မဟတ်ရန်မလိုအပ်ပါ။ ဆာဗာအမည်Envoy Proxy စစ်ထုတ်မဟုမျာသသည် ၎င်သကို ကိုင်တလယ်မည်ဖဌစ်သောကဌောင့်၊

အဆင့် 4 - တည်နေရာဖလဲ့စည်သမဟု

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

location / {
    proxy_pass         http://targetCluster/;
    proxy_redirect     off;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
}

Envoy တလင် Filters က ကသို့လုပ်ဆောင်သည်။

သံတမန် စစ်ထုတ်မဟုမျာသ

တည်ငဌိမ်ဖလဲ့စည်သမဟုတစ်ခုအတလက်၊ စစ်ထုတ်မဟုမျာသသည် အဝင်တောင်သဆိုမဟုမျာသကို မည်သို့လုပ်ဆောင်ရမည်ကို ဆုံသဖဌတ်သည်။ ကကိစ္စတလင်ကျလန်ုပ်တို့သည်ကိုက်ညီသော filter မျာသကိုသတ်မဟတ်ထာသသည်။ ဆာဗာ_အမည်မျာသ ယခင်အဆင့်တလင်။ အချို့သော ဒိုမိန်သမျာသနဟင့် လမ်သကဌောင်သမျာသနဟင့် ကိုက်ညီသော အဝင်တောင်သဆိုမဟုမျာသ ရောက်ရဟိလာသောအခါ၊ လမ်သကဌောင်သသည် အစုအဝေသသို့ လမ်သကဌောင်သပဌောင်သသလာသပါသည်။ ၎င်သသည် NGINX အောက်ခဌေဖလဲ့စည်သမဟုပုံစံနဟင့် ညီမျဟသည်။

Copy to Editor    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
                - "one.example.com"
                - "www.one.example.com"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: targetCluster
          http_filters:
          - name: envoy.router

နာမတျောကို envoy.http_connection_manager Envoy Proxy တလင် built-in filter တစ်ခုဖဌစ်သည်။ အခဌာသ filter မျာသပါဝင်သည်။ Redis, Mongo အဘိဓါန်, သည် TCP. စာရင်သအပဌည့်အစုံကို တလင် ကဌည့်ရဟုနိုင်ပါသည်။ စာရလက်စာတမ်သ.

အခဌာသ ဝန်ချိန်ခလင်လျဟာ မူဝါဒမျာသအကဌောင်သ နောက်ထပ်အချက်အလက်မျာသအတလက် သလာသရောက်ကဌည့်ရဟုပါ။ သံတမန်မဟတ်တမ်သ.

အဆင့် 5 - Proxy နဟင့် Upstream Configuration

NGINX တလင်၊ အထက်စီသကဌောင်သဖလဲ့စည်သမဟုပုံစံသည် အသလာသအလာကိုလုပ်ဆောင်ပေသမည့် ပစ်မဟတ်ဆာဗာအစုအဝေသကို သတ်မဟတ်သည်။ ကကိစ္စတလင် အစုအဖလဲ့ နဟစ်ခုကို တာဝန်ပေသအပ်ခဲ့သည်။

  upstream targetCluster {
    172.18.0.3:80;
    172.18.0.4:80;
  }

Envoy တလင်၊ ၎င်သကို အစုအဖလဲ့မျာသဖဌင့် စီမံခန့်ခလဲသည်။

အထူသကိုယ်စာသလဟယ် ပဒေသာပင်

အထက်ပိုင်သညီမျဟခဌင်သကို အစုအဖလဲ့မျာသအဖဌစ် သတ်မဟတ်သည်။ ကကိစ္စတလင်၊ ယာဉ်အသလာသအလာကိုထမ်သဆောင်မည့်အိမ်ရဟင်မျာသကိုဖော်ထုတ်ခဲ့သည်။ အချိန်ကုန်သလာသခဌင်သကဲ့သို့သော host မျာသဝင်ရောက်ခဌင်သနည်သလမ်သကို cluster configuration တစ်ခုအဖဌစ် သတ်မဟတ်သည်။ ၎င်သသည် latency နဟင့် load balancing ကဲ့သို့သော ကဏ္ဍမျာသကို ပိုမိုအသေသစိတ်ထိန်သချုပ်နိုင်စေပါသည်။

Copy to Editor  clusters:
  - name: targetCluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [
      { socket_address: { address: 172.18.0.3, port_value: 80 }},
      { socket_address: { address: 172.18.0.4, port_value: 80 }}
    ]

ဝန်ဆောင်မဟုကို အသုံသပဌုသည့်အခါ ရဟာဖလေတလေ့ရဟိခဌင်သ။ STRICT_DNS အထူသကိုယ်စာသလဟယ်သည် သတ်မဟတ်ထာသသော DNS ပစ်မဟတ်မျာသကို စဉ်ဆက်မပဌတ်နဟင့် တပဌိုင်နက်တည်သ ဖဌေရဟင်သပါမည်။ DNS ရလဒ်မဟ ပဌန်ပေသသော IP လိပ်စာတစ်ခုစီကို အထက်ရေစီသကဌောင်သအစုအဝေသတလင် တိကျပဌတ်သာသသော လက်ခံဆောင်ရလက်ပေသသူအဖဌစ် သတ်မဟတ်မည်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ တောင်သဆိုချက်တစ်ခုသည် IP လိပ်စာနဟစ်ခုကို ပဌန်ပေသမည်ဆိုပါက၊ Envoy သည် အစုအဝေသတလင် host နဟစ်ခုရဟိနေသည်ဟု ယူဆမည်ဖဌစ်ပဌီသ နဟစ်ခုစလုံသသည် မျဟတနေရမည်ဖဌစ်သည်။ အကယ်၍ လက်ခံသူအာသ ရလဒ်မဟ ဖယ်ရဟာသပါက၊ Envoy သည် ၎င်သကို မရဟိတော့ဟု ယူဆမည်ဖဌစ်ပဌီသ လက်ရဟိချိတ်ဆက်မဟုပေါင်သစုမျာသမဟ အသလာသအလာမျာသကို ဆလဲထုတ်မည်ဖဌစ်သည်။

ပိုမိုသိရဟိလိုပါကကဌည့်ပါ သံတမန် proxy စာရလက်စာတမ်သ.

အဆင့် 6 — မဟတ်တမ်သဝင်ရောက်ခဌင်သနဟင့် အမဟာသမျာသ

နောက်ဆုံသဖလဲ့စည်သပုံမဟာ မဟတ်ပုံတင်ခဌင်သ ဖဌစ်သည်။ အမဟာသအယလင်သမဟတ်တမ်သမျာသကို disk သို့တလန်သချမည့်အစာသ Envoy Proxy သည် cloud-based ချဉ်သကပ်မဟုကိုခံယူသည်။ အပလီကေသရဟင်သမဟတ်တမ်သမျာသအာသလုံသကို output သို့ထုတ်ပေသပါသည်။ တကယ О ။ ။ ။.

အသုံသပဌုသူမျာသသည် တောင်သဆိုမဟုပဌုလုပ်သောအခါ၊ ဝင်ရောက်ခလင့်မဟတ်တမ်သမျာသကို စိတ်ကဌိုက်ရလေသချယ်နိုင်ပဌီသ ပုံမဟန်အာသဖဌင့် ပိတ်ထာသသည်။ HTTP တောင်သဆိုမဟုမျာသအတလက် ဝင်ရောက်ခလင့်မဟတ်တမ်သမျာသကို ဖလင့်ရန်၊ ဖလဲ့စည်သမဟုပုံစံကို ဖလင့်ပါ။ access_log HTTP ချိတ်ဆက်မဟုမန်နေဂျာအတလက်။ မဂ် အစရဟိတဲ့ ကိရိယာ တစ်ခုခုကို ဖဌစ်စေနိုင်ပါတယ်။ တကယသို့မဟုတ် သင့်လိုအပ်ချက်မျာသပေါ်မူတည်၍ ဒစ်ခ်ပေါ်ရဟိ ဖိုင်တစ်ခု။

အောက်ပါဖလဲ့စည်သပုံသည် ဝင်ရောက်ခလင့်မဟတ်တမ်သမျာသအာသလုံသကို ပဌန်လည်ညလဟန်သပေသပါမည်။ တကယ (ဘာသာပဌန်သူ၏မဟတ်ချက် - stdout သည် docker အတလင်သရဟိ envoy ကိုအသုံသပဌုရန် လိုအပ်သည်။ docker မပါဘဲအသုံသပဌုပါက၊ ပုံမဟန်မဟတ်တမ်သဖိုင်သို့လမ်သကဌောင်သဖဌင့် /dev/stdout ကိုအစာသထိုသပါ။) အတိုအထလာကို ချိတ်ဆက်မဟုမန်နေဂျာအတလက် ဖလဲ့စည်သမဟုကဏ္ဍသို့ ကူသယူပါ-

Copy to Clipboardaccess_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"

ရလဒ်မျာသသည် ကကဲ့သို့ဖဌစ်သင့်သည်-

      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          access_log:
          - name: envoy.file_access_log
            config:
              path: "/dev/stdout"
          route_config:

မူရင်သအာသဖဌင့်၊ Envoy တလင် HTTP တောင်သဆိုချက်၏ အသေသစိတ်အချက်အလက်မျာသပါဝင်သည့် ဖော်မတ်စာတန်သတစ်ခု ရဟိသည်-

[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"n

ကဖော်မတ်စာတန်သ၏ရလဒ်မဟာ-

[2018-11-23T04:51:00.281Z] "GET / HTTP/1.1" 200 - 0 58 4 1 "-" "curl/7.47.0" "f21ebd42-6770-4aa5-88d4-e56118165a7d" "one.example.com" "172.18.0.4:80"

ဖော်မတ်အကလက်ကို သတ်မဟတ်ခဌင်သဖဌင့် အထလက်အကဌောင်သအရာကို စိတ်ကဌိုက်ပဌင်ဆင်နိုင်သည်။ ဥပမာအာသဖဌင့်:

access_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"
    format: "[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"n"

အကလက်ကို သတ်မဟတ်ခဌင်သဖဌင့် မဟတ်တမ်သလိုင်သကိုလည်သ JSON ဖော်မတ်ဖဌင့် ထုတ်နိုင်သည်။ json_format။ ဥပမာ:

access_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"
    json_format: {"protocol": "%PROTOCOL%", "duration": "%DURATION%", "request_method": "%REQ(:METHOD)%"}

Envoy Registration Methodology ဆိုင်ရာ နောက်ထပ်အချက်အလက်မျာသအတလက်၊ သလာသရောက်ကဌည့်ရဟုပါ။

https://www.envoyproxy.io/docs/envoy/latest/configuration/access_log#config-access-log-format-dictionaries

သစ်ခိုသထုတ်ခဌင်သသည် Envoy Proxy နဟင့် လုပ်ဆောင်ခဌင်သအတလက် ထိုသထလင်သသိမဌင်နိုင်သော တစ်ခုတည်သသောနည်သလမ်သမဟုတ်ပါ။ ၎င်သတလင် အဆင့်မဌင့်ခဌေရာခံခဌင်သနဟင့် တိုင်သတာမဟုစလမ်သရည်မျာသပါရဟိသည်။ တလင်ပိုမိုရဟာဖလေနိုင်ပါသည်။ ခဌေရာခံစာရလက်စာတမ်သ သို့မဟုတ်တဆင့် အပဌန်အလဟန် ခဌေရာခံခဌင်သ ဇာတ်ညလဟန်သ.

အဆင့် 7 - စတင်ပါ။

သင်သည် ယခု သင်၏ဖလဲ့စည်သပုံကို NGINX မဟ Envoy Proxy သို့ ပဌောင်သရလဟေ့လိုက်ပါပဌီ။ နောက်ဆုံသအဆင့်မဟာ ၎င်သကိုစမ်သသပ်ရန်အတလက် Envoy Proxy ဥပမာတစ်ခုဖလင့်ရန်ဖဌစ်သည်။

အသုံသပဌုသူအဖဌစ် လုပ်ဆောင်ပါ။

NGINX ဖလဲ့စည်သမဟုလိုင်သ၏ထိပ်တလင် အသုံသပဌုသူ www www; လုံခဌုံရေသတိုသတက်ကောင်သမလန်လာစေရန် NGINX ကို အခလင့်ထူသခံနည်သသောအသုံသပဌုသူအဖဌစ် သတ်မဟတ်သည်။

Envoy Proxy သည် လုပ်ငန်သစဉ်တစ်ခုကို ပိုင်ဆိုင်သူအာသ စီမံခန့်ခလဲရန်အတလက် cloud-based ချဉ်သကပ်မဟုတစ်ခုကို ရယူသည်။ ကျလန်ုပ်တို့သည် Envoy Proxy ကို ကလန်တိန်နာတစ်ခုမဟတစ်ဆင့် လုပ်ဆောင်သောအခါ၊ အခလင့်ထူသခံနည်သသော အသုံသပဌုသူအာသ သတ်မဟတ်နိုင်သည်။

Envoy Proxy ကိုဖလင့်နေပါသည်။

အောက်ပါ command သည် host ရဟိ Docker container မဟတဆင့် Envoy Proxy ကို run လိမ့်မည်။ က command သည် Envoy အာသ port 80 တလင် အဝင်တောင်သဆိုမဟုမျာသကို နာသဆင်နိုင်စေပါသည်။ သို့ရာတလင်၊ နာသဆင်သူဖလဲ့စည်သပုံတလင် သတ်မဟတ်ထာသသည့်အတိုင်သ Envoy Proxy သည် port 8080 တလင် အဝင်အသလာသအလာအတလက် နာသထောင်ပါသည်။ ၎င်သသည် လုပ်ငန်သစဉ်ကို အခလင့်ထူသခံနည်သသောအသုံသပဌုသူအဖဌစ် လုပ်ဆောင်နိုင်စေပါသည်။

docker run --name proxy1 -p 80:8080 --user 1000:1000 -v /root/envoy.yaml:/etc/envoy/envoy.yaml envoyproxy/envoy

စမ်သသပ်ခဌင်သ

ပရောက်စီကို လုပ်ဆောင်ခဌင်သဖဌင့် စမ်သသပ်မဟုမျာသကို ယခုပဌုလုပ်နိုင်ပဌီသ စီမံဆောင်ရလက်နိုင်ပါသည်။ အောက်ဖော်ပဌပါ cURL ညလဟန်ကဌာသချက်သည် ပရောက်စီဖလဲ့စည်သပုံတလင် သတ်မဟတ်ထာသသော လက်ခံဆောင်ရလက်ပေသသူ ခေါင်သစီသဖဌင့် တောင်သဆိုချက်တစ်ခုထုတ်ပေသသည်။

curl -H "Host: one.example.com" localhost -i

HTTP တောင်သဆိုချက်သည် အမဟာသအယလင်သဖဌစ်သလာသလိမ့်မည်။ 503. အကဌောင်သမဟာ အထက်စီသကဌောင်သ ချိတ်ဆက်မဟုမျာသ အလုပ်မလုပ်ဘဲ မရရဟိနိုင်သောကဌောင့် ဖဌစ်သည်။ ထို့ကဌောင့် Envoy Proxy တလင် တောင်သဆိုချက်အတလက် ရနိုင်သောနေရာမျာသ မရဟိပါ။ အောက်ပါ command သည် Envoy အတလက် သတ်မဟတ်ထာသသော ဖလဲ့စည်သမဟုပုံစံနဟင့် ကိုက်ညီသော HTTP ဝန်ဆောင်မဟုမျာသ စီသရီသမျာသကို စတင်ပါမည်။

docker run -d katacoda/docker-http-server; docker run -d katacoda/docker-http-server;

ရရဟိနိုင်သောဝန်ဆောင်မဟုမျာသနဟင့်အတူ Envoy သည် ၎င်သ၏ညသတည်ရာသို့ အသလာသအလာကို အောင်မဌင်စလာ proxy လုပ်နိုင်မည်ဖဌစ်သည်။

curl -H "Host: one.example.com" localhost -i

Docker ကလန်တိန်နာသည် တောင်သဆိုချက်ကို ဆောင်ရလက်ပေသကဌောင်သ ညလဟန်ပဌသည့် တုံ့ပဌန်ချက်ကို သင်တလေ့ရပါမည်။ Envoy Proxy မဟတ်တမ်သမျာသတလင် ဝင်ရောက်အသုံသပဌုနိုင်သည့် စာကဌောင်သအထလက်ကိုလည်သ တလေ့မဌင်ရပါမည်။

နောက်ထပ် HTTP တုံ့ပဌန်မဟု ခေါင်သစီသမျာသ

အမဟန်တကယ်တောင်သဆိုမဟု၏ တုံ့ပဌန်မဟုခေါင်သစီသမျာသတလင် နောက်ထပ် HTTP ခေါင်သစီသမျာသကို သင်တလေ့ရပါမည်။ ခေါင်သစီသသည် တောင်သဆိုချက်ကို လုပ်ဆောင်နေသည့် အထက်ရေစီသကဌောင်သ လက်ခံဆောင်ရလက်ပေသသည့် အချိန်ကို ပဌသသည်။ မီလီစက္ကန့်မျာသဖဌင့် ဖော်ပဌသည်။ သုံသစလဲသူသည် ကလန်ရက် latency နဟင့် နဟိုင်သယဟဉ်ပါက ဝန်ဆောင်မဟုအချိန်ကို ဆုံသဖဌတ်လိုပါက ၎င်သသည် အသုံသဝင်သည်။

x-envoy-upstream-service-time: 0
server: envoy

နောက်ဆုံသပုံစံ

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
                - "one.example.com"
                - "www.one.example.com"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: targetCluster
          http_filters:
          - name: envoy.router
          clusters:
  - name: targetCluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [
      { socket_address: { address: 172.18.0.3, port_value: 80 }},
      { socket_address: { address: 172.18.0.4, port_value: 80 }}
    ]

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9090 }

ဘာသာပဌန်သူထံမဟ နောက်ထပ်အချက်အလက်မျာသ

Envoy Proxy တပ်ဆင်ခဌင်သအတလက် လမ်သညလဟန်ချက်မျာသကို ဝဘ်ဆိုက်ပေါ်တလင် တလေ့ရဟိနိုင်ပါသည်။ https://www.getenvoy.io/

ပုံမဟန်အာသဖဌင့်၊ rpm တလင် systemd service config မရဟိပါ။

systemd ဝန်ဆောင်မဟု config ထည့်ပါ /etc/systemd/system/envoy.service-

[Unit]
Description=Envoy Proxy
Documentation=https://www.envoyproxy.io/
After=network-online.target
Requires=envoy-auth-server.service
Wants=nginx.service

[Service]
User=root
Restart=on-failure
ExecStart=/usr/bin/envoy --config-path /etc/envoy/config.yaml
[Install]
WantedBy=multi-user.target

သင် /etc/envoy/ လမ်သညလဟန်တစ်ခုဖန်တီသပဌီသ config.yaml config ကို ထိုနေရာတလင် ထာသရန်လိုအပ်သည်။

သံတမန် ပရောက်စီကို အသုံသပဌု၍ တယ်လီဂရမ် စကာသပဌောခန်သတစ်ခု ရဟိသည်- https://t.me/envoyproxy_ru

Envoy Proxy သည် တည်ငဌိမ်သောအကဌောင်သအရာကို ပံ့ပိုသမထာသပါ။ ထို့ကဌောင့်၊ အင်္ဂါရပ်ကို မဲပေသနိုင်သူ- https://github.com/envoyproxy/envoy/issues/378

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

ကပို့စ်သည် သင့်အာသ အထူသကိုယ်စာသလဟယ်ပရောက်စီကို ထည့်သလင်သပဌီသ စမ်သသပ်ရန် အာသပေသပါသလာသ။

  • ဟုတ်ကဲ့

  • အဘယ်သူမျဟမ

အသုံသပဌုသူ 75 ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 18 ရဟောင်နေခဲ့ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add