เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบˆเบฒเบ Nginx เป„เบ›เบซเบฒเบ•เบปเบงเปเบ—เบ™ Envoy

เบชเบฐเบšเบฒเบเบ”เบต, Habr! เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ™เปเบฒโ€‹เป€เบญเบปเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบญเบšโ€‹เป„เบ”เป‰โ€‹: เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบˆเบฒเบ Nginx เป„เบ›เบซเบฒเบ•เบปเบงเปเบ—เบ™ Envoy.

Envoy เป€เบ›เบฑเบ™เป€เบŠเบตเบšเป€เบงเบตเบžเบฃเบฑเบญเบเบŠเบตเบ—เบตเปˆเปเบˆเบเบขเบฒเบเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡ (เบ‚เบฝเบ™เปƒเบ™ C ++) เบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบฅเบปเบ”เป€เบกเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปเบฅเบฐ "เบเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›" เบ—เบตเปˆเบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ "เบ•เบฒเบซเบ™เปˆเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™" เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡ microservice. เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เบกเบฑเบ™, เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบŠเบฑเปˆเบ™ NGINX, HAProxy, hardware load balancers เปเบฅเบฐ cloud load balancers เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ. Envoy เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบฝเบ‡เบ„เบนเปˆเบเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบฅเบฐ abstracts เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบปเปˆเบงเป„เบ›เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เป€เบงเบ—เบตเปƒเบ”. เป€เบกเบทเปˆเบญเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เป„เบซเบผเบœเปˆเบฒเบ™เบ•เบฒเปœเปˆเบฒเบ‡ Envoy, เบกเบฑเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบšเบฑเบ™เบซเบฒเบ”เป‰เบงเบเบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡, เบ›เบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป‚เบ”เบเบฅเบงเบก, เปเบฅเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบซเบผเบฑเบเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบฐเป€เบžเบฒเบฐ.

เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”

  • เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณเบ—เบตเปˆเบšเปเปˆเบชเบณเป€เบฅเบฑเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™: เบ—เบนเบ”เปเบกเปˆเบ™เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ•เบดเบžเบฒเบšเบชเบนเบ‡, เบšเบฑเบ™เบˆเบธ RAM เปœเป‰เบญเบเปœเบถเปˆเบ‡. เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบšเบžเบฒเบชเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบซเบผเบทเบเบญเบš.
  • http/2 เปเบฅเบฐ grpc เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™: envoy เบกเบตเบŠเบฑเป‰เบ™เบ—เปเบฒเบญเบดเบ” http/2 เปเบฅเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ grpc เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบฒเป€เบ‚เบปเป‰เบฒเปเบฅเบฐเบ‚เบฒเบญเบญเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเปเบ—เบ™เป‚เบ›เปˆเบ‡เปƒเบชเบˆเบฒเบ http/1.1 เบซเบฒ http/2.
  • เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปเบšเบšเบžเบดเป€เบชเบ”: เบ—เบนเบ”เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปเบšเบšเบžเบดเป€เบชเบ”เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™ retries เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบเบฒเบ™เบ—เปเบฒเบฅเบฒเบเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰, เบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เบญเบฑเบ”เบ•เบฒเบ—เบปเปˆเบงเป‚เบฅเบ, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เป€เบ‡เบปเบฒ, เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เป€เบ‚เบ”เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†.
  • API เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ: envoy เปƒเบซเป‰ API เบ—เบตเปˆโ€‹เป€เบ‚เบฑเป‰เบกโ€‹เปเบ‚เบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เปเบšเบšโ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เป„เบซเบง.
  • เบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™: เบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบขเปˆเบฒเบ‡เป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™ L7, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เปเบˆเบเบขเบฒเบเปเบฅเบฐเบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™เบ‚เบญเบ‡ mongodb, dynamodb เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 1 โ€” เบ•เบปเบงเบขเปˆเบฒเบ‡ NGINX Config

เบชเบฐเบ„เบฃเบดเบšเบ™เบตเป‰เปƒเบŠเป‰เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ 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 เบเบญเบกเบฎเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ. เบ›เบฐเบˆเบธเบšเบฑเบ™เบ™เบตเป‰ Envoy Proxy เบฎเบญเบ‡เบฎเบฑเบšเบœเบนเป‰เบŸเบฑเบ‡เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ TCP เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เป€เบกเบทเปˆเบญเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™, เบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบŠเบธเบ”เบ‚เบญเบ‡เบ•เบปเบงเบเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡.
  • เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡: เบžเบงเบเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เปเปˆเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒเปเบฅเบฐเบ‚เบฒเบญเบญเบ. เบซเบ™เป‰เบฒเบ—เบตเปˆเบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เป€เบŠเบฑเปˆเบ™ Gzip, เป€เบŠเบดเปˆเบ‡เบšเบตเบšเบญเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒ.
  • เป€เบฃเบปเบฒเป€เบ•เบต: เบžเบงเบเป€เบ‚เบปเบฒเบชเบปเปˆเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป„เบ›เบซเบฒเบˆเบธเบ”เบซเบกเบฒเบเบ›เบฒเบเบ—เบฒเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™เบเบธเปˆเบก.
  • เบเบธเปˆเบก: เบžเบงเบเป€เบ‚เบปเบฒเบเปเบฒเบ™เบปเบ”เบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบชเบตเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ—เบ™ Envoy เป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ NGINX เบชเบฐเป€เบžเบฒเบฐ. เป€เบ›เบปเป‰เบฒเปเบฒเบเบ‚เบญเบ‡ Envoy เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš APIs เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เบˆเบฐเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆ, เบฅเบฐเบซเบฑเบ”เปเบ‚เบ‡เบˆเบฒเบ NGINX.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 2 - เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ NGINX

เบชเปˆเบงเบ™ เบ—เบณ เบญเบดเบ” nginx.conf เบเปเบฒเบ™เบปเบ”เบšเบฒเบ‡ NGINX เบžเบฒเบเปƒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เบ™เบตเป‰เบŠเบตเป‰เบšเบญเบเบงเบดเบ—เบตเบเบฒเบ™ NGINX เบˆเบฐเบ‚เบฐเบซเบ™เบฒเบ”เป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™.

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy เบˆเบฑเบ”เบเบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ เปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ”เป‰เบงเบเบงเบดเบ—เบตเบ•เปˆเบฒเบ‡เป†.

Envoy เบชเป‰เบฒเบ‡เบเบฐเบ—เบนเป‰เบ„เบปเบ™เบ‡เบฒเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบซเบปเบงเบ‚เปเป‰เบฎเบฒเบ”เปเบงเปƒเบ™เบฅเบฐเบšเบปเบš. เปเบ•เปˆเบฅเบฐเบเบฐเบ—เบนเป‰เบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” loop เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบš

  1. เบŸเบฑเบ‡โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™
  2. เบเบญเบกเบฎเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบซเบกเปˆ
  3. เบเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบธเบ”เบ‚เบญเบ‡เบ•เบปเบงเบเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ
  4. เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ I/O เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบŠเปˆเบงเบ‡เบญเบฒเบเบธเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เปเปˆเป„เบ›เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบˆเบฑเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบเบฐเบ—เบนเป‰เบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™, เบฅเบงเบกเบ—เบฑเบ‡เบžเบถเบ”เบ•เบดเบเปเบฒเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเปƒเบ”เป†.

เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฐเบ—เบนเป‰เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปƒเบ™ Envoy, เบกเบตเบชเบฐเบ™เบธเบเป€เบเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ HTTP/2 เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เปเปˆเป‚เบฎเบ”เบžเบฒเบเบ™เบญเบเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบง, เบ–เป‰เบฒเบกเบตเบชเบตเปˆ threads เบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™, เบกเบฑเบ™เบˆเบฐเบกเบตเบชเบตเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ HTTP/2 เบ•เปเปˆเป‚เบฎเบ”เบžเบฒเบเบ™เบญเบเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡. เป‚เบ”เบเบเบฒเบ™เบฎเบฑเบเบชเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบเบฐเบ—เบนเป‰เบ„เบปเบ™เบ”เบฝเบง, เป€เบเบทเบญเบšเบฅเบฐเบซเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ‚เบฝเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเบฐเบเบฑเบ”, เบ„เบทเบเบฑเบšเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฐเบ—เบนเป‰เบ”เบฝเบง. เบ–เป‰เบฒเบเบฐเบ—เบนเป‰เบ„เบปเบ™เบ‡เบฒเบ™เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเป€เบชเบเป„เบ›, เบเบฒเบ™เบชเป‰เบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”, เปเบฅเบฐเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบชเบฐเบ™เบธเบเป€เบเบต.

เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป„เบ›เบขเป‰เบฝเบกเบขเบฒเบก เบšเบฅเบฑเบญเบเบ•เบปเบงเปเบ—เบ™เบ•เบปเบงเปเบ—เบ™.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ HTTP

เบ•เบฑเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ NGINX เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ HTTP เป€เบŠเบฑเปˆเบ™:

  • เบชเบดเปˆเบ‡เบ—เบตเปˆเบ›เบฐเป€เบžเบ” mime เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™
  • เปเบปเบ”เป€เบงเบฅเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™
  • เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Gzip

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเปเบ•เปˆเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบเบญเบ‡เปƒเบ™ Envoy Proxy, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 3 - เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบต

เปƒเบ™เบ•เบฑเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ HTTP, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ NGINX เบเปเบฒเบ™เบปเบ”เปƒเบซเป‰เบŸเบฑเบ‡เบขเบนเปˆเปƒเบ™เบžเบญเบ” 8080 เปเบฅเบฐเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบชเปเบฒเบฅเบฑเบšเป‚เบ”เป€เบกเบ™. one.example.com ะธ www.one.example.com.

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

เบžเบฒเบเปƒเบ™ Envoy, เบกเบฑเบ™เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบœเบนเป‰เบŸเบฑเบ‡.

เบ—เบนเบ”โ€‹เบžเบดโ€‹เป€เบชเบ”

เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ Envoy Proxy เปเบกเปˆเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบœเบนเป‰เบŸเบฑเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Envoy instance.

snippet เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบˆเบฐเบชเป‰เบฒเบ‡เบœเบนเป‰เบŸเบฑเบ‡เปƒเบซเบกเปˆเปเบฅเบฐเบœเบนเบเบกเบฑเบ”เบกเบฑเบ™เบเบฑเบšเบžเบญเบ” 8080. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบญเบ Envoy Proxy เบงเปˆเบฒเบžเบญเบ”เปƒเบ”เบ—เบตเปˆเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบฒเป€เบ‚เบปเป‰เบฒ.

Envoy Proxy เปƒเบŠเป‰ notation YAML เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบš notation เบ™เบตเป‰, เป€เบšเบดเปˆเบ‡เบ—เบตเปˆเบ™เบตเป‰ เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

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

เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ” server_name, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ•เบปเบงเบเบญเบ‡เบ•เบปเบงเปเบ—เบ™ Envoy เบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ™เบตเป‰.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 4 - เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ

เป€เบกเบทเปˆเบญเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™ NGINX, เบ•เบฑเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™. เปƒเบ™เบŠเบดเป‰เบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ›เบซเบฒเป€เบงเบฑเบšเป„เบŠเบ—เปŒเปเบกเปˆเบ™เป‚เบญเบ™เป„เบ›เบซเบฒเบ•เบปเป‰เบ™เบ™เป‰เปเบฒ (เบซเบกเบฒเบเป€เบซเบ”เบ‚เบญเบ‡เบœเบนเป‰เปเบ›เบžเบฒเบชเบฒ: เบ™เป‰เปเบฒเป€เบ—เบดเบ‡เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ) เบเบธเปˆเบกเบ—เบตเปˆเบกเบตเบŠเบทเปˆ. เบเบธเปˆเบกเป€เบ›เบปเป‰เบฒเปเบฒเบ. เบเบธเปˆเบก upstream เบเปเบฒเบ™เบปเบ” nodes เบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›.

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

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

เบขเบนเปˆ Envoy, Filters เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰.

เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ—เบนเบ”

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เบ•เบปเบงเบเบญเบ‡เบเปเบฒเบ™เบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบเบญเบ‡เบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™ server_names เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เป€เบกเบทเปˆเบญเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบ‚เบปเป‰เบฒเบกเบฒเบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเป‚เบ”เป€เบกเบ™เปเบฅเบฐเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เปเบกเปˆเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบเบธเปˆเบก. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบธเปˆเบกเบชเบธเบ”เบ‚เบญเบ‡ 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_manage เป€เบ›เบฑเบ™เบ•เบปเบงเบเบญเบ‡เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Envoy Proxy. เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบทเปˆเบ™เป†เบ›เบฐเบเบญเบšเบกเบต Redis, เบกเบปเบ‡เป‚เบ, TCP. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ—เบตเปˆ เป€เบญเบเบฐเบชเบฒเบ™.

เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบญเบทเปˆเบ™เป†, เป„เบ›เบขเป‰เบฝเบกเบขเบฒเบก เป€เบญเบเบฐเบชเบฒเบ™เบ—เบนเบ”.

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบต 5 - เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ Proxy เปเบฅเบฐ Upstream

เปƒเบ™ NGINX, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ upstream เบเปเบฒเบ™เบปเบ”เบŠเบธเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบชเบญเบ‡เบเบธเปˆเบกเป„เบ”เป‰เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบ.

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

เปƒเบ™ Envoy, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบเบเบธเปˆเบก.

เบเบธเปˆเบกเบ—เบนเบ”

เบ„เปˆเบฒเบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบ•เบปเป‰เบ™เบ™เป‰เบณเปเบกเปˆเบ™เบเบณเบ™เบปเบ”เป€เบ›เบฑเบ™เบเบธเปˆเบก. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ—เบตเปˆเบˆเบฐเบฎเบฑเบšเปƒเบŠเป‰เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธ. เบงเบดเบ—เบตเบ—เบตเปˆเป‚เบฎเบ”เบ–เบทเบเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡, เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒเบซเบกเบปเบ”เป€เบงเบฅเบฒ, เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบธเปˆเบก. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ„เบงเบšเบ„เบธเบก granular เบซเบผเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™: latency เปเบฅเบฐเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”.

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 Envoy เบˆเบฐเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐ asynchronously เปเบเป‰เป„เบ‚เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ DNS เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เปเบ•เปˆเบฅเบฐเบ—เบตเปˆเบขเบนเปˆ IP เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบกเบฒเบˆเบฒเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš DNS เบˆเบฐเบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเบ•เบปเป‰เบ™เบ™เป‰เปเบฒ. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบญเบ‡เบ—เบตเปˆเบขเบนเปˆ IP, Envoy เบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบกเบตเบชเบญเบ‡เป‚เบฎเบ”เบขเบนเปˆเปƒเบ™เบเบธเปˆเบก, เปเบฅเบฐเบ—เบฑเบ‡เบชเบญเบ‡เบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเป‚เบซเบฅเบ”เบชเบปเบกเบ”เบธเบ™. เบ–เป‰เบฒเป‚เบฎเบชเบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, Envoy เบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบ•เปเปˆเป„เบ›เบญเบตเบเปเบฅเป‰เบงเปเบฅเบฐเบˆเบฐเบ”เบถเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบˆเบฒเบเบ—เบธเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบกเบตเบขเบนเปˆ.

เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบšเบดเปˆเบ‡ เป€เบญเบเบเบฐเบชเบฒเบ™เบ•เบปเบงเปเบ—เบ™.

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบต 6 โ€” เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เปเบฅเบฐโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบเบนเป‰เบšเบฑเบ™เบ—เบถเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เป„เบ›เปƒเบชเปˆเปเบœเปˆเบ™เบ”เบดเบ”, Envoy Proxy เปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเบ„เบฅเบฒเบง. เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปเบกเปˆเบ™โ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เป€เบžเบทเปˆเบญโ€‹ stdout ะธ stderr.

เป€เบกเบทเปˆเบญเบœเบนเป‰เปƒเบŠเป‰เป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบฅเบฐเบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป HTTP, เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ access_log เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ HTTP. เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบญเบธเบ›เบฐเบเบญเบ™เป€เบŠเบฑเปˆเบ™: stdout, เบซเบผเบทเป„เบŸเบฅเปŒเปƒเบ™เปเบœเปˆเบ™, เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบฑเบ‡เปเบปเบ”เป„เบ›เบซเบฒ stdout (เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบœเบนเป‰เปเบ› - stdout เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰ envoy เบžเบฒเบเปƒเบ™ docker. เบ–เป‰เบฒเปƒเบŠเป‰เป‚เบ”เบเบšเปเปˆเบกเบต 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, เป„เบ›เบขเป‰เบฝเบกเบขเบฒเบก

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 เปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเบ„เบฅเบฒเบงเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบงเปˆเบฒเปƒเบœเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เปƒเบŠเป‰ Envoy Proxy เบœเปˆเบฒเบ™เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบ•เปเปˆเบฒ.

เป€เบ›เบตเบ”เบ•เบปเบงเบ•เบปเบงเปเบ—เบ™ Envoy

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Envoy Proxy เบœเปˆเบฒเบ™ Docker container เบขเบนเปˆเปƒเบ™เป‚เบฎเบ”. เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰ Envoy เบชเบฒเบกเบฒเบ”เบŸเบฑเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบฒเป€เบ‚เบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบžเบญเบ” 80. เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ•เบฒเบกเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบœเบนเป‰เบŸเบฑเบ‡, Envoy Proxy เบŸเบฑเบ‡เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบžเบญเบ” 8080. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบ•เปเปˆเบฒ.

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

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

เบ”เป‰เบงเบเบžเบฃเบฑเบญเบเบŠเบตเปเบฅเปˆเบ™, เบ”เบฝเบงเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš เปเบฅเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป„เบ”เป‰. เบ„เปเบฒเบชเบฑเปˆเบ‡ cURL เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบญเบญเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฑเบš host header เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ—เบ™.

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

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป HTTP เบˆเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” 503. เบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบฒเบ‡เป€เบ—เบดเบ‡เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, Envoy Proxy เบšเปเปˆเบกเบตเบˆเบธเบ”เปเบฒเบเบ›เบฒเบเบ—เบฒเบ‡เบ—เบตเปˆเบกเบตเบขเบนเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบ„เบณเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเป€เบฅเบตเปˆเบกเบšเปเบฅเบดเบเบฒเบ™ HTTP เบŠเบธเบ”เบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰เบชเบณเบฅเบฑเบš Envoy.

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

เบ”เป‰เบงเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ, Envoy เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ•เบปเบงเปเบ—เบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™.

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

เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบŠเบตเป‰เบšเบญเบเบงเปˆเบฒ Docker container เปƒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป. เปƒเบ™เบšเบฑเบ™เบ—เบถเบ Envoy Proxy เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบœเบปเบ™เบ‚เบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡.

เบชเปˆเบงเบ™เบซเบปเบงเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡ 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 }

เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบˆเบฒเบเบ™เบฑเบเปเบ›

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Envoy Proxy เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ https://www.getenvoy.io/

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, rpm เบšเปเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเปเบฅเบดเบเบฒเบ™เบฅเบฐเบšเบปเบš.

เป€เบžเบตเปˆเบกเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ /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 เบœเบนเป‰เปƒเบŠเป‰เบ‡เบปเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™