ืžื™ื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Nginx ืฆื• Envoy Proxy

ื”ืขืœื, ื”ืื‘ืจ! ืื™ืš ื‘ืจืขื ื’ืขืŸ ืฆื• ื“ื™ื™ืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜ ืึท ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืคื•ืŸ ื“ืขื ืคึผืึธืกื˜ืŸ: ืžื™ื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Nginx ืฆื• Envoy Proxy.

Envoy ืื™ื– ืึท ื”ื•ื™ืš-ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืคึผืจืึทืงืกื™ ืกืขืจื•ื•ืขืจ (ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ C ++) ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ื™ื—ื™ื“ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–, ืขืก ืื™ื– ืื•ื™ืš ืึท ืงืึธืžื•ื ื™ืงืึทืฆื™ืข ื•ื™ื˜ืึธื‘ื•ืก ืื•ืŸ "ื•ื ื™ื•ื•ืขืจืกืึทืœ ื“ืึทื˜ืŸ ืคืœืึทืš" ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ื’ืจื•ื™ืก ืžื™ืงืจืึธืกืขืจื•ื•ื™ืก "ื“ื™ื ืกื˜ ืžืขืฉ" ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจื–. ื•ื•ืขืŸ ืื™ืจ ืฉืึทืคึฟืŸ ืขืก, ืกืึทืœื•ืฉืึทื ื– ืฆื• ืคึผืจืึธื‘ืœืขืžืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืื•ื™ืคื’ืขืฉื˜ืื ืขืŸ ื‘ืขืฉืึทืก ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืกืขืจื•ื•ืขืจืก ืึทื–ืึท ื•ื•ื™ NGINX, HAProxy, ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจื– ืื•ืŸ ื•ื•ืึธืœืงืŸ ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจื– ื–ืขื ืขืŸ ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ. ืขื ื•ื•ื•ื™ ืึทืจื‘ืขื˜ ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื™ืขื“ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ืึทื‘ืกื˜ืจืึทืงืฅ ื“ื™ ื ืขืฅ ืฆื• ืฆื•ืฉื˜ืขืœืŸ ืคึผืจืึธืกื˜ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืจืึทื’ืึทืจื“ืœืึทืก ืคื•ืŸ ืคึผืœืึทื˜ืคืึธืจืžืข. ื•ื•ืขืŸ ืึทืœืข ืกืขืจื•ื•ื™ืก ืคืึทืจืงืขืจ ืื™ืŸ ืึทืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคืœืึธื•ื– ื“ื•ืจืš ื“ื™ Envoy ืžืขืฉ, ืขืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื– ืคึผืจืึธื‘ืœืขื ื’ืขื‘ื™ื˜ืŸ ืžื™ื˜ ืงืึธื ืกื™ืกื˜ืขื ื˜ ืึธื‘ืกืขืจื•ื•ืึทื‘ื™ืœื™ื˜ื™, ื ื™ื’ืŸ ืงื•ื™ืœืขืœื“ื™ืง ืคืึธืจืฉื˜ืขืœื•ื ื’ ืื•ืŸ ืœื™ื™ื’ืŸ ื”ืึทืจืฅ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืื™ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืึธืจื˜.

ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื–

  • ืึทืจื•ื™ืก-ืคื•ืŸ-ืคึผืจืึธืกืขืก ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ: ืึทื ื•ื•ื•ื™ ืื™ื– ืึท ื–ืขืœื‘ืกื˜-ืงืึทื ื˜ื™ื™ื ื“, ื”ื•ื™ืš-ืคืึธืจืฉื˜ืขืœื•ื ื’ ืกืขืจื•ื•ืขืจ ื•ื•ืึธืก ื ืขืžื˜ ืึท ืงืœื™ื™ืŸ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื‘ืึทืจืึทืŸ. ืขืก ืึทืจื‘ืขื˜ ืื™ืŸ ืงืึทื ื“ื–ืฉืึทื ื’ืงืฉืึทืŸ ืžื™ื˜ ืงื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฉืคึผืจืึทืš ืึธื“ืขืจ ืคืจื™ื™ืžื•ื•ืขืจืง.
  • http/2 ืื•ืŸ grpc ืฉื˜ื™ืฆืŸ: ืึทื ื•ื•ื•ื™ ื”ืื˜ ืขืจืฉื˜ืขืจ-ืงืœืึทืก http/2 ืื•ืŸ grpc ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื™ื ืงืึทืžื™ื ื’ ืื•ืŸ ืึทื•ื˜ื’ืึธื•ื™ื ื’ ืงืึทื ืขืงืฉืึทื ื–. ื“ืึธืก ืื™ื– ืึท ื˜ืจืึทื ืกืคึผืขืจืึทื ื˜ ืคึผืจืึทืงืกื™ ืคื•ืŸ http/1.1 ืฆื• http/2.
  • ืึทื•ื•ืึทื ืกื™ืจื˜ืข ืœืึธื“ืŸ ื‘ืึทืœืึทื ืกื™ื ื’: ื“ื™ ืึทื ื•ื•ื•ื™ ืฉื˜ื™ืฆื˜ ืึทื•ื•ืึทื ืกื™ืจื˜ืข ืœืึธื“ืŸ ื‘ืึทืœืึทื ืกื™ื ื’ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืึธื˜ืึทืžืึทื˜ื™ืง ืจื™ื˜ืจื™ืขืก, ืงื™ื™ื˜ ื‘ืจื™ื™ืงื™ื ื’, ืœื™ืžืึทื˜ื™ื ื’ ืคื•ืŸ ื’ืœืื‘ืืœืข ืงื•ืจืก, ืฉืึทื“ืึธื•ื™ื ื’ ื‘ืขื˜ืŸ, ืœืึธื“ืŸ ื‘ืึทืœืึทื ืกื™ื ื’ ืคื•ืŸ ื”ื™ื’ืข ื–ืึธื ืข, ืขื˜ืง.
  • ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ ืžืึทื ืึทื’ืขืžืขื ื˜ ืึทืคึผื™: ืึทื ื•ื•ื•ื™ ื’ื™ื˜ ืึท ืฉื˜ืึทืจืง ืึทืคึผื™ ืคึฟืึทืจ ื“ื™ื ืึทืžื™ืฉ ืึธื ืคื™ืจื•ื ื’ ืคื•ืŸ ื“ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.
  • ืึธื‘ืกืขืจื•ื•ืึทื‘ื™ืœื™ื˜ื™: ื˜ื™ืฃ ืึทื‘ื–ืขืจื•ื•ืึทื‘ื™ืœื™ื˜ื™ ืคื•ืŸ ืœ 7 ืคืึทืจืงืขืจ, ื’ืขื‘ื•ื™ืจืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ื˜ืจื™ื™ืกื™ื ื’ ืื•ืŸ ืึธื‘ืกืขืจื•ื•ืึทื‘ื™ืœื™ื˜ื™ ืคื•ืŸ ืžืึธื ื’ืึธื“ื‘, ื“ื™ื ืึทืžืึธื“ื‘ ืื•ืŸ ืคื™ืœืข ืื ื“ืขืจืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–.

ืฉืจื™ื˜ 1 - ื‘ื™ื™ึทืฉืคึผื™ืœ NGINX Config

ื“ืขื ืฉืจื™ืคื˜ ื ื™ืฆื˜ ืึท ืกืคึผืขืฉืœื™ ืงืจืึทืคื˜ืขื“ ื˜ืขืงืข nginx.conf, ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืคื•ืœ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ NGINX Wiki. ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ืŸ ื“ืขืจ ืจืขื“ืึทืงื˜ืึธืจ ื“ื•ืจืš ืขืคืŸ 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.

ื ื™ื˜ ืึทืœืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ืึทืคึผืœื™ื™ื– ืฆื• ืขื ื•ื•ื™ ืคึผืจืึธืงืกื™, ืื•ืŸ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืขื˜ืœืขื›ืข ืกืขื˜ื˜ื™ื ื’ืก. ืึทื ื•ื•ื•ื™ ืคึผืจืึทืงืกื™ ื”ืื˜ ืคื™ืจ ืฉืœื™ืกืœ ื˜ื™ื™ืคึผืก, ื•ื•ืึธืก ืฉื˜ื™ืฆืŸ ื“ื™ ื”ืึทืจืฅ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื’ืขืคึฟื™ื ื˜ ื“ื•ืจืš NGINX. ื“ืขืจ ื™ืกื•ื“ ืื™ื–:

  • ืฆื•ื”ืขืจืขืจืก: ื–ื™ื™ ื‘ืึทืฉืœื™ืกืŸ ื•ื•ื™ ืขื ื•ื•ื™ ืคึผืจืึธืงืกื™ ืึทืงืกืขืคึผืฅ ื™ื ืงืึทืžื™ื ื’ ืจื™ืงื•ื•ืขืก. ืึทื ื•ื•ื•ื™ ืคึผืจืึธืงืกื™ ื“ืขืจื•ื•ื™ื™ึทืœ ืฉื˜ื™ืฆื˜ ื‘ืœื•ื™ื– TCP-ื‘ืื–ื™ืจื˜ ืฆื•ื”ืขืจืขืจืก. ืึทืžืึธืœ ืึท ืงืฉืจ ืื™ื– ื’ืขื’ืจื™ื ื“ืขื˜, ืขืก ืื™ื– ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ืึท ื’ืึทื ื’ ืคื•ืŸ ืคื™ืœื˜ืขืจืก ืคึฟืึทืจ ืคึผืจืึทืกืขืกื™ื ื’.
  • ืคื™ืœื˜ืขืจืก: ื–ื™ื™ ื–ืขื ืขืŸ ื˜ื™ื™ืœ ืคื•ืŸ ืึท ืจืขืจื  - ืœื™ื ื™ืข ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ื•ื•ืึธืก ืงืขื ืขืŸ ืคึผืจืึธืฆืขืก ื™ื ืงืึทืžื™ื ื’ ืื•ืŸ ืึทื•ื˜ื’ืึธื•ื™ื ื’ ื“ืึทื˜ืŸ. ื“ื™ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ื›ื•ืœืœ ืคื™ืœื˜ืขืจืก ืึทื–ืึท ื•ื•ื™ Gzip, ื•ื•ืึธืก ืงืึทืžืคึผืจืขืกื™ื– ื“ื™ ื“ืึทื˜ืŸ ืื™ื™ื“ืขืจ ื–ื™ื™ ืฉื™ืงืŸ ืขืก ืฆื• ื“ืขื ืงืœื™ืขื ื˜.
  • ืจืึธื•ื˜ืขืจืก: ื–ื™ื™ ืคืึธืจื•ื™ืก ืคืึทืจืงืขืจ ืฆื• ื“ื™ ืคืืจืœืื ื’ื˜ ื“ืขืกื˜ื™ื ื™ื™ืฉืึทืŸ, ื“ื™ืคื™ื™ื ื“ ื•ื•ื™ ืึท ืงื ื•ื™ืœ.
  • ืงืœืึทืกื˜ืขืจื–: ื–ื™ื™ ื“ืขืคื™ื ื™ืจืŸ ื“ื™ ืขื ื“ืคึผื•ื™ื ื˜ ืคึฟืึทืจ ืคืึทืจืงืขืจ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก.

ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ื™ ืคื™ืจ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ืฆื• ืฉืึทืคึฟืŸ ืึทืŸ Envoy Proxy ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืฆื• ื’ืœื™ื™ึทื›ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ NGINX ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ื“ืขืจ ืฆื™ืœ ืคื•ืŸ Envoy ืื™ื– ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืึทืคึผื™ืก ืื•ืŸ ื“ื™ื ืึทืžื™ืฉ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ื‘ืึทื–ืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ื ื•ืฆืŸ ืกื˜ืึทื˜ื™ืง, ืฉื•ื•ืขืจ-ืงืึธื“ืขื“ ืกืขื˜ื˜ื™ื ื’ืก ืคึฟื•ืŸ NGINX.

ืฉืจื™ื˜ 2 - NGINX ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ

ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ nginx.conf ื“ื™ืคื™ื™ื ื– ืขื˜ืœืขื›ืข NGINX ื™ื ื˜ืขืจื ืึทืœืก ื•ื•ืึธืก ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“.

ืึทืจื‘ืขื˜ืขืจ ืงืึทื ืขืงืฉืึทื ื–

ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ื ื˜ืŸ ื“ื™ื˜ืขืจืžืึทื ื– ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืึทืจื‘ืขื˜ ืคึผืจืึทืกืขืกืึทื– ืื•ืŸ ืงืึทื ืขืงืฉืึทื ื–. ื“ืึธืก ื™ื ื“ื™ืงื™ื™ืฅ ื•ื•ื™ NGINX ื•ื•ืขื˜ ื•ื•ืึธื’ ืฆื• ื˜ืจืขืคืŸ ืคืึธื“ืขืจื•ื ื’.

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy ืžืึทื ื™ื“ื–ืฉื™ื– ื•ื•ืึธืจืงืคืœืึธื•ื– ืื•ืŸ ืงืึทื ืขืงืฉืึทื ื– ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ.

ืึทื ื•ื•ื•ื™ ืงืจื™ื™ื™ืฅ ืึท ืึทืจื‘ืขื˜ืขืจ ืคืึธื“ืขื ืคึฟืึทืจ ื™ืขื“ืขืจ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืคืึธื“ืขื ืื•ื™ืฃ ื“ื™ ืกื™ืกื˜ืขื. ื™ืขื“ืขืจ ืึทืจื‘ืขื˜ืขืจ ืคืึธื“ืขื ืขืงืกืึทืงื™ื•ืฅ ืึท ื ื™ื˜-ื‘ืœืึทืงื™ื ื’ ื’ืขืฉืขืขื ื™ืฉ ืฉืœื™ื™ืฃ ื•ื•ืึธืก ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ

  1. ืฆื•ื’ืขื”ืขืจื˜ ืฆื• ื™ืขื“ืขืจ ืฆื•ื”ืขืจืขืจ
  2. ืึทืงืกืขืคึผื˜ื™ื ื’ ื ื™ื™ึทืข ืงืึทื ืขืงืฉืึทื ื–
  3. ืฉืึทืคึฟืŸ ืึท ื’ืึทื ื’ ืคื•ืŸ ืคื™ืœื˜ืขืจืก ืคึฟืึทืจ ืึท ืงืฉืจ
  4. ืคึผืจืึธืฆืขืก ืึทืœืข ื™ / ืึธ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ื‘ืขืฉืึทืก ื“ื™ ืœืขื‘ืŸ ืคื•ืŸ ื“ื™ ืงืฉืจ.

ืึทืœืข ื•ื•ื™ื™ึทื˜ืขืจ ืงืฉืจ ืคึผืจืึทืกืขืกื™ื ื’ ืื™ื– ื›ืึทื ื“ืึทืœื“ ืื™ืŸ ื“ื™ ืึทืจื‘ืขื˜ืขืจ ืคืึธื“ืขื, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืงื™ื™ืŸ ืคืึธืจื•ื•ืขืจื“ื™ื ื’ ื ืึทื˜ื•ืจ.

ืคึฟืึทืจ ื™ืขื“ืขืจ ืึทืจื‘ืขื˜ืขืจ ืคืึธื“ืขื ืื™ืŸ ืขื ื•ื•ื•ื™, ืขืก ืื™ื– ืึท ืงืฉืจ ื‘ืขืงืŸ. ืึทื–ื•ื™ ื”ื˜ื˜ืคึผ / 2 ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืคึผืึธืึธืœืก ืคืึทืจืœื™ื™ื’ืŸ ื‘ืœื•ื™ื– ืื™ื™ืŸ ืงืฉืจ ืคึผืขืจ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื‘ืึทืœืขื‘ืึธืก ืื™ืŸ ืึท ืฆื™ื™ึทื˜, ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืคื™ืจ ืึทืจื‘ืขื˜ืขืจ ืคึฟืขื“ืขื, ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคื™ืจ ื”ื˜ื˜ืคึผ / 2 ืงืึทื ืขืงืฉืึทื ื– ืคึผืขืจ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื‘ืึทืœืขื‘ืึธืก ืื™ืŸ ืึท ืกื˜ืึทื‘ื™ืœ ืฉื˜ืึทื˜. ื“ื•ืจืš ื‘ืขื›ืขืกืงืขื ืึทืœืฅ ืื™ืŸ ืื™ื™ืŸ ืึทืจื‘ืขื˜ืขืจ ืคืึธื“ืขื, ื›ึผืžืขื˜ ืึทืœืข ืงืึธื“ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืึธืŸ ื‘ืœืึทืงื™ื ื’, ื•ื•ื™ ืื•ื™ื‘ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืื™ื™ืŸ ื˜ืจืขื“ื™ื“. ืื•ื™ื‘ ืžืขืจ ืึทืจื‘ืขื˜ืขืจ ืคึฟืขื“ืขื ื–ืขื ืขืŸ ืึทืœืึทืงื™ื™ื˜ื™ื“ ื•ื•ื™ ื ื™ื™ื˜ื™ืง, ื“ืึธืก ืงืขืŸ ืคื™ืจืŸ ืฆื• ื•ื•ื™ื™ืกื˜ืึทื“ ื–ื›ึผืจื•ืŸ, ืฉืึทืคึฟืŸ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืœื™ื™ื“ื™ืง ืงืึทื ืขืงืฉืึทื ื–, ืื•ืŸ ืจื™ื“ื•ืกื™ื ื’ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืžืืœ ืงืึทื ืขืงืฉืึทื ื– ื–ืขื ืขืŸ ืื•ืžื’ืขืงืขืจื˜ ืฆื• ื“ื™ ื‘ืขืงืŸ.

ืคึฟืึทืจ ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื‘ืึทื–ื•ื›ืŸ ืึทื ื•ื•ื•ื™ ืคึผืจืึธืงืกื™ ื‘ืœืึธื’.

ื”ื˜ื˜ืคึผ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ

ื“ื™ ืคืืœื’ืขื ื“ืข NGINX ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื‘ืœืึธืง ื“ื™ืคื™ื™ื ื– ื”ื˜ื˜ืคึผ ืกืขื˜ื˜ื™ื ื’ืก ืึทื–ืึท ื•ื•ื™:

  • ื•ื•ืึธืก ืžื™ืžืข ื˜ื™ื™ืคึผืก ื–ืขื ืขืŸ ื’ืขืฉื˜ื™ืฆื˜
  • ืคืขืœื™ืงื™ื™ึทื˜ ื˜ื™ื™ืžืึทื•ืฅ
  • Gzip ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ

ืื™ืจ ืงืขื ืขืŸ ืงืึทืกื˜ืึทืžื™ื™ื– ื“ื™ ืึทืกืคึผืขืงืฅ ื ื™ืฆืŸ ืคื™ืœื˜ืขืจืก ืื™ืŸ Envoy Proxy, ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื“ื™ืกืงื•ื˜ื™ืจืŸ ืฉืคึผืขื˜ืขืจ.

ืฉืจื™ื˜ 3 - ืกืขืจื•ื•ื™ืจืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ

ืื™ืŸ ื“ื™ ื”ื˜ื˜ืคึผ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื‘ืœืึธืง, ื“ื™ 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, ื“ืขืจ ืึธืจื˜ ื‘ืœืึธืง ื“ื™ื˜ืขืจืžืึทื ื– ื•ื•ื™ ืฆื• ืคึผืจืึธืฆืขืก ืื•ืŸ ื•ื•ื• ืฆื• ืžืึทืจืฉืจื•ื˜ ื“ื™ ืคืึทืจืงืขืจ. ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคืจืึทื’ืžืขื ื˜, ืึทืœืข ืคืึทืจืงืขืจ ืฆื• ื“ืขื ืคึผืœืึทืฅ ืื™ื– ื˜ืจืึทื ืกืคืขืจื“ ืฆื• ืึท ืึทืคึผืกื˜ืจื™ื (ื˜ืจืึทื ืกืœื™ื˜ืขืจ ืก ื‘ืึทืžืขืจืงื•ื ื’: ืึทืคึผืกื˜ืจื™ื ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกืขืจื•ื•ืขืจ) ืงื ื•ื™ืœ ืžื™ื˜ืŸ ื ืึธืžืขืŸ targetCluster. ื“ื™ ืึทืคึผืกื˜ืจื™ื ืงื ื•ื™ืœ ื“ื™ืคื™ื™ื ื– ื“ื™ ื ืึธื•ื“ื– ื•ื•ืึธืก ื–ืึธืœ ืคึผืจืึธืฆืขืก ื“ื™ ื‘ืขื˜ืŸ. ืžื™ืจ ื•ื•ืขืœืŸ ื“ื™ืกืงื•ื˜ื™ืจืŸ ื“ืขื ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืฉืจื™ื˜.

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

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

ืื™ืŸ Envoy, Filters ื˜ื•ื˜ ื“ืึธืก.

ืึทื ื•ื•ื•ื™ ืคื™ืœื˜ืขืจืก

ืคึฟืึทืจ ืึท ืกื˜ืึทื˜ื™ืง ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืคื™ืœื˜ืขืจืก ื‘ืึทืฉืœื™ืกืŸ ื•ื•ื™ ืฆื• ืคึผืจืึธืฆืขืก ื™ื ืงืึทืžื™ื ื’ ืจื™ืงื•ื•ืขืก. ืื™ืŸ ื“ืขื ืคืึทืœ, ืžื™ืจ ืฉื˜ืขืœืŸ ืคื™ืœื˜ืขืจืก ื•ื•ืึธืก ื’ืœื™ื™ึทื›ืŸ ืกืขืจื•ื•ืขืจ_ื ืึทืžืขืก ืื™ืŸ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืฉืจื™ื˜. ื•ื•ืขืŸ ื™ื ืงืึทืžื™ื ื’ ืจื™ืงื•ื•ืขืก ืึธื ืงื•ืžืขืŸ ื•ื•ืึธืก ื’ืœื™ื™ึทื›ืŸ ื–ื™ื›ืขืจ ื“ืึธื•ืžื™ื™ื ื– ืื•ืŸ ืจื•ืฅ, ืคืึทืจืงืขืจ ืื™ื– ืจืึทื•ื˜ื™ื“ ืฆื• ื“ื™ ืงื ื•ื™ืœ. ื“ืึธืก ืื™ื– ื“ืขืจ ืขืงื•ื•ื™ื•ื•ืึทืœืขื ื˜ ืคื•ืŸ ืึทืŸ 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. ืื ื“ืขืจืข ืคื™ืœื˜ืขืจืก ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืจืขื“ื™ืก, ืžืึธื ื’ืึธ, ื˜ืงืคึผ. ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื’ืึทื ืฅ ืจืฉื™ืžื” ื‘ื™ื™ึท ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ืคึฟืึทืจ ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ืื ื“ืขืจืข ืžืึทืกืข ื‘ืึทืœืึทื ืกื™ื ื’ ืคึผืึทืœืึทืกื™ื–, โ€‹โ€‹โ€‹โ€‹ื‘ืึทื–ื•ื›ืŸ ืึทื ื•ื•ื•ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ืฉืจื™ื˜ 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 ืขื ื•ื•ื•ื™ ื•ื•ืขื˜ ืงืึทื ื˜ื™ื ื™ื•ืึทืกืœื™ ืื•ืŸ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืกืœื™ ื‘ืึทืฉืœื™ืกืŸ ื“ื™ ืกืคึผืขืกื™ืคื™ืขื“ ื“ื ืก ื˜ืึทืจื’ืึทืฅ. ื™ืขื“ืขืจ ืื•ืžื’ืขืงืขืจื˜ IP ืึทื“ืจืขืก ืคื•ืŸ ื“ื™ ื“ื ืก ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืจืขื›ื ื˜ ื•ื•ื™ ืึท ื™ืงืกืคึผืœื™ืกืึทื˜ ื‘ืึทืœืขื‘ืึธืก ืื™ืŸ ื“ื™ ืึทืคึผืกื˜ืจื™ื ืงื ื•ื™ืœ. ื“ืึธืก ืžื™ื™ื ื˜ ืึทื– ืื•ื™ื‘ ืึท ื‘ืงืฉื” ืงืขืจื˜ ืฆื•ื•ื™ื™ IP ืึทื“ืจืขืกืขืก, Envoy ื•ื•ืขื˜ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ืžื—ื ื•ืช ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ, ืื•ืŸ ื‘ื™ื™ื“ืข ืžื•ื–ืŸ ื–ื™ื™ืŸ ื‘ืึทืœืึทื ืกื˜. ืื•ื™ื‘ ืึท ื‘ืึทืœืขื‘ืึธืก ืื™ื– ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜, Envoy ื•ื•ืขื˜ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืขืก ืื™ื– ื ื™ื˜ ืžืขืจ ื™ื’ื–ื™ืกืฅ ืื•ืŸ ื•ื•ืขื˜ ืฆื™ืขืŸ ืคืึทืจืงืขืจ ืคื•ืŸ ืงื™ื™ืŸ ื™ื’ื–ื™ืกื˜ื™ื ื’ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืคึผืึธืึธืœืก.

ืคึฟืึทืจ ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื–ืขืŸ ืึทื ื•ื•ื•ื™ ืคึผืจืึทืงืกื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ืฉืจื™ื˜ 6 - ืงืœืึธืฅ ืึทืงืกืขืก ืื•ืŸ ืขืจืจืึธืจืก

ื“ื™ ืœืขืฆื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืึทื ืฉื˜ืึธื˜ ืคึผื•ืฉื™ื ื’ ื˜ืขื•ืช ืœืึธื’ืก ืฆื• ื“ื™ืกืง, Envoy Proxy ื ืขืžื˜ ืึท ื•ื•ืึธืœืงืŸ-ื‘ืื–ื™ืจื˜ ืฆื•ื’ืึทื ื’. ื›ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืœืึธื’ืก ื–ืขื ืขืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ืกื˜ื“ืึธื•ื˜ ะธ ืกื˜ื“ืขืจืจ.

ื•ื•ืขืŸ ื™ื•ื–ืขืจื– ืžืึทื›ืŸ ืึท ื‘ืงืฉื”, ืึทืงืกืขืก ืœืึธื’ืก ื–ืขื ืขืŸ ืึทืคึผืฉืึทื ืึทืœ ืื•ืŸ ืคืึทืจืงืจื™ืคึผืœื˜ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜. ืฆื• ื’ืขื‘ืŸ ืึทืงืกืขืก ืœืึธื’ืก ืคึฟืึทืจ ื”ื˜ื˜ืคึผ ืจื™ืงื•ื•ืขืก, ื’ืขื‘ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืึทืงืกืขืก_ืœืึธื’ ืคึฟืึทืจ ื“ื™ ื”ื˜ื˜ืคึผ ืงืฉืจ ืคืึทืจื•ื•ืึทืœื˜ืขืจ. ื“ืขืจ ื“ืจืš ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึธื“ืขืจ ืึท ืžื™ื˜ืœ ืึทื–ืึท ื•ื•ื™ ืกื˜ื“ืึธื•ื˜, ืึธื“ืขืจ ืึท ื˜ืขืงืข ืื•ื™ืฃ ื“ื™ืกืง, ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ื™ืŸ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ.

ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ืจื™ื“ืขืจืขืงื˜ ืึทืœืข ืึทืงืกืขืก ืœืึธื’ืก ืฆื• ืกื˜ื“ืึธื•ื˜ (ื“ืขืจ ืื™ื‘ืขืจื–ืขืฆืขืจ ืก ื‘ืึทืžืขืจืงื•ื ื’ - ืกื˜ื“ืึธื•ื˜ ืื™ื– ืคืืจืœืื ื’ื˜ ืฆื• ื ื•ืฆืŸ ืึทื ื•ื•ื•ื™ ื™ืŸ ื“ืึธืงืงืขืจ. ืื•ื™ื‘ ื’ืขื•ื•ื™ื™ื ื˜ ืึธืŸ ื“ืึธืงืงืขืจ, ืคืึทืจื‘ื™ื™ึทื˜ืŸ /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)%"}

ืคึฟืึทืจ ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ืขื ื•ื•ื™ ืจืขื’ื™ืกื˜ืจืึทื˜ื™ืึธืŸ ืžืขื˜ืึทื“ืึทืœืึทื“ื–ืฉื™, ื‘ืึทื–ื•ื›ืŸ

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

ืœืึธื’ื™ื ื’ ืื™ื– ื ื™ืฉื˜ ื“ืขืจ ื‘ืœื•ื™ื– ื•ื•ืขื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื™ื ืกื™ื™ื˜ ืื™ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Envoy Proxy. ืขืก ื”ืื˜ ืึทื•ื•ืึทื ืกื™ืจื˜ืข ื˜ืจื™ื™ืกื™ื ื’ ืื•ืŸ ืžืขื˜ืจื™ืง ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื’ืขื‘ื•ื™ื˜ ืื™ืŸ ืขืก. ืื™ืจ ืงืขื ื˜ ื’ืขืคึฟื™ื ืขืŸ ืžืขืจ ืื™ืŸ ื˜ืจื™ื™ืกื™ื ื’ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืึธื“ืขืจ ื“ื•ืจืš ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื•ืข ื˜ืจื™ื™ืกื™ื ื’ ืฉืจื™ืคื˜.

ืฉืจื™ื˜ 7 - ืงืึทื˜ืขืจ

ืื™ืจ ื”ืึธื˜ ืื™ืฆื˜ ืžื™ื™ื’ืจื™ื™ื˜ื™ื“ ื“ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ NGINX ืฆื• Envoy Proxy. ื“ื™ ืœืขืฆื˜ืข ืฉืจื™ื˜ ืื™ื– ืฆื• ืงืึทื˜ืขืจ ืึทืŸ ืขื ื•ื•ืึธื™ ืคึผืจืึธืงืกื™ ื‘ื™ื™ึทืฉืคึผื™ืœ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืขืก.

ืœื•ื™ืคืŸ ื•ื•ื™ ื‘ืึทื ื™ืฆืขืจ

ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ NGINX ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืฉื•ืจื” ื‘ืึทื ื™ืฆืขืจ ื•ื•ื•ื•ื•ื•; ืกืคึผืขืฆื™ืคื™ืฆื™ืจื˜ ืฆื• ืœื•ื™ืคืŸ NGINX ื•ื•ื™ ืึท ื ื™ื“ืขืจื™ืง-ืคึผืจื™ื•ื•ืœื™ื“ื–ืฉื“ ื‘ืึทื ื™ืฆืขืจ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜.

Envoy Proxy ื ืขืžื˜ ืึท ื•ื•ืึธืœืงืŸ-ื‘ืื–ื™ืจื˜ ืฆื•ื’ืึทื ื’ ืฆื• ืึธื ืคื™ืจื•ื ื’ ื•ื•ืขืจ ืึธื•ื ื– ืึท ืคึผืจืึธืฆืขืก. ื•ื•ืขืŸ ืžื™ืจ ืœื•ื™ืคืŸ Envoy Proxy ื“ื•ืจืš ืึท ืงืึทื ื˜ื™ื™ื ืขืจ, ืžื™ืจ ืงืขื ืขืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืึท ื ื™ื“ืขืจื™ืง ืคึผืจื™ื•ื•ืœื™ื“ื–ืฉื“ ื‘ืึทื ื™ืฆืขืจ.

ืœืึธื ื˜ืฉื™ื ื’ ืึทื ื•ื•ื•ื™ ืคึผืจืึธืงืกื™

ื“ืขืจ ื‘ืึทืคึฟืขืœ ืื•ื ื˜ืŸ ื•ื•ืขื˜ ืœื•ื™ืคืŸ Envoy Proxy ื“ื•ืจืš ืึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก. ื“ืขืจ ื‘ืึทืคึฟืขืœ ื’ื™ื˜ ืขื ื•ื•ื™ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื”ืขืจืŸ ืคึฟืึทืจ ื™ื ืงืึทืžื™ื ื’ ืจื™ืงื•ื•ืขืก ืื•ื™ืฃ ืคึผืึธืจื˜ 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 ื‘ืึทืคึฟืขืœ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืึท ื‘ืงืฉื” ืžื™ื˜ ื“ื™ ื‘ืึทืœืขื‘ืึธืก ื›ืขื“ืขืจ ื“ื™ืคื™ื™ื ื“ ืื™ืŸ ื“ื™ ืคึผืจืึทืงืกื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

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

ื“ืขืจ HTTP ื‘ืขื˜ืŸ ื•ื•ืขื˜ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ืŸ ืึท ื˜ืขื•ืช 503. ื“ืึธืก ืื™ื– ื•ื•ื™ื™ึทืœ ืึทืคึผืกื˜ืจื™ื ืงืึทื ืขืงืฉืึทื ื– ื–ืขื ืขืŸ ื ื™ืฉื˜ ืืจื‘ืขื˜ืŸ ืื•ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ื ื™ืžืฆื. ื“ืขืจื™ื‘ืขืจ, Envoy Proxy ื”ืื˜ ืงื™ื™ืŸ ืคืึทืจืึทื ืขืŸ ื“ืขืกื˜ืึทื ื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื“ื™ ื‘ืขื˜ืŸ. ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ ื•ื•ืขื˜ ืึธื ื”ื™ื™ื‘ืŸ ืึท ืกืขืจื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื”ื˜ื˜ืคึผ ื‘ืึทื“ื™ื ื•ื ื’ืก ื•ื•ืึธืก ื’ืœื™ื™ึทื›ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ื™ืคื™ื™ื ื“ ืคึฟืึทืจ ืขื ื•ื•ื•ื™.

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

ืžื™ื˜ ื“ื™ ืกืขืจื•ื•ื™ืกืขืก ื‘ื ื™ืžืฆื, Envoy ืงืขื ืขืŸ ื”ืฆืœื—ื” ืคึผืจืึทืงืกื™ ืคืึทืจืงืขืจ ืฆื• ื–ื™ื™ืŸ ื“ืขืกื˜ื™ื ื™ื™ืฉืึทืŸ.

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

ืื™ืจ ื–ืึธืœ ื–ืขืŸ ืึท ืขื ื˜ืคืขืจ ื•ื•ืึธืก ื™ื ื“ื™ืงื™ื™ืฅ ื•ื•ืึธืก ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืคึผืจืึทืกืขืกื˜ ื“ื™ ื‘ืงืฉื”. ืื™ืŸ ื“ื™ Envoy Proxy ืœืึธื’ืก ืื™ืจ ื–ืึธืœ ืื•ื™ืš ื–ืขืŸ ืึท ืึทืงืกืขืก ืฉื˜ืจื™ืงืœ ืจืขื–ื•ืœื˜ืึทื˜.

ื ืึธืš ื”ื˜ื˜ืคึผ ืขื ื˜ืคืขืจ ื›ืขื“ืขืจื–

ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ื ืึธืš ื”ื˜ื˜ืคึผ ื›ืขื“ืขืจื– ืื™ืŸ ื“ื™ ืขื ื˜ืคืขืจ ื›ืขื“ืขืจื– ืคื•ืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ื‘ืขื˜ืŸ. ื“ื™ ื›ืขื“ืขืจ ื“ื™ืกืคึผืœื™ื™ื– ื“ื™ ืฆื™ื™ื˜ ื•ื•ืึธืก ื“ื™ ืึทืคึผืกื˜ืจื™ื ื‘ืึทืœืขื‘ืึธืก ืคืืจื‘ืจืื›ื˜ ืคึผืจืึทืกืขืกื™ื ื’ ื“ื™ ื‘ืขื˜ืŸ. ืื•ื™ืกื’ืขื“ืจื™ืงื˜ ืื™ืŸ ืžื™ืœื™ืกืขืงืึทื ื“ื–. ื“ืึธืก ืื™ื– ื ื•ืฆื™ืง ืื•ื™ื‘ ื“ืขืจ ืงืœื™ืขื ื˜ ื•ื•ื™ืœ ืฆื• ื‘ืึทืฉื˜ื™ืžืขืŸ ื“ื™ื ืกื˜ ืฆื™ื™ื˜ ืงืึทืžืคึผืขืจื“ ืžื™ื˜ ื ืขืฅ ืœื™ื™ื˜ืึทื ืกื™.

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/

ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ืจืคึผื ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืึท ืกื™ืกื˜ืขื ืกืขืจื•ื•ื™ืก ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ืœื™ื™ื’ ืกื™ืกื˜ืขืž ืกืขืจื•ื•ื™ืก ืงืึธื ืคื™ื’ /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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’