Nginx рд╡рд░реВрди Envoy Proxy рдордзреНрдпреЗ рд╕реНрдерд▓рд╛рдВрддрд░

рд╣реЕрд▓реЛ, рд╣реЕрдмреНрд░! рдореА рдкреЛрд╕реНрдЯрдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрдгреВрди рджреЗрддреЛ: Nginx рд╡рд░реВрди Envoy Proxy рдордзреНрдпреЗ рд╕реНрдерд▓рд╛рдВрддрд░.

рджреВрдд рд╣рд╛ рд╡реИрдпрдХреНрддрд┐рдХ рд╕реЗрд╡рд╛ рдЖрдгрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓рд╛ рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рддрд░рд┐рдд рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡реНрд╣рд░ (C++ рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛) рдЖрд╣реЗ, рддреЛ рдПрдХ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдмрд╕ рдЖрдгрд┐ "рдпреБрдирд┐рд╡реНрд╣рд░реНрд╕рд▓ рдбреЗрдЯрд╛ рдкреНрд▓реЗрди" рджреЗрдЦреАрд▓ рдЖрд╣реЗ рдЬреЛ рдореЛрдареНрдпрд╛ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ "рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдореЗрд╢" рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓рд╛ рдЖрд╣реЗ. рддреЗ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕, рдПрдЪрдПрдкреНрд░реЙрдХреНрд╕реА, рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд░реНрд╕ рдЖрдгрд┐ рдХреНрд▓рд╛рдЙрдб рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд░реНрд╕ рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рджрд░рдореНрдпрд╛рди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдЧреЗрд▓реЗ. рджреВрдд рдкреНрд░рддреНрдпреЗрдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рд╕рд╛рд░ рддрдпрд╛рд░ рдХрд░рддреЛ. рдЬреЗрд╡реНрд╣рд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдордзреАрд▓ рд╕рд░реНрд╡ рд╕реЗрд╡рд╛ рдЯреНрд░реЕрдлрд┐рдХ рдПрдВрд╡реЙрдп рдореЗрд╢рдордзреВрди рд╡рд╛рд╣рддреЗ, рддреЗрд╡реНрд╣рд╛ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЗ рд╕реБрд╕рдВрдЧрдд рдирд┐рд░реАрдХреНрд╖рдгрдХреНрд╖рдорддреЗрд╕рд╣ рджреГрд╢реНрдпрдорд╛рди рдХрд░рдгреЗ, рдПрдХреВрдг рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдЯреНрдпреВрди рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдард┐рдХрд╛рдгреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрдгреЗ рд╕реЛрдкреЗ рд╣реЛрддреЗ.

рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

  • рдЖрдЙрдЯ-рдСрдл-рдкреНрд░реЛрд╕реЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░: рджреВрдд рд╣рд╛ рдПрдХ рд╕реНрд╡рдпрдВрдкреВрд░реНрдг, рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╣реЗ рдЬреЛ рдереЛрдбреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд RAM рдШреЗрддреЛ. рд╣реЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд╛рд╖рд╛ рдХрд┐рдВрд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрдЪреНрдпрд╛ рд╕рдВрдпреЛрдЧрд╛рдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ.
  • http/2 рдЖрдгрд┐ grpc рд╕рдорд░реНрдерди: рджреВрддрд╛рд▓рд╛ рдкреНрд░рдердо рд╢реНрд░реЗрдгреАрдЪреЗ http/2 рдЖрдгрд┐ рдЗрдирдХрдорд┐рдВрдЧ рдЖрдгрд┐ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА grpc рд╕рдорд░реНрдерди рдЖрд╣реЗ. рд╣реЗ http/1.1 рддреЗ http/2 рдкрд░реНрдпрдВрдд рдПрдХ рдкрд╛рд░рджрд░реНрд╢рдХ рдкреНрд░реЙрдХреНрд╕реА рдЖрд╣реЗ.
  • рдкреНрд░рдЧрдд рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ: рджреВрдд рдкреНрд░рдЧрдд рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ рдЬреНрдпрд╛рдд рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ, рд╕рд╛рдЦрд│реА рддреЛрдбрдгреЗ, рдЬрд╛рдЧрддрд┐рдХ рджрд░ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреЗ, рд╡рд┐рдирдВрддреА рдЫрд╛рдпрд╛ рдХрд░рдгреЗ, рд╕реНрдерд╛рдирд┐рдХ рдЭреЛрди рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ рдЗ.
  • рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЕрдиреЗрдЬрдореЗрдВрдЯ API: рддреБрдордЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдбрд╛рдпрдиреЕрдорд┐рдХрдкрдгреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреВрдд рдПрдХ рдордЬрдмреВрдд API рдкреНрд░рджрд╛рди рдХрд░рддреЗ.
  • рдирд┐рд░реАрдХреНрд╖рдгрдХреНрд╖рдорддрд╛: L7 рд░рд╣рджрд╛рд░реАрдЪреА рд╕рдЦреЛрд▓ рдирд┐рд░реАрдХреНрд╖рдгрдХреНрд╖рдорддрд╛, рд╡рд┐рддрд░рд┐рдд рдЯреНрд░реЗрд╕рд┐рдВрдЧрд╕рд╛рдареА рдиреЗрдЯрд┐рд╡реНрд╣ рд╕рдкреЛрд░реНрдЯ рдЖрдгрд┐ mongodb, dynamodb рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдЪреА рдирд┐рд░реАрдХреНрд╖рдгрдХреНрд╖рдорддрд╛.

рдкрд╛рдпрд░реА 1 - рдЙрджрд╛рд╣рд░рдг NGINX рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦрд╛рд╕ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдлрд╛рдЗрд▓ рд╡рд╛рдкрд░рддреЗ nginx.conf, рдкрд╛рд╕реВрди рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд NGINX рд╡рд┐рдХреА. рддреБрдореНрд╣реА рдПрдбрд┐рдЯрд░ рдЙрдШрдбреВрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкрд╛рд╣реВ рд╢рдХрддрд╛ nginx.conf

nginx рд╕реНрддреНрд░реЛрдд рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

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 рдкреЛрд░реНрдЯ 8080 рд╡рд░.
  3. рд▓рдХреНрд╖реНрдп рд╕реНрдерд╛рди рд╕реЗрдЯ рдХрд░рдгреЗ, URL рдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рднрд╛рдЧрд╛рдВрд╕рд╛рдареА рд░рд╣рджрд╛рд░реА рдХрд╢реА рд╣рд╛рддрд╛рд│рд╛рдпрдЪреА.

Envoy Proxy рд╡рд░ рд╕рд░реНрд╡ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рджреВрдд рдкреНрд░реЙрдХреНрд╕реАрдХрдбреЗ рдЖрд╣реЗ рдЪрд╛рд░ рдкреНрд░рдореБрдЦ рдкреНрд░рдХрд╛рд░, рдЬреЗ NGINX рджреНрд╡рд╛рд░реЗ рдСрдлрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдореБрдЦреНрдп рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддрд╛рдд. рдЧрд╛рднрд╛ рдЖрд╣реЗ:

  • рд╢реНрд░реЛрддреЗ: рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдХрд╢рд╛ рд╕реНрд╡реАрдХрд╛рд░рддрд╛рдд рд╣реЗ рддреЗ рдард░рд╡рддрд╛рдд. Envoy Proxy рд╕рдзреНрдпрд╛ рдлрдХреНрдд TCP-рдЖрдзрд╛рд░рд┐рдд рд╢реНрд░реЛрддреНрдпрд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ. рдПрдХрджрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреЗ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдлрд┐рд▓реНрдЯрд░рдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдХрдбреЗ рджрд┐рд▓реЗ рдЬрд╛рддреЗ.
  • рдлрд┐рд▓реНрдЯрд░: рддреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗрдд рдЬреЗ рдЗрдирдХрдорд┐рдВрдЧ рдЖрдгрд┐ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реВ рд╢рдХрддрд╛рдд. рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдордзреНрдпреЗ Gzip рд╕рд╛рд░рдЦреЗ рдлрд┐рд▓реНрдЯрд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд, рдЬреЗ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдбреЗрдЯрд╛ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░рддрд╛рдд.
  • рд░рд╛рдЙрдЯрд░: рддреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореНрд╣рдгреВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдЧрдВрддрд╡реНрдпрд╕реНрдерд╛рдирд╛рд╡рд░ рд░рд╣рджрд╛рд░реА рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛рдд.
  • рдХреНрд▓рд╕реНрдЯрд░реНрд╕: рддреЗ рд░рд╣рджрд╛рд░реА рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╛рдареА рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛рдд.

рд╡рд┐рд╢рд┐рд╖реНрдЯ NGINX рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╢реА рдЬреБрд│рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╣реЗ рдЪрд╛рд░ рдШрдЯрдХ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░реВ. рдПрдкреАрдЖрдп рдЖрдгрд┐ рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╣реЗ рджреВрддрд╛рдЪреЗ рдзреНрдпреЗрдп рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдмреЗрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди NGINX рдордзреАрд▓ рд╕реНрдерд┐рд░, рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд╡рд╛рдкрд░реЗрд▓.

рдкрд╛рдпрд░реА 2 - NGINX рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рдкрд╣рд┐рд▓рд╛ рднрд╛рдЧ nginx.conf рдХрд╛рд╣реА NGINX рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рдЬреНрдпрд╛рдВрдирд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдХрд╛рдордЧрд╛рд░ рдХрдиреЗрдХреНрд╢рди

рдЦрд╛рд▓реАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╛рдордЧрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рдирдЪреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ. рд╣реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рдорд╛рдЧрдгреА рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдХрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░реЗрд▓.

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╡рд░реНрдХрдлреНрд▓реЛ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ.

рджреВрдд рдкреНрд░рдгрд╛рд▓реАрдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдереНрд░реЗрдбрд╕рд╛рдареА рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рддрдпрд╛рд░ рдХрд░рддреЛ. рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЛ рдЬреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ

  1. рдкреНрд░рддреНрдпреЗрдХ рд╢реНрд░реЛрддреНрдпрд╛рдЪреЗ рдРрдХрдгреЗ
  2. рдирд╡реАрди рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░рдд рдЖрд╣реЗ
  3. рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдлрд┐рд▓реНрдЯрд░рдЪрд╛ рд╕рдВрдЪ рддрдпрд╛рд░ рдХрд░рдгреЗ
  4. рдХрдиреЗрдХреНрд╢рдирдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХрд╛рд│рд╛рдд рд╕рд░реНрд╡ I/O рдСрдкрд░реЗрд╢рдиреНрд╕рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛.

рдкреБрдвреАрд▓ рд╕рд░реНрд╡ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╡рд░реНрдХрд░ рдереНрд░реЗрдбрдордзреНрдпреЗ рд╣рд╛рддрд╛рд│рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рдХреЛрдгрддреНрдпрд╛рд╣реА рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рд╡рд░реНрддрдирд╛рд╕рд╣.

Envoy рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдбрд╕рд╛рдареА, рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдЖрд╣реЗ. рддреНрдпрд╛рдореБрд│реЗ HTTP/2 рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдПрдХрд╛ рд╡реЗрд│реА рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд╣реНрдп рд╣реЛрд╕реНрдЯрд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдд, рдЬрд░ рдЪрд╛рд░ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдЕрд╕рддреАрд▓ рддрд░ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддреАрдд рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд╣реНрдп рд╣реЛрд╕реНрдЯрд╕рд╛рдареА рдЪрд╛рд░ HTTP/2 рдХрдиреЗрдХреНрд╢рди рдЕрд╕рддреАрд▓. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдПрдХрд╛ рд╡рд░реНрдХрд░ рдереНрд░реЗрдбрдордзреНрдпреЗ рдареЗрд╡реВрди, рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдХреЛрдб рдмреНрд▓реЙрдХ рди рдХрд░рддрд╛ рд▓рд┐рд╣рд┐рддрд╛ рдпреЗрддрд╛рдд, рдЬрд╕реЗ рдХреА рддреЗ рдПрдХрд▓ рдереНрд░реЗрдбреЗрдб рд╣реЛрддреЗ. рдЬрд░ рдЖрд╡рд╢реНрдпрдХрддреЗрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡рд░реНрдХрд░ рдереНрд░реЗрдбреНрд╕ рд╡рд╛рдЯрдк рдХреЗрд▓реЗ рдЧреЗрд▓реЗ, рддрд░ рдпрд╛рдореБрд│реЗ рдореЗрдорд░реА рд╡рд╛рдпрд╛ рдЬрд╛рдК рд╢рдХрддреЗ, рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрдиреЗрдХреНрд╢рди рддрдпрд╛рд░ рд╣реЛрддрд╛рдд рдЖрдгрд┐ рдкреВрд▓рдордзреНрдпреЗ рдХрдиреЗрдХреНрд╢рди рдкрд░рдд рдпреЗрдгреНрдпрд╛рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рд╣реЛрддреЗ.

рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рднреЗрдЯ рджреНрдпрд╛ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдмреНрд▓реЙрдЧ.

HTTP рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рдЦрд╛рд▓реАрд▓ NGINX рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ HTTP рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рдЬрд╕реЗ рдХреА:

  • рдХреЛрдгрддреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд
  • рдбреАрдлреЙрд▓реНрдЯ рдХрд╛рд▓рдмрд╛рд╣реНрдпрддрд╛
  • Gzip рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рддреБрдореНрд╣реА рдПрдВрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдордзреАрд▓ рдлрд┐рд▓реНрдЯрд░ рд╡рд╛рдкрд░реВрди рд╣реЗ рдкреИрд▓реВ рд╕рд╛рдиреБрдХреВрд▓рд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рдЬреНрдпрд╛рдЪреА рдЖрдореНрд╣реА рдирдВрддрд░ рдЪрд░реНрдЪрд╛ рдХрд░реВ.

рдкрд╛рдпрд░реА 3 - рд╕рд░реНрд╡реНрд╣рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

HTTP рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХрдордзреНрдпреЗ, NGINX рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреЛрд░реНрдЯ 8080 рд╡рд░ рдРрдХрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдбреЛрдореЗрдирд╕рд╛рдареА рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ one.example.com ╨╕ www.one.example.com.

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

рджреВрддрд╛рдЪреНрдпрд╛ рдЖрдд, рддреЗ рд╢реНрд░реЛрддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рджреВрдд рд╢реНрд░реЛрддреЗ

Envoy Proxy рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪрд╛ рдкреИрд▓реВ рдореНрд╣рдгрдЬреЗ рддреБрдордЪреНрдпрд╛ рд╢реНрд░реЛрддреНрдпрд╛рдВрдирд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рджреВрдд рдЙрджрд╛рд╣рд░рдг рдХрд╕реЗ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ.

рдЦрд╛рд▓реАрд▓ рд╕реНрдирд┐рдкреЗрдЯ рдПрдХ рдирд╡реАрди рд╢реНрд░реЛрддрд╛ рддрдпрд╛рд░ рдХрд░реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдкреЛрд░реНрдЯ 8080 рд▓рд╛ рдмрд╛рдВрдзреАрд▓. рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдПрдВрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реАрд▓рд╛ рд╕рд╛рдВрдЧрддреЗ рдХреА рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рдХреЛрдгрддреНрдпрд╛ рдкреЛрд░реНрдЯрд╢реА рдмрд╛рдВрдзрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

Envoy Proxy рддреНрдпрд╛рдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА YAML рдиреЛрдЯреЗрд╢рди рд╡рд╛рдкрд░рддреЗ. рдпрд╛ рдиреЛрдЯреЗрд╢рдирдЪреНрдпрд╛ рдкрд░рд┐рдЪрдпрд╛рд╕рд╛рдареА, рдпреЗрдереЗ рдкрд╣рд╛ рджреБрд╡рд╛.

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

рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рд╛рдпрдЪреА рдЧрд░рдЬ рдирд╛рд╣реА рд╕рд░реНрд╡реНрд╣рд░_рдирд╛рд╡, рдХрд╛рд░рдг рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдлрд┐рд▓реНрдЯрд░ рд╣реЗ рд╣рд╛рддрд╛рд│рддреАрд▓.

рдкрд╛рдпрд░реА 4 - рд╕реНрдерд╛рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рдЬреЗрд╡реНрд╣рд╛ NGINX рдордзреНрдпреЗ рд╡рд┐рдирдВрддреА рдпреЗрддреЗ, рддреЗрд╡реНрд╣рд╛ рд╕реНрдерд╛рди рдмреНрд▓реЙрдХ рдЯреНрд░реЕрдлрд┐рдХрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рдХрд░рд╛рдпрдЪреА рдЖрдгрд┐ рдХреБрдареЗ рдорд╛рд░реНрдЧ рдХрд░рд╛рдпрдЪреА рд╣реЗ рдард░рд╡рддреЗ. рдЦрд╛рд▓реАрд▓ рддреБрдХрдбреНрдпрд╛рдд, рд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рд╕рд░реНрд╡ рд░рд╣рджрд╛рд░реА рдЕрдкрд╕реНрдЯреНрд░реАрдорд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ (рдЕрдиреБрд╡рд╛рджрдХрд╛рдЪреА рдЯреАрдк: рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рд╣рд╕рд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕рддреЛ) рдирд╛рд╡рд╛рдЪрд╛ рдХреНрд▓рд╕реНрдЯрд░ рд▓рдХреНрд╖реНрдп рдХреНрд▓рд╕реНрдЯрд░. рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЛ рдЬреНрдпрд╛рдиреЗ рд╡рд┐рдирдВрддреАрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдкрд╛рд╣рд┐рдЬреЗ. рдЖрдореНрд╣реА рдкреБрдвреАрд▓ рдЪрд░рдгрд╛рдд рдпрд╛рдмрджреНрджрд▓ рдЪрд░реНрдЪрд╛ рдХрд░реВ.

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

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

Envoy рдпреЗрдереЗ, рдлрд┐рд▓реНрдЯрд░реНрд╕ рд╣реЗ рдХрд░рддрд╛рдд.

рджреВрдд рдлрд┐рд▓реНрдЯрд░

рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА, рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рдХрд░рд╛рдпрдЪреА рд╣реЗ рдлрд┐рд▓реНрдЯрд░ рдард░рд╡рддрд╛рдд. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдЖрдореНрд╣реА рдЬреБрд│рдгрд╛рд░реЗ рдлрд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЛ рд╕рд░реНрд╡реНрд╣рд░_рдирд╛рд╡реЗ рдорд╛рдЧреАрд▓ рдЪрд░рдгрд╛рдд. рдЬреЗрд╡реНрд╣рд╛ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдпреЗрддрд╛рдд рдЬреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЛрдореЗрди рдЖрдгрд┐ рдорд╛рд░реНрдЧрд╛рдВрд╢реА рдЬреБрд│рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рд░рд╣рджрд╛рд░реА рдХреНрд▓рд╕реНрдЯрд░рдХрдбреЗ рд░рд╛рдЙрдЯ рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╣реЗ 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 рдордзреНрдпреЗ рдЕрдВрдЧрднреВрдд рдлрд┐рд▓реНрдЯрд░ рдЖрд╣реЗ. рдЗрддрд░ рдлрд┐рд▓реНрдЯрд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд Redis, рдореЛрдВрдЧреЛ, рдЯреАрд╕реАрдкреА. рдЖрдкрдг рдпреЗрдереЗ рд╕рдВрдкреВрд░реНрдг рдпрд╛рджреА рд╢реЛрдзреВ рд╢рдХрддрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг.

рдЗрддрд░ рднрд╛рд░ рд╕рдВрддреБрд▓рди рдзреЛрд░рдгрд╛рдВрдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рднреЗрдЯ рджреНрдпрд╛ рджреВрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг.

рдкрд╛рдпрд░реА 5 - рдкреНрд░реЙрдХреНрд╕реА рдЖрдгрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

NGINX рдордзреНрдпреЗ, рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рдХреНрд╖реНрдп рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рд╕рдВрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рдЬреЗ рд░рд╣рджрд╛рд░реАрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рджреЛрди рдХреНрд▓рд╕реНрдЯрд░ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рд╣реЛрддреЗ.

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

Envoy рдордзреНрдпреЗ, рд╣реЗ рдХреНрд▓рд╕реНрдЯрд░рджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рджреВрдд рдХреНрд▓рд╕реНрдЯрд░реНрд╕

рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдорддреБрд▓реНрдп рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдореНрд╣рдгреВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд░рд╣рджрд╛рд░реАрдЪреА рд╕реЗрд╡рд╛ рджреЗрдгрд╛рд░реЗ рдпрдЬрдорд╛рди рдУрд│рдЦрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. рдпрдЬрдорд╛рдирд╛рдВрд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ, рдЬрд╕реЗ рдХреА рдХрд╛рд▓рдмрд╛рд╣реНрдп, рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореНрд╣рдгреВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╣реЗ рд▓реЗрдЯрдиреНрд╕реА рдЖрдгрд┐ рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ рд╕рд╛рд░рдЦреНрдпрд╛ рдкреИрд▓реВрдВрд╡рд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

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 рдкрддреНрддреЗ рдкрд░рдд рдХреЗрд▓реЗ, рддрд░ рджреВрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реЗрд▓ рдХреА рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рджреЛрди рд╣реЛрд╕реНрдЯ рдЖрд╣реЗрдд рдЖрдгрд┐ рджреЛрдиреНрд╣реА рд▓реЛрдб рд╕рдВрддреБрд▓рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкрд░рд┐рдгрд╛рдорд╛рддреВрди рд╣реЛрд╕реНрдЯ рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реНрдпрд╛рд╕, рджреВрдд рд╣реЗ рдпрд╛рдкреБрдвреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╛рд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реЗрд▓ рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд┐рджреНрдпрдорд╛рди рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рдордзреВрди рд░рд╣рджрд╛рд░реА рдЦреЗрдЪреВрди рдШреЗрдИрд▓.

рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рдкрд╣рд╛ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг.

рдЪрд░рдг 6 - рд▓реЙрдЧ рдНрдХреНрд╕реЗрд╕ рдЖрдгрд┐ рддреНрд░реБрдЯреА

рдЕрдВрддрд┐рдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореНрд╣рдгрдЬреЗ рдиреЛрдВрджрдгреА. рддреНрд░реБрдЯреА рд▓реЙрдЧ рдбрд┐рд╕реНрдХрд╡рд░ рдврдХрд▓рдгреНрдпрд╛рдРрд╡рдЬреА, Envoy Proxy рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯреАрдХреЛрди рдШреЗрддреЗ. рд╕рд░реНрд╡ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдЖрд╣реЗрдд stdout ╨╕ stderr.

рдЬреЗрд╡реНрд╣рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рд╡рд┐рдирдВрддреА рдХрд░рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рдкреНрд░рд╡реЗрд╢ рдиреЛрдВрджреА рдкрд░реНрдпрд╛рдпреА рдЕрд╕рддрд╛рдд рдЖрдгрд┐ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. HTTP рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рд▓реЙрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рд╛ рдкреНрд░рд╡реЗрд╢_рд▓реЙрдЧ HTTP рдХрдиреЗрдХреНрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рд╕рд╛рдареА. рдорд╛рд░реНрдЧ рдПрдХрддрд░ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЕрд╕реВ рд╢рдХрддреЛ рдЬрд╕реЗ рдХреА stdout, рдХрд┐рдВрд╡рд╛ рдбрд┐рд╕реНрдХрд╡рд░реАрд▓ рдлрд╛рдЗрд▓, рддреБрдордЪреНрдпрд╛ рдЧрд░рдЬреЗрдиреБрд╕рд╛рд░.

рдЦрд╛рд▓реАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рд░реНрд╡ рдкреНрд░рд╡реЗрд╢ рд▓реЙрдЧ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрд▓ stdout (рдЕрдиреБрд╡рд╛рджрдХрд╛рдЪреА рдиреЛрдВрдж - рдбреЙрдХрд░рдЪреНрдпрд╛ рдЖрдд рджреВрдд рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА stdout рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдбреЙрдХрд░рд╢рд┐рд╡рд╛рдп рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╕, /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:

рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдПрдиреНрд╡реЙрдпрдХрдбреЗ рдПрдХ рдлреЙрд░рдореЕрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ 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)%"}

рджреВрдд рдиреЛрдВрджрдгреА рдкрджреНрдзрддреАрдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рднреЗрдЯ рджреНрдпрд╛

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

рдПрдВрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдВрддрд░реНрджреГрд╖реНрдЯреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдЧрд┐рдВрдЧ рд╣рд╛ рдПрдХрдореЗрд╡ рдорд╛рд░реНрдЧ рдирд╛рд╣реА. рддреНрдпрд╛рдд рдкреНрд░рдЧрдд рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдЖрдгрд┐ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд╖рдорддрд╛ рдЕрдВрддрд░реНрднреВрдд рдЖрд╣реЗрдд. рдЖрдкрдг рдпреЗрдереЗ рдЕрдзрд┐рдХ рд╢реЛрдзреВ рд╢рдХрддрд╛ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХрд┐рдВрд╡рд╛ рдорд╛рдзреНрдпрдорд╛рддреВрди рдкрд░рд╕реНрдкрд░ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ.

рдкрд╛рдпрд░реА 7 - рд▓рд╛рдБрдЪ рдХрд░рд╛

рддреБрдореНрд╣реА рдЖрддрд╛ рддреБрдордЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди NGINX рд╡рд░реВрди Envoy Proxy рд╡рд░ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдБрдЪ рдХрд░рдгреЗ рд╣реА рд╢реЗрд╡рдЯрдЪреА рдкрд╛рдпрд░реА рдЖрд╣реЗ.

рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди рдЪрд╛рд▓рд╡рд╛

NGINX рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЗрдирдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ www www; рд╕реБрд░рдХреНрд╖рд┐рддрддрд╛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА NGINX рд▓рд╛ рдХрдореА-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ.

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдгрд╛рдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреА рдЖрд╣реЗ рд╣реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯреАрдХреЛрди рдШреЗрддреЗ. рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдХрдВрдЯреЗрдирд░рджреНрд╡рд╛рд░реЗ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЪрд╛рд▓рд╡рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдХрдореА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЕрд╕рд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ.

рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рд▓рд╛рдБрдЪ рдХрд░рдд рдЖрд╣реЗ

рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рд╣реЛрд╕реНрдЯрд╡рд░реАрд▓ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рджреНрд╡рд╛рд░реЗ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдЪрд╛рд▓рд╡реЗрд▓. рд╣рд╛ рдЖрджреЗрд╢ рдПрдВрд╡реЙрдпрд▓рд╛ рдкреЛрд░реНрдЯ 80 рд╡рд░ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдРрдХрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рджреЗрддреЛ. рддрдерд╛рдкрд┐, рд▓рд┐рд╕рдирд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, Envoy рдкреНрд░реЙрдХреНрд╕реА рдкреЛрд░реНрдЯ 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. рдХрд╛рд░рдг рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХрдиреЗрдХреНрд╢рдиреНрд╕ рдХрд╛рдо рдХрд░рдд рдирд╛рд╣реАрдд рдЖрдгрд┐ рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАрдд. рдореНрд╣рдгреВрди, рджреВрдд рдкреНрд░реЙрдХреНрд╕реАрдХрдбреЗ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА рдХреЛрдгрддреЗрд╣реА рдЧрдВрддрд╡реНрдпрд╕реНрдерд╛рди рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАрдд. рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдПрдВрд╡реЙрдпрд╕рд╛рдареА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╢реА рдЬреБрд│рдгрд╛рд░реА HTTP рд╕реЗрд╡рд╛рдВрдЪреА рдорд╛рд▓рд┐рдХрд╛ рд╕реБрд░реВ рдХрд░реЗрд▓.

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

рдЙрдкрд▓рдмреНрдз рд╕реЗрд╡рд╛рдВрдореБрд│реЗ, рджреВрдд рддреНрдпрд╛рдЪреНрдпрд╛ рдЧрдВрддрд╡реНрдпрд╕реНрдерд╛рдирд╛рд╡рд░ рд░рд╣рджрд╛рд░реА рдпрд╢рд╕реНрд╡реАрдкрдгреЗ рдкреНрд░реЙрдХреНрд╕реА рдХрд░реВ рд╢рдХрддреЛ.

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

рдХреЛрдгрддреНрдпрд╛ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рдиреЗ рд╡рд┐рдирдВрддреАрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рд╣реЗ рджрд░реНрд╢рд╡рд┐рдгрд╛рд░рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд▓реЙрдЧрдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдНрдХреНрд╕реЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреАрд▓ рджрд┐рд╕реЗрд▓.

рдЕрддрд┐рд░рд┐рдХреНрдд HTTP рдкреНрд░рддрд┐рд╕рд╛рдж рд╢реАрд░реНрд╖рд▓реЗрдЦ

рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдирдВрддреАрдЪреНрдпрд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рд╢реАрд░реНрд╖рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд HTTP рд╢реАрд░реНрд╖рд▓реЗрдЦ рджрд┐рд╕рддреАрд▓. рд╣реЗрдбрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╣реЛрд╕реНрдЯрдиреЗ рд╡рд┐рдирдВрддреАрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдд рдШрд╛рд▓рд╡рд▓реЗрд▓рд╛ рд╡реЗрд│ рджрд╛рдЦрд╡рддреЛ. рдорд┐рд▓рд┐рд╕реЗрдХрдВрджрд╛рдВрдордзреНрдпреЗ рд╡реНрдпрдХреНрдд рдХреЗрд▓реЗ. рдЬрд░ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдЯрдиреНрд╕реАрдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рд╕реЗрд╡реЗрдЪрд╛ рд╡реЗрд│ рдард░рд╡рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓ рддрд░ рд╣реЗ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ.

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 }

рдЕрдиреБрд╡рд╛рджрдХрд╛рдХрдбреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА

рдПрдВрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реВрдЪрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рдЖрдврд│реВ рд╢рдХрддрд╛рдд https://www.getenvoy.io/

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рддрдкрдгреЗ, rpm рдордзреНрдпреЗ systemd рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирд╕рддреЗ.

systemd рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╛ /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 рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдареЗрд╡рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.

рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рд╡рд╛рдкрд░реВрди рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдЪреЕрдЯ рдЖрд╣реЗ: https://t.me/envoyproxy_ru

рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рдореНрд╣рдгреВрди, рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рд╕рд╛рдареА рдХреЛрдг рдордд рджреЗрдК рд╢рдХреЗрд▓: https://github.com/envoyproxy/envoy/issues/378

рдХреЗрд╡рд│ рдиреЛрдВрджрдгреАрдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреЗрдЪ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрдК рд╢рдХрддрд╛рдд. рд╕рд╛рдЗрди рдЗрди рдХрд░рд╛, рдЖрдкрд▓реЗ рд╕реНрд╡рд╛рдЧрдд рдЖрд╣реЗ.

рдпрд╛ рдкреЛрд╕реНрдЯрдиреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ рдХрд╛?

  • рд╣реЛрдп

  • рдирд╛рд╣реА

75 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 18 рд╡рд╛рдкрд░рдХрд░реНрддреЗ рджреВрд░ рд░рд╛рд╣рд┐рд▓реЗ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛