αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž–αžΈ Nginx αž‘αŸ…αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž”αŸ’αžšαŸαžŸαž·αž

αžŸαž½αžŸαŸ’αžαžΈ αž αžΆαž”! αžαŸ’αž‰αž»αŸ†β€‹αžŸαžΌαž˜β€‹αž“αžΆαŸ†β€‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸβ€‹αž’αŸ’αž“αž€β€‹αž‘αŸ…β€‹αž˜αžΎαž›β€‹αž€αžΆαžšβ€‹αž”αž€β€‹αž”αŸ’αžšαŸ‚β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαž€αžΆαžŸβ€‹αž“αŸαŸ‡αŸ– αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž–αžΈ Nginx αž‘αŸ…αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž”αŸ’αžšαŸαžŸαž·αž.

Envoy αž‚αžΊαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžαŸ’αž–αžŸαŸ‹ (αžŸαžšαžŸαŸαžšαž‡αžΆ C ++) αžŠαŸ‚αž›αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΈαž˜αž½αž™αŸ— αžœαžΆαž€αŸαž‡αžΆαž‘αžΆαž“αž€αŸ’αžšαž»αž„αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„ αž“αž·αž„ "αž™αž“αŸ’αžαž αŸ„αŸ‡αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž€αž›" αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ "αž”αžŽαŸ’αžαžΆαž‰αžŸαŸαžœαžΆ" αžαŸ’αž“αžΆαžαžαžΌαž…αžαŸ’αž“αžΆαžαž’αŸ†αŸ” αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžœαžΆ αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αž„αŸ’αž€αžΎαž server αžŠαžΌαž…αž‡αžΆ NGINX, HAProxy, hardware load balancers αž“αž·αž„ cloud load balancers αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž™αž€αž˜αž€αž–αž·αž…αžΆαžšαžŽαžΆαŸ” αž”αŸαžŸαž€αž‡αž“αž’αŸ’αžœαžΎαž€αžΆαžšαžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΈαž˜αž½αž™αŸ— αž αžΎαž™αž’αžšαžΌαž”αžΈαž”αžŽαŸ’αžαžΆαž‰αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž˜αž»αžαž„αžΆαžšαž‘αžΌαž‘αŸ…αžŠαŸ„αž™αž˜αž·αž“αž‚αž·αžαž–αžΈαžœαŸαž‘αž·αž€αžΆαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž…αžšαžΆαž…αžšαžŽαŸαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž αžΌαžšαž€αžΆαžαŸ‹αž”αžŽαŸ’αžαžΆαž‰ Envoy αžœαžΆαž“αžΉαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αžαŸ†αž”αž“αŸ‹αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŸαž„αŸ’αž€αŸαžαž‡αžΆαž”αŸ‹αž›αžΆαž”αŸ‹ αžŸαž˜αŸ’αžšαž½αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž˜αžΌαž› αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αž˜αž»αžαž„αžΆαžšαžŸαŸ’αž“αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αžΈαžαžΆαŸ†αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ

  • αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž€αŸ’αžšαŸ…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ– αž”αŸαžŸαž€αž‡αž“αž‚αžΊαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž–αžŸαŸ‹αžŠαŸ‚αž›αž™αž€ RAM αžαž·αž…αžαž½αž…αŸ” αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž¬αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαžŽαžΆαž˜αž½αž™αŸ”
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš http/2 αž“αž·αž„ grpcαŸ– αž”αŸαžŸαž€αž‡αž“αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš http/2 αž“αž·αž„ grpc αžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ†αž”αžΌαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž…αžΌαž›αž“αž·αž„αž…αŸαž‰αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαžαŸ’αž›αžΆαž–αžΈ http/1.1 αž‘αŸ… http/2 αŸ”
  • αžαž»αž›αŸ’αž™αž—αžΆαž–αž”αž“αŸ’αž‘αž»αž€αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αŸ– αž”αŸαžŸαž€αž‡αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž˜αž»αžαž„αžΆαžšαžαž»αž›αŸ’αž™αž—αžΆαž–αž”αž“αŸ’αž‘αž»αž€αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžšαžΆαžŸαž€αž› αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αžšαž˜αŸ„αž›αžŸαŸ†αžŽαžΎ αžαž»αž›αŸ’αž™αž—αžΆαž–αž€αžΆαžšαž•αŸ’αž‘αž»αž€αžαŸ†αž”αž“αŸ‹αŸ”αž›αŸ”
  • Configuration Management APIαŸ– αž”αŸαžŸαž€αž‡αž“αž•αŸ’αžαž›αŸ‹αž“αžΌαžœ 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 αž‘αŸ αž αžΎαž™αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸαŸ” αž”αŸ’αžšαŸαžŸαž·αžαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž˜αžΆαž“ αž”αŸ’αžšαž—αŸαž‘αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž…αŸ†αž“αž½αž“αž”αž½αž“αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ’αž“αžΌαž›αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ NGINX αŸ” αžŸαŸ’αž“αžΌαž›αž‚αžΊαŸ–

  • αž’αŸ’αž“αž€αžŸαŸ’αžαžΆαž”αŸ‹αŸ– αž–αž½αž€αž‚αŸαž€αŸ†αžŽαžαŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› Envoy Proxy αž‘αž‘αž½αž›αž™αž€αžŸαŸ†αžŽαžΎαž…αžΌαž›αŸ” Envoy Proxy αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ‚αž’αŸ’αž“αž€αžŸαŸ’αžαžΆαž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ TCP αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžαž˜αŸ’αžšαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  • αžαž˜αŸ’αžšαž„αŸ– αž–αž½αž€αžœαžΆαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž”αŸ†αž–αž„αŸ‹αžŠαŸ‚αž›αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αžΌαž›αž“αž·αž„αž…αŸαž‰αŸ” αž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžαž˜αŸ’αžšαž„αžŠαžΌαž…αž‡αžΆ Gzip αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž»αž“αž–αŸαž›αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαŸ”
  • αžšαŸ‰αŸ„αžαž‘αŸαžšαŸ– αž–αž½αž€αž‚αŸαž”αž‰αŸ’αž‡αžΌαž“αž…αžšαžΆαž…αžšαžŽαŸαž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸ„αž›αžŠαŸ…αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž…αž„αŸ’αž€αŸ„αž˜αŸ”
  • αž…αž„αŸ’αž€αŸ„αž˜: αž–αž½αž€αž‚αŸαž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αžšαžΆαž…αžšαžŽαŸ αž“αž·αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ”

αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαžŸαž˜αžΆαžŸαž’αžΆαžαž»αž‘αžΆαŸ†αž„αž”αž½αž“αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ Envoy αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ NGINX αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž‚αŸ„αž›αžŠαŸ…αžšαž”αžŸαŸ‹αž”αŸαžŸαž€αž‡αž“αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ APIs αž“αž·αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΆαž˜αžœαž“αŸ’αžαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αžΉαž„αž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΌαžŠαžšαžΉαž„ αž“αž·αž„αž‹αž·αžαž·αžœαž“αŸ’αžαž–αžΈ NGINX αŸ”

αž‡αŸ†αž αžΆαž“αž‘αžΈ 2 - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ NGINX

αž•αŸ’αž“αŸ‚αž€αžŠαŸ†αž”αžΌαž„ nginx.conf αž€αŸ†αžŽαžαŸ‹αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αž“αž»αž„ NGINX αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ”

αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž€αž˜αŸ’αž˜αž€αžš

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž“αž½αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αž€αžšαŸ” αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› NGINX αž“αžΉαž„αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž–αŸαž‰αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžš αž“αž·αž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ”

αž”αŸαžŸαž€αž‡αž“αž”αž„αŸ’αž€αžΎαžαžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžšαž“αž·αž˜αž½αž™αŸ—αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž˜αž·αž“αžšαžΆαžšαžΆαŸ†αž„αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœ

  1. αžŸαŸ’αžαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŸαŸ’αžαžΆαž”αŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹αŸ—
  2. αž€αžΆαžšαž‘αž‘αž½αž›αž™αž€αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αž˜αžΈαŸ”
  3. αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžαž˜αŸ’αžšαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹
  4. αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš I/O αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžš αžšαž½αž˜αž‘αžΆαŸ†αž„αž₯αžšαž·αž™αžΆαž”αžαž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžšαž“αž·αž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ Envoy αž˜αžΆαž“αž’αžΆαž„αžαž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αžŽαŸ’αžαž»αŸ†αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ HTTP/2 αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ‚αž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαžΆαž„αž€αŸ’αžšαŸ…αž“αŸ…αž–αŸαž›αžαŸ‚αž˜αž½αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžš 2 αž“αŸ„αŸ‡αž“αžΉαž„αž˜αžΆαž“αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ HTTP/XNUMX αž…αŸ†αž“αž½αž“αž”αž½αž“αž€αŸ’αž“αž»αž„αž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαžΆαž„αž€αŸ’αžšαŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαŸ’αžαž·αžšαž—αžΆαž–αŸ” αžŠαŸ„αž™αžšαž€αŸ’αžŸαžΆαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžšαžαŸ‚αž˜αž½αž™ αž€αžΌαžŠαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹ αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αžαŸ‚αž˜αž½αž™αžαŸ’αžŸαŸ‚αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžšαž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž›αžΎαžŸαž–αžΈαž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αžœαžΆαž’αžΆαž…αž“αžΆαŸ†αž±αŸ’αž™αž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αžΆαžšαž…αž„αž…αžΆαŸ† αž”αž„αŸ’αž€αžΎαžαž…αŸ†αž“αž½αž“αž…αŸ’αžšαžΎαž“αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ†αž“αŸαžš αž“αž·αž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž…αŸ†αž“αž½αž“αžŠαž„αžŠαŸ‚αž›αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž’αžΆαž„αžœαž·αž‰αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαžΌαž˜αž…αžΌαž›αž˜αžΎαž› αž”αŸ’αžšαŸαžŸαž·αžαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž”αŸ’αž›αž€αŸ‹.

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ 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 Proxy αž‚αžΊαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αŸ’αž“αž€αžŸαŸ’αžαžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž’αŸ’αž“αž€β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž―αž€αžŸαžΆαžšβ€‹αž€αŸ†αžŽαžαŸ‹β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αžŠαŸ‚αž›β€‹αž–αž·αž–αžŽαŸŒαž“αžΆβ€‹αž’αŸ†αž–αžΈβ€‹αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž…αž„αŸ‹β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹ Envoy instanceαŸ”

αž’αžαŸ’αžαž”αž‘αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž’αŸ’αž“αž€αžŸαŸ’αžαžΆαž”αŸ‹αžαŸ’αž˜αžΈ αž αžΎαž™αž…αž„αžœαžΆαž‘αŸ…αž…αŸ’αžšαž€ 8080αŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαžΆαž”αŸ‹ Envoy Proxy αžαžΆαžαžΎαž…αŸ’αžšαž€αžŽαžΆαžŠαŸ‚αž›αžœαžΆαž‚αž½αžšαž…αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαž…αžΌαž›αŸ”

αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž”αŸ’αžšαŸαžŸαž·αžαž”αŸ’αžšαžΎαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ YAML αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αžœαžΆαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαžŸαž‰αŸ’αž‰αžΆαžŽαž“αŸαŸ‡ αžŸαžΌαž˜αž˜αžΎαž›αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αžαŸ†αžŽ.

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

αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ†αžŽαžαŸ‹αž‘αŸαŸ” server_name αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈ Envoy Proxy filters αž“αžΉαž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαŸ”

αž‡αŸ†αž αžΆαž“αž‘αžΈ 4 - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αžΈαžαžΆαŸ†αž„

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαž…αžΌαž›αž˜αž€αž€αŸ’αž“αž»αž„ NGINX αž”αŸ’αž›αž»αž€αž‘αžΈαžαžΆαŸ†αž„αž€αŸ†αžŽαžαŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΌαž“αž…αžšαžΆαž…αžšαžŽαŸαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ†αžŽαŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž…αžšαžΆαž…αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž‘αŸ…αž”αžŽαŸ’αžαžΆαž‰αžαžΆαž„αž›αžΎ (αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αŸ– αž…αžšαž“αŸ’αžαžαžΆαž„αž›αžΎαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ) αž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ αž…αž„αŸ’αž€αŸ„αž˜αž‚αŸ„αž›αžŠαŸ…. αž…αž„αŸ’αž€αŸ„αž˜αžαžΆαž„αž›αžΎαž€αŸ†αžŽαžαŸ‹αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž‚αž½αžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαžΎαŸ” αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžšαžΏαž„αž“αŸαŸ‡αž“αŸ…αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

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

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

αž“αŸ… Envoy, Filters αž’αŸ’αžœαžΎαž”αŸ‚αž”αž“αŸαŸ‡αŸ”

αžαž˜αŸ’αžšαž„αž”αŸαžŸαž€αž‡αž“

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‹αž·αžαž·αžœαž“αŸ’αž αžαž˜αŸ’αžšαž„αž€αŸ†αžŽαžαŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαžΎαž…αžΌαž›αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αžšαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” 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

αžˆαŸ’αž˜αŸ„αŸ‡ αž”αŸαžŸαž€αž‡αž“.http_connection_manager αž‚αžΊαž‡αžΆαžαž˜αŸ’αžšαž„αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Envoy ProxyαŸ” αžαž˜αŸ’αžšαž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžšαž½αž˜αž˜αžΆαž“ Redis, αž˜αŸ‰αž»αž„αž αŸ’αž‚αŸ„αŸ‡, TCP. αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž“αŸ… αž―αž€αžŸαžΆαžš.

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαž»αž›αŸ’αž™αž—αžΆαž–αž”αž“αŸ’αž‘αž»αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžŸαžΌαž˜αž…αžΌαž›αž˜αžΎαž› αž―αž€αžŸαžΆαžšαž”αŸαžŸαž€αž‡αž“.

αž‡αŸ†αž αžΆαž“αž‘αžΈ 5 - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ αž“αž·αž„αžαžΆαž„αž›αžΎ

αž“αŸ…αž€αŸ’αž“αž»αž„ NGINX αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΆαž„αž›αžΎαž€αŸ†αžŽαžαŸ‹αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αŸ„αž›αžŠαŸ…αžŠαŸ‚αž›αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αžšαžΆαž…αžšαžŽαŸαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž…αž„αŸ’αž€αŸ„αž˜αž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αžαžΆαŸ†αž„αŸ”

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

αž“αŸ…αž€αŸ’αž“αž»αž„ Envoy αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ„αž™αž€αŸ’αžšαž»αž˜αŸ”

αž€αŸ’αžšαž»αž˜αž”αŸαžŸαž€αž‡αž“

αžŸαž˜αž˜αžΌαž›αž…αžšαž“αŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž…αž„αŸ’αž€αŸ„αž˜αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡αžŠαŸ‚αž›αž“αžΉαž„αž”αž˜αŸ’αžšαžΎαž…αžšαžΆαž…αžšαžŽαŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαŸ” αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΌαž›αž”αŸ’αžšαžΎ αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αž„αŸ’αž€αŸ„αž˜αŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž›αžΎαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαžΌαž…αž‡αžΆ αž—αžΆαž–αž™αžΊαžαž™αŸ‰αžΆαžœ αž“αž·αž„αžαž»αž›αŸ’αž™αž—αžΆαž–αž”αž“αŸ’αž‘αž»αž€αŸ”

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

αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž€αžΆαžšαžšαž€αžƒαžΎαž‰αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ STRICT_DNS αž”αŸαžŸαž€αž‡αž“αž“αžΉαž„αž”αž“αŸ’αžαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‚αŸ„αž›αžŠαŸ… DNS αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž“αž·αž„αž’αžŸαž˜αž€αžΆαž›αŸ” αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž–αžΈαž›αž‘αŸ’αž’αž•αž› DNS αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αžαžΆαž„αž›αžΎαŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸ†αžŽαžΎαžαŸ’αžšαž‘αž”αŸ‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž–αžΈαžš αž”αŸ’αžšαŸαžŸαž·αžαž“αžΉαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ αž αžΎαž™αž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž•αŸ’αž‘αž»αž€αž˜αžΆαž“αžαž»αž›αŸ’αž™αž—αžΆαž–αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈαž›αž‘αŸ’αž’αž•αž› αž”αŸαžŸαž€αž‡αž“αž“αžΉαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαžœαžΆαž›αŸ‚αž„αž˜αžΆαž“αž‘αŸ€αžαž αžΎαž™ αž αžΎαž™αž“αžΉαž„αž‘αžΆαž‰αž…αžšαžΆαž…αžšαž–αžΈαž€αŸ’αžšαž»αž˜αžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαžΌαž˜αž˜αžΎαž› αž―αž€αžŸαžΆαžšαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαžšαž”αžŸαŸ‹αž”αŸ’αžšαŸαžŸαž·αž.

αž‡αŸ†αž αžΆαž“αž‘αžΈ 6 - αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αž“αž·αž„αž€αŸ†αž αž»αžŸ

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαž€αžΆαžšαž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αŸ” αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžšαž»αž‰αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αŸ†αž αž»αžŸαž‘αŸ…αžαžΆαžŸ αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ Envoy αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž•αŸ’αž’αŸ‚αž€αž›αžΎαž–αž–αž€αŸ” αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αŸαž‰αž‘αŸ… stdout ΠΈ stderr.

αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ† αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž…αžΌαž›αž”αŸ’αžšαžΎαž‚αžΊαžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž αž“αž·αž„αž”αž·αž‘αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎ HTTP αžŸαžΌαž˜αž”αžΎαž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ access_log αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ HTTP αŸ” αž•αŸ’αž›αžΌαžœαž’αžΆαž…αž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαžΌαž…αž‡αžΆ stdoutαž¬αž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αž”αŸ’αžαžΌαžšαž‘αž·αžŸαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž…αžΌαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ… stdout (αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ - stdout αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαŸαžŸαž·αžαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ 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)%"}

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸαžŸαž€αž‡αž“ αžŸαžΌαž˜αž…αžΌαž›αž˜αžΎαž›

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

αž€αžΆαžšαž€αžΆαž”αŸ‹αžˆαžΎαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Envoy Proxy αž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆβ€‹αž˜αžΆαž“β€‹αžŸαž˜αžαŸ’αžαž—αžΆαž–β€‹αžαžΆαž˜β€‹αžŠαžΆαž“β€‹αž€αž˜αŸ’αžšαž·αžβ€‹αžαŸ’αž–αžŸαŸ‹ αž“αž·αž„β€‹αž˜αŸ‰αŸ‚αžαŸ’αžšβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αžœαžΆαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ… αž―αž€αžŸαžΆαžšαžαžΆαž˜αžŠαžΆαž“ αž¬αžαžΆαž˜αžšαž™αŸˆ αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžαžΆαž˜αžŠαžΆαž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜.

αž‡αŸ†αž αžΆαž“αž‘αžΈ 7 - αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž–αžΈ NGINX αž‘αŸ… Envoy ProxyαŸ” αž‡αŸ†αž αžΆαž“αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαžαŸ’αžšαžΌαžœαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Envoy Proxy instance αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹

αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎαž“αŸƒαž”αž“αŸ’αž‘αžΆαžαŸ‹αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ NGINX αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ www www; αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš NGINX αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž‘αžΆαž” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αŸ”

αž”αŸ’αžšαŸαžŸαž·αžαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž™αž€αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž•αŸ’αž’αŸ‚αž€αž›αžΎαž–αž–αž€αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž’αŸ’αž“αž€αžŠαŸ‚αž›αž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Envoy Proxy αžαžΆαž˜αžšαž™αŸˆαž€αž»αž„αžαžΊαž“αŸαžš αž™αžΎαž„αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž‘αžΆαž”αŸ”

αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž”αŸαžŸαž€αž‡αž“

αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Envoy Proxy αžαžΆαž˜αžšαž™αŸˆ Docker container αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ Envoy αž“αžΌαžœαžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαž…αžΌαž›αž“αŸ…αž›αžΎαž…αŸ’αžšαž€ 80αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αŸ’αž“αž€αžŸαŸ’αžαžΆαž”αŸ‹ αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ Envoy αžŸαŸ’αžαžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αžšαžΆαž…αžšαž…αžΌαž›αž“αŸ…αž›αžΎαž…αŸ’αžšαž€ 8080 αŸ” αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž“αžΆαž˜αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž‘αžΆαž”αŸ”

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

αžŸαžΆαž€αž›αŸ’αž”αž„

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ αž₯αž‘αžΌαžœαž“αŸαŸ‡αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ cURL αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž…αŸαž‰αžŸαŸ†αžŽαžΎαž‡αžΆαž˜αž½αž™αž”αž‹αž˜αž€αžαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαŸ”

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

αžŸαŸ†αžŽαžΎ HTTP αž“αžΉαž„αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸ 503. αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αžŠαŸ„αž™β€‹αžŸαžΆαžšβ€‹αžαŸ‚β€‹αž€αžΆαžšβ€‹αžαž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž…αžšαž“αŸ’αžβ€‹αž˜αž·αž“β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž“αž·αž„β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž”αŸ’αžšαžΎβ€‹αž”αžΆαž“β€‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαŸαžŸαž·αžαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž˜αž·αž“αž˜αžΆαž“αž‘αž·αžŸαžŠαŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαž“αŸ„αŸ‡αž‘αŸαŸ” αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸŠαŸαžšαžΈαž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ HTTP αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Envoy αŸ”

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

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž˜αžΆαž“ αž”αŸ’αžšαŸαžŸαž·αžαž’αžΆαž…αž’αŸ’αžœαžΎαž…αžšαžΆαž…αžšαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸ„αž›αžŠαŸ…αžšαž”αžŸαŸ‹αžœαžΆαŸ”

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

αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αžƒαžΎαž‰αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆ Docker container αž˜αž½αž™αžŽαžΆαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαžΎαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ Envoy αž’αŸ’αž“αž€αž€αŸαž‚αž½αžšαžƒαžΎαž‰αž›αž‘αŸ’αž’αž•αž›αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž…αžΌαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αž„αžŠαŸ‚αžšαŸ”

αž”αž‹αž˜αž€αžαžΆαž†αŸ’αž›αžΎαž™αžαž” 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

αž”αŸ’αžšαŸαžŸαž·αžαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž”αž˜αŸ’αžšαžΎαž˜αžΆαžαž·αž€αžΆαž‹αž·αžαž·αžœαž“αŸ’αžαž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžαžΎαž’αŸ’αž“αž€αžŽαžΆαž’αžΆαž…αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αžαž±αŸ’αž™αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αŸ– https://github.com/envoyproxy/envoy/issues/378

αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αž‘αž„αŸ‹αž˜αžαž·αž“αŸαŸ‡αŸ” αž…αžΌαž›αžŸαžΌαž˜αŸ”

αžαžΎαž”αŸ’αžšαž€αžΆαžŸαž“αŸαŸ‡αž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαž’αŸ’αž“αž€αž±αŸ’αž™αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αžŸαžΆαž€αž›αŸ’αž”αž„αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž”αŸαžŸαž€αž‡αž“αž‘αŸ?

  • αž”αžΆαž‘

  • αž‚αŸ’αž˜αžΆαž“

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 75 αž“αžΆαž€αŸ‹αž”αžΆαž“αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αžαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ ៑ៀ αž“αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹