Nginx เชฅเซ€ Envoy Proxy เชฎเชพเช‚ เชธเซเชฅเชณเชพเช‚เชคเชฐ

เชนเซ‡เชฒเซ‹, เชนเซ‡เชฌเซเชฐ! เชนเซเช‚ เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชชเชฐ เชชเซ‹เชธเซเชŸเชจเซ‹ เช…เชจเซเชตเชพเชฆ เชฒเชพเชตเซเช‚ เช›เซเช‚: Nginx เชฅเซ€ Envoy Proxy เชฎเชพเช‚ เชธเซเชฅเชณเชพเช‚เชคเชฐ.

เชเชจเซเชตเซ‹เชฏ เช เชเช• เช‰เชšเซเชš-เชชเซเชฐเชฆเชฐเซเชถเชจ เชตเชฟเชคเชฐเชฟเชค เชชเซเชฐเซ‹เช•เซเชธเซ€ เชธเชฐเซเชตเชฐ เช›เซ‡ (C++ เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ) เชตเซเชฏเช•เซเชคเชฟเช—เชค เชธเซ‡เชตเชพเช“ เช…เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡, เชคเซ‡ เชเช• เช•เซ‹เชฎเซเชฏเซเชจเชฟเช•เซ‡เชถเชจ เชฌเชธ เช…เชจเซ‡ "เชฏเซเชจเชฟเชตเชฐเซเชธเชฒ เชกเซ‡เชŸเชพ เชชเซเชฒเซ‡เชจ" เชชเชฃ เช›เซ‡ เชœเซ‡ เชฎเซ‹เชŸเชพ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธ "เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ" เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡. เชคเซ‡เชจเซ‡ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡, NGINX, HAProxy, เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฐเซเชธ เช…เชจเซ‡ เช•เซเชฒเชพเช‰เชก เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฐเซเชธ เชœเซ‡เชตเชพ เชธเชฐเซเชตเชฐเซเชธเชจเชพ เชตเชฟเช•เชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชŠเชญเซ€ เชฅเชฏเซ‡เชฒเซ€ เชธเชฎเชธเซเชฏเชพเช“เชจเชพ เช‰เช•เซ‡เชฒเซ‹เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ. เชฆเซ‚เชค เชฆเชฐเซ‡เช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ€เชงเชพ เชตเชฟเชจเชพ เชธเชพเชฎเชพเชจเซเชฏ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ‡ เช…เชฎเซ‚เชฐเซเชค เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชฎเชพเช‚ เชคเชฎเชพเชฎ เชธเชฐเซเชตเชฟเชธ เชŸเซเชฐเชพเชซเชฟเช• เชเชจเซเชตเซ‹เชฏ เชฎเซ‡เชถเชฎเชพเช‚เชฅเซ€ เชตเชนเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชธเชคเชค เช…เชตเชฒเซ‹เช•เชจเช•เซเชทเชฎเชคเชพ เชธเชพเชฅเซ‡ เชธเชฎเชธเซเชฏเชพเชตเชพเชณเชพ เชตเชฟเชธเซเชคเชพเชฐเซ‹เชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเชตเซ€, เชเช•เช‚เชฆเชฐ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‡ เชŸเซเชฏเซเชจ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชšเซ‹เช•เซเช•เชธ เชธเซเชฅเชพเชจเชฎเชพเช‚ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเซ‡ เช›เซ‡.

เชฒเช•เซเชทเชฃเซ‹

  • เช†เช‰เชŸ-เช“เชซ-เชชเซเชฐเซ‹เชธเซ‡เชธ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ: เชเชจเซเชตเซ‹เชฏ เช เชธเซเชตเชฏเช‚-เชธเชฎเชพเชฏเซ‡เชฒ, เช‰เชšเซเชš-เชชเซเชฐเชฆเชฐเซเชถเชจ เชธเชฐเซเชตเชฐ เช›เซ‡ เชœเซ‡ เชฅเซ‹เชกเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ RAM เชฒเซ‡ เช›เซ‡. เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชญเชพเชทเชพ เช…เชฅเชตเชพ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃเชฎเชพเช‚ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.
  • http/2 เช…เชจเซ‡ grpc เชธเชชเซ‹เชฐเซเชŸ: เชฆเซ‚เชค เชชเชพเชธเซ‡ เชซเชฐเซเชธเซเชŸ-เช•เซเชฒเชพเชธ http/2 เช…เชจเซ‡ grpc เชธเชชเซ‹เชฐเซเชŸ เช‡เชจเช•เชฎเชฟเช‚เช— เช…เชจเซ‡ เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เช•เชจเซ‡เช•เซเชถเชจเซเชธ เชฎเชพเชŸเซ‡ เช›เซ‡. เช† http/1.1 เชฅเซ€ http/2 เชธเซเชงเซ€เชจเซ€ เชชเชพเชฐเชฆเชฐเซเชถเช• เชชเซเชฐเซ‹เช•เซเชธเซ€ เช›เซ‡.
  • เชเชกเชตเชพเชจเซเชธเซเชก เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฟเช‚เช—: เชฆเซ‚เชค เช…เชฆเซเชฏเชคเชจ เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฟเช‚เช— เชซเชฟเชšเชฐเซเชธเชจเซเช‚ เชธเชฎเชฐเซเชฅเชจ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช“เชŸเซ‹เชฎเซ‡เชŸเชฟเช• เชฐเชฟเชŸเซเชฐเชพเชฏเซเชธ, เชšเซ‡เชˆเชจ เชฌเซเชฐเซ‡เช•เชฟเช‚เช—, เช—เซเชฒเซ‹เชฌเชฒ เชฐเซ‡เชŸ เชฒเชฟเชฎเชฟเชŸเชฟเช‚เช—, เชฐเชฟเช•เซเชตเซ‡เชธเซเชŸ เชถเซ‡เชกเซ‹เชˆเช‚เช—, เชฒเซ‹เช•เชฒ เชเซ‹เชจ เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฟเช‚เช— เชตเช—เซ‡เชฐเซ‡เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.
  • เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ API: เชฆเซ‚เชค เชคเชฎเชพเชฐเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชธเช‚เชšเชพเชฒเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชฎเชœเชฌเซ‚เชค API เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡.
  • เช…เชตเชฒเซ‹เช•เชจเช•เซเชทเชฎเชคเชพ: L7 เชŸเซเชฐเชพเชซเชฟเช•เชจเซ€ เชŠเช‚เชกเซ€ เช…เชตเชฒเซ‹เช•เชจเช•เซเชทเชฎเชคเชพ, เชตเชฟเชคเชฐเชฟเชค เชŸเซเชฐเซ‡เชธเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชฎเซ‚เชณ เช†เชงเชพเชฐ เช…เชจเซ‡ เชฎเซ‹เช‚เช—เซ‹เชกเชฌเซ€, เชกเชพเชฏเชจเชพเชฎเซ‹เชกเชฌเซ€ เช…เชจเซ‡ เช…เชจเซเชฏ เช˜เชฃเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹เชจเซ€ เช…เชตเชฒเซ‹เช•เชจเช•เซเชทเชฎเชคเชพ.

เชชเช—เชฒเซเช‚ 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 เชจเชพ เชตเชฟเชตเชฟเชง เชญเชพเช—เซ‹ เชฎเชพเชŸเซ‡ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเซเช‚.

เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชชเชฐ เชคเชฎเชพเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเชพเช—เซ เชฅเชถเซ‡ เชจเชนเซ€เช‚, เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชฐเชพเชœเชฆเซ‚เชค เชชเซเชฐเซ‹เช•เซเชธเซ€ เชชเชพเชธเซ‡ เช›เซ‡ เชšเชพเชฐ เชฎเซเช–เซเชฏ เชชเซเชฐเช•เชพเชฐเซ‹, เชœเซ‡ เชเชจเชœเซ€เช†เชˆเชเชจเชเช•เซเชธ เชฆเซเชตเชพเชฐเชพ เช“เชซเชฐ เช•เชฐเชพเชฏเซ‡เชฒเชพ เชฎเซเช–เซเชฏ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡. เชฎเซเช–เซเชฏ เช›เซ‡:

  • เชถเซเชฐเซ‹เชคเชพเช“: เชคเซ‡เช“ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช‡เชจเช•เชฎเชฟเช‚เช— เชตเชฟเชจเช‚เชคเซ€เช“ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡. เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชนเชพเชฒเชฎเชพเช‚ เชซเช•เซเชค TCP-เช†เชงเชพเชฐเชฟเชค เชถเซเชฐเซ‹เชคเชพเช“เชจเซ‡ เชœ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡. เชเช•เชตเชพเชฐ เช•เชจเซ‡เช•เซเชถเชจ เชธเซเชฅเชพเชชเชฟเชค เชฅเชˆ เชœเชพเชฏ, เชคเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเชพ เชธเชฎเซ‚เชนเชฎเชพเช‚ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡.
  • เชซเชฟเชฒเซเชŸเชฐเซเชธ: เชคเซ‡เช“ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชจเซ‹ เชญเชพเช— เช›เซ‡ เชœเซ‡ เช‡เชจเช•เชฎเชฟเช‚เช— เช…เชจเซ‡ เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เชกเซ‡เชŸเชพ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชฎเชพเช‚ Gzip เชœเซ‡เชตเชพ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡, เชœเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‡ เชฎเซ‹เช•เชฒเชคเชพ เชชเชนเซ‡เชฒเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡.
  • เชฐเชพเช‰เชŸเชฐเซเชธ: เชคเซ‡เช“ เช•เซเชฒเชธเซเชŸเชฐ เชคเชฐเซ€เช•เซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค, เช†เชตเชถเซเชฏเช• เช—เช‚เชคเชตเซเชฏ เชชเชฐ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เช†เช—เชณ เชงเชชเชพเชตเซ‡ เช›เซ‡.
  • เช•เซเชฒเชธเซเชŸเชฐเซ‹: เชคเซ‡เช“ เชŸเซเชฐเชพเชซเชฟเช• เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฎเชพเชŸเซ‡ เช…เช‚เชคเชฟเชฎ เชฌเชฟเช‚เชฆเซเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

เช…เชฎเซ‡ เช† เชšเชพเชฐ เช˜เชŸเช•เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชšเซ‹เช•เซเช•เชธ NGINX เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเซ€เชถเซเช‚. เชฆเซ‚เชคเชจเซ‹ เชงเซเชฏเซ‡เชฏ เชเชชเซ€เช†เชˆ เช…เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เช—เซ‹เช เชตเชฃเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช†เชงเชพเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ NGINX เชฅเซ€ เชธเซเชฅเชฟเชฐ, เชนเชพเชฐเซเชก-เช•เซ‹เชกเซ‡เชก เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชถเซ‡.

เชชเช—เชฒเซเช‚ 2 - NGINX เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

เชชเซเชฐเชฅเชฎ เชญเชพเช— nginx.conf เช•เซ‡เชŸเชฒเชพเช• NGINX เช‡เชจเซเชŸเชฐเชจเชฒเซเชธเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช•เชพเชฎเชฆเชพเชฐ เชœเซ‹เชกเชพเชฃเซ‹

เชจเซ€เชšเซ‡เชจเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชพเชฐเซเชฏเช•เชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เช…เชจเซ‡ เชœเซ‹เชกเชพเชฃเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡. เช† เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เชฎเชพเช‚เช—เชจเซ‡ เชชเชนเซ‹เช‚เชšเซ€ เชตเชณเชตเชพ เชฎเชพเชŸเซ‡ NGINX เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซเช•เซ‡เชฒ เช•เชฐเชถเซ‡.

worker_processes  2;

events {
  worker_connections   2000;
}

เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชตเชฐเซเช•เชซเซเชฒเซ‹ เช…เชจเซ‡ เช•เชจเซ‡เช•เซเชถเชจเชจเซ‡ เช…เชฒเช— เช…เชฒเช— เชฐเซ€เชคเซ‡ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเซ‡ เช›เซ‡.

เชฆเซ‚เชค เชธเชฟเชธเซเชŸเชฎ เชชเชฐเชจเชพ เชฆเชฐเซ‡เช• เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชฅเซเชฐเซ‡เชก เชฎเชพเชŸเซ‡ เชตเชฐเซเช•เชฐ เชฅเซเชฐเซ‡เชก เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชฆเชฐเซ‡เช• เชตเชฐเซเช•เชฐ เชฅเซเชฐเซ‡เชก เชฌเชฟเชจ-เช…เชตเชฐเซ‹เชงเชฟเชค เช‡เชตเซ‡เชจเซเชŸ เชฒเซ‚เชช เชšเชฒเชพเชตเซ‡ เช›เซ‡ เชœเซ‡ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡

  1. เชฆเชฐเซ‡เช• เชถเซเชฐเซ‹เชคเชพเชจเซ€ เชตเชพเชค เชธเชพเช‚เชญเชณเชตเซ€
  2. เชจเชตเชพ เชœเซ‹เชกเชพเชฃเซ‹ เชธเซเชตเซ€เช•เชพเชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช
  3. เช•เชจเซ‡เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‹ เชธเชฎเซ‚เชน เชฌเชจเชพเชตเชตเซ‹
  4. เช•เชจเซ‡เช•เซเชถเชจเชจเชพ เชœเซ€เชตเชจเช•เชพเชณ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชคเชฎเชพเชฎ I/O เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ‹.

เช†เช—เชณเชจเซ€ เชคเชฎเชพเชฎ เช•เชจเซ‡เช•เซเชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชตเชฐเซเช•เชฐ เชฅเซเชฐเซ‡เชกเชฎเชพเช‚ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชซเซ‹เชฐเชตเชฐเซเชกเชฟเช‚เช— เชตเชฐเซเชคเชจเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

เชเชจเซเชตเซ‹เชฏเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชตเชฐเซเช•เชฐ เชฅเซเชฐเซ‡เชก เชฎเชพเชŸเซ‡, เช•เชจเซ‡เช•เซเชถเชจ เชชเซ‚เชฒ เช›เซ‡. เชคเซ‡เชฅเซ€ 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;

เชฆเซ‚เชคเชจเซ€ เช…เช‚เชฆเชฐ, เชคเซ‡ เชถเซเชฐเซ‹เชคเชพเช“ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เชฆเซ‚เชค เชถเซเชฐเซ‹เชคเชพเช“

เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซเช‚ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชจเซเช‚ เชชเชพเชธเซเช‚ เชคเชฎเชพเชฐเชพ เชถเซเชฐเซ‹เชคเชพเช“เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ เชเช• เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡ เชตเชฐเซเชฃเชตเซ‡ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชเชจเซเชตเซ‹เชฏ เช‡เชจเซเชธเซเชŸเชจเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹.

เชจเซ€เชšเซ‡เชจเซ‹ เชธเซเชจเชฟเชชเซ‡เชŸ เชเช• เชจเชตเซ‹ เชถเซเชฐเซ‹เชคเชพ เชฌเชจเชพเชตเชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเซ‹เชฐเซเชŸ 8080 เชธเชพเชฅเซ‡ เชœเซ‹เชกเชถเซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€เชจเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡เชจเซ‡ เช†เชตเชจเชพเชฐเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเชพเชŸเซ‡ เช•เชฏเชพ เชชเซ‹เชฐเซเชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเซเช‚ เชœเซ‹เชˆเช.

เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชคเซ‡เชจเซ€ เช—เซ‹เช เชตเชฃเซ€ เชฎเชพเชŸเซ‡ 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;
}

เชฆเซ‚เชค เชชเชฐ, เชซเชฟเชฒเซเชŸเชฐเซเชธ เช† เช•เชฐเซ‡ เช›เซ‡.

เชฆเซ‚เชค เชซเชฟเชฒเซเชŸเชฐเซเชธ

เชธเซเชฅเชฟเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡, เชซเชฟเชฒเซเชŸเชฐเซเชธ เช‡เชจเช•เชฎเชฟเช‚เช— เชตเชฟเชจเช‚เชคเซ€เช“ เชชเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเซ€ เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเซ‡ เชซเชฟเชฒเซเชŸเชฐเซเชธ เชธเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡ เชฎเซ‡เชš เช•เชฐเซ‡ เช›เซ‡ เชธเชฐเซเชตเชฐ_เชจเชพเชฎเซ‹ เชชเชพเช›เชฒเชพ เชชเช—เชฒเชพเชฎเชพเช‚. เชœเซเชฏเชพเชฐเซ‡ เช‡เชจเช•เชฎเชฟเช‚เช— เชตเชฟเชจเช‚เชคเซ€เช“ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เชšเซ‹เช•เซเช•เชธ เชกเซ‹เชฎเซ‡เชจเซเชธ เช…เชจเซ‡ เชฐเซ‚เชŸเซเชธ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซ€ เชนเซ‹เชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชคเชฐเชซ เชฐเซ‚เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† 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 เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€เชฎเชพเช‚ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชซเชฟเชฒเซเชŸเชฐ เช›เซ‡. เช…เชจเซเชฏ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡ Redis, เชฎเซ‹เช—เซ‹, เชŸเซ€เชธเซ€เชชเซ€. เชคเชฎเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เช…เชนเซ€เช‚ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เช…เชจเซเชฏ เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฟเช‚เช— เชจเซ€เชคเชฟเช“ เชตเชฟเชถเซ‡ เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€ เชฎเชพเชŸเซ‡, เชฎเซเชฒเชพเช•เชพเชค เชฒเซ‹ เชฐเชพเชœเชฆเซ‚เชค เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เชชเช—เชฒเซเช‚ 5 - เชชเซเชฐเซ‹เช•เซเชธเซ€ เช…เชจเซ‡ เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

NGINX เชฎเชพเช‚, เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเช•เซเชทเซเชฏ เชธเชฐเซเชตเชฐเซเชธเชจเชพ เชธเชฎเซ‚เชนเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชถเซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฌเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชธเซ‹เช‚เชชเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

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

เชเชจเซเชตเซ‹เชฏเชฎเชพเช‚, เช† เช•เซเชฒเชธเซเชŸเชฐเซ‹ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เชฆเซ‚เชค เช•เซเชฒเชธเซเชŸเชฐเซ‹

เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชธเชฎเช•เช•เซเชทเชจเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชคเชฐเซ€เช•เซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชœเซ‡ เชฏเชœเชฎเชพเชจเซ‹ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‡ เชธเซ‡เชตเชพ เช†เชชเชถเซ‡ เชคเซ‡เชฎเชจเซ€ เช“เชณเช– เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เชฏเชœเชฎเชพเชจเซ‹ เชœเซ‡ เชฐเซ€เชคเซ‡ เชเช•เซเชธเซ‡เชธ เชฅเชพเชฏ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชธเชฎเชฏเชธเชฎเชพเชชเซเชคเชฟ, เช•เซเชฒเชธเซเชŸเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชคเชฐเซ€เช•เซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡. เช† เชฒเซ‡เชŸเชจเซเชธเซ€ เช…เชจเซ‡ เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฟเช‚เช— เชœเซ‡เชตเชพ เชชเชพเชธเชพเช“ เชชเชฐ เชตเชงเซ เชฆเชพเชฃเชพเชฆเชพเชฐ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡.

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 - เชฒเซ‹เช— เชเช•เซเชธเซ‡เชธ เช…เชจเซ‡ เชญเซ‚เชฒเซ‹

เช…เช‚เชคเชฟเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชจเซ‹เช‚เชงเชฃเซ€ เช›เซ‡. เชเชฐเชฐ เชฒเซ‹เช—เซเชธเชจเซ‡ เชกเชฟเชธเซเช• เชชเชฐ เชงเช•เซ‡เชฒเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡, เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เซเชฒเชพเช‰เชก-เช†เชงเชพเชฐเชฟเชค เช…เชญเชฟเช—เชฎ เช…เชชเชจเชพเชตเซ‡ เช›เซ‡. เชฌเชงเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เช—เซเชธ เช†เช‰เชŸเชชเซเชŸ เช›เซ‡ 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 เชชเชฐ เช†เชตเชจเชพเชฐเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชธเชพเช‚เชญเชณเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช†เชชเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชฒเชฟเชธเชจเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชธเซเชชเชทเซเชŸ เช•เชฐเซเชฏเชพ เชฎเซเชœเชฌ, เชเชจเซเชตเซ‹เชฏ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชชเซ‹เชฐเซเชŸ 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹