ืืขืื, ืืืืจ! ืืื ืืจืขื ืืขื ืฆื ืืืื ืืคืืขืจืงืืึทืืงืืึทื ืึท ืืืืขืจืืขืฆืื ื ืคืื ืืขื ืคึผืึธืกืื:
Envoy ืืื ืึท ืืืื-ืคืึธืจืฉืืขืืื ื ืคืื ืื ืืขืจืืขืืืืื ืคึผืจืึทืงืกื ืกืขืจืืืขืจ (ืืขืฉืจืืื ืืื C ++) ืืืืืื ื ืคึฟืึทืจ ืืืื ืืึทืืื ืื ืืก ืืื ืึทืคึผืืึทืงืืืฉืึทื ื, ืขืก ืืื ืืืื ืึท ืงืึธืืื ืืงืึทืฆืืข ืืืืึธืืืก ืืื "ืื ืืืืขืจืกืึทื ืืึทืื ืคืืึทื" ืืืืืื ื ืคึฟืึทืจ ืืจืืืก ืืืงืจืึธืกืขืจืืืืก "ืืื ืกื ืืขืฉ" ืึทืจืงืึทืืขืงืืฉืขืจื. ืืืขื ืืืจ ืฉืึทืคึฟื ืขืก, ืกืึทืืืฉืึทื ื ืฆื ืคึผืจืึธืืืขืืก ืืืึธืก ืืขื ืขื ืืืืคืืขืฉืืื ืขื ืืขืฉืึทืก ืืขืจ ืึทื ืืืืืงืืื ื ืคืื ืกืขืจืืืขืจืก ืึทืืึท ืืื NGINX, HAProxy, ืืึทืื ืืืึทืจื ืืึทืกืข ืืึทืืึทื ืกืขืจื ืืื ืืืึธืืงื ืืึทืกืข ืืึทืืึทื ืกืขืจื ืืขื ืขื ืืขื ืืืขื ืืื ืืฉืืื. ืขื ืืืื ืึทืจืืขื ืฆืืืืืขื ืืื ืืขืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึทืืกืืจืึทืงืฅ ืื ื ืขืฅ ืฆื ืฆืืฉืืขืื ืคึผืจืึธืกื ืคืึทื ืืงืฉืึทื ืึทืืืื ืจืึทืืึทืจืืืึทืก ืคืื ืคึผืืึทืืคืึธืจืืข. ืืืขื ืึทืืข ืกืขืจืืืืก ืคืึทืจืงืขืจ ืืื ืึทื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืคืืึธืื ืืืจื ืื Envoy ืืขืฉ, ืขืก ืืื ืืจืื ื ืฆื ืืืืืฉืืืึทืืืื ืคึผืจืึธืืืขื ืืขืืืื ืืื ืงืึธื ืกืืกืืขื ื ืึธืืกืขืจืืืึทืืืืืื, ื ืืื ืงืืืืขืืืืง ืคืึธืจืฉืืขืืื ื ืืื ืืืืื ืืึทืจืฅ ืคืึทื ืืงืฉืึทื ืึทืืืื ืืื ืึท ืกืคึผืขืฆืืคืืฉ ืึธืจื.
ืงืืืคึผืึทืืืืึทืืื
- ืึทืจืืืก-ืคืื-ืคึผืจืึธืกืขืก ืึทืจืงืึทืืขืงืืฉืขืจ: ืึทื ืืืื ืืื ืึท ืืขืืืกื-ืงืึทื ืืืื ื, ืืืื-ืคืึธืจืฉืืขืืื ื ืกืขืจืืืขืจ ืืืึธืก ื ืขืื ืึท ืงืืืื ืกืืืข ืคืื โโืืึทืจืึทื. ืขืก ืึทืจืืขื ืืื ืงืึทื ืืืฉืึทื ืืงืฉืึทื ืืื ืงืืื ืึทืคึผืืึทืงืืืฉืึทื ืฉืคึผืจืึทื ืึธืืขืจ ืคืจืืืืืืขืจืง.
- http/2 ืืื grpc ืฉืืืฆื: ืึทื ืืืื ืืื ืขืจืฉืืขืจ-ืงืืึทืก http/2 ืืื grpc ืฉืืืฆื ืคึฟืึทืจ ืื ืงืึทืืื ื ืืื ืึทืืืืึธืืื ื ืงืึทื ืขืงืฉืึทื ื. ืืึธืก ืืื ืึท ืืจืึทื ืกืคึผืขืจืึทื ื ืคึผืจืึทืงืกื ืคืื http/1.1 ืฆื http/2.
- ืึทืืืึทื ืกืืจืืข ืืึธืื ืืึทืืึทื ืกืื ื: ืื ืึทื ืืืื ืฉืืืฆื ืึทืืืึทื ืกืืจืืข ืืึธืื ืืึทืืึทื ืกืื ื ืคึฟืขืึดืงืืืื ืึทืจืืึทื ืืขืจืขืื ื ืึธืืึทืืึทืืืง ืจืืืจืืขืก, ืงืืื ืืจืืืงืื ื, ืืืืึทืืื ื ืคืื ืืืืืืืข ืงืืจืก, ืฉืึทืืึธืืื ื ืืขืื, ืืึธืื ืืึทืืึทื ืกืื ื ืคืื ืืืืข ืืึธื ืข, ืขืืง.
- ืงืึธื ืคืืืืจืึทืืืึธื ืืึทื ืึทืืขืืขื ื ืึทืคึผื: ืึทื ืืืื ืืื ืึท ืฉืืึทืจืง ืึทืคึผื ืคึฟืึทืจ ืืื ืึทืืืฉ ืึธื ืคืืจืื ื ืคืื ืืืื ืงืึทื ืคืืืืขืจืืืฉืึทื.
- ืึธืืกืขืจืืืึทืืืืืื: ืืืฃ ืึทืืืขืจืืืึทืืืืืื ืคืื ื 7 ืคืึทืจืงืขืจ, ืืขืืืืจื ืฉืืืฆื ืคึฟืึทืจ ืคืื ืื ืืขืจืืขืืืืื ืืจืืืกืื ื ืืื ืึธืืกืขืจืืืึทืืืืืื ืคืื ืืึธื ืืึธืื, ืืื ืึทืืึธืื ืืื ืคืืืข ืื ืืขืจืข ืึทืคึผืืึทืงืืืฉืึทื ื.
ืฉืจืื 1 - ืืืึทืฉืคึผืื NGINX Config
ืืขื ืฉืจืืคื ื ืืฆื ืึท ืกืคึผืขืฉืื ืงืจืึทืคืืขื ืืขืงืข 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 ืงืึทื ืคืืืืขืจืืืฉืึทื ื ืืืคึผืืงืื ืืึธืื ืืจืื ืฉืืืกื ืขืืขืืขื ืื:
- ืงืึทื ืคืืืืขืจ NGINX ืกืขืจืืืขืจ, ืงืืึธืฅ ืกืืจืืงืืืจ ืืื Gzip ืคืึทื ืืงืฉืึทื ืึทืืืื. ืืึธืก ืืื ืืืคืืื ื ืืืึธืืืึทืื ืืื ืึทืืข ืงืึทืกืขืก.
- ืงืึทื ืคืืืืขืจ NGINX ืฆื ืึธื ื ืขืืขื ืจืืงืืืขืก ืฆื ืืขืจ ืืึทืืขืืึธืก one.example.com ืืืืฃ ืคึผืึธืจื 8080.
- ืืึทืฉืืขืืืงื ืื ืฆืื ืึธืจื, ืืื ืฆื ืฉืขืคึผื ืคืึทืจืงืขืจ ืคึฟืึทืจ ืคืึทืจืฉืืืขื ืข ืคึผืึทืจืฅ ืคืื ืื URL.
ื ืื ืึทืืข ืงืึทื ืคืืืืขืจืืืฉืึทื ืืืขื ืึทืคึผืืืื ืฆื ืขื ืืื ืคึผืจืึธืงืกื, ืืื ืืืจ ืืึธื ื ืื ืืึทืจืคึฟื ืฆื ืงืึทื ืคืืืืขืจ ืขืืืขืืข ืกืขืืืื ืืก. ืึทื ืืืื ืคึผืจืึทืงืกื ืืื ืคืืจ ืฉืืืกื ืืืืคึผืก, ืืืึธืก ืฉืืืฆื ืื ืืึทืจืฅ ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืขืคึฟืื ื ืืืจื NGINX. ืืขืจ ืืกืื ืืื:
- ืฆืืืขืจืขืจืก: ืืื ืืึทืฉืืืกื ืืื ืขื ืืื ืคึผืจืึธืงืกื ืึทืงืกืขืคึผืฅ ืื ืงืึทืืื ื ืจืืงืืืขืก. ืึทื ืืืื ืคึผืจืึธืงืกื ืืขืจืืืืึทื ืฉืืืฆื ืืืืื TCP-ืืืืืจื ืฆืืืขืจืขืจืก. ืึทืืึธื ืึท ืงืฉืจ ืืื ืืขืืจืื ืืขื, ืขืก ืืื ืืืจืืืขืืื ืืขื ืฆื ืึท ืืึทื ื ืคืื ืคืืืืขืจืก ืคึฟืึทืจ ืคึผืจืึทืกืขืกืื ื.
- ืคืืืืขืจืก: ืืื ืืขื ืขื ืืืื ืคืื ืึท ืจืขืจื - ืืื ืืข ืึทืจืงืึทืืขืงืืฉืขืจ ืืืึธืก ืงืขื ืขื ืคึผืจืึธืฆืขืก ืื ืงืึทืืื ื ืืื ืึทืืืืึธืืื ื ืืึทืื. ืื ืคืึทื ืืงืฉืึทื ืึทืืืื ืืืื ืคืืืืขืจืก ืึทืืึท ืืื Gzip, ืืืึธืก ืงืึทืืคึผืจืขืกืื ืื ืืึทืื ืืืืืขืจ ืืื ืฉืืงื ืขืก ืฆื ืืขื ืงืืืขื ื.
- ืจืึธืืืขืจืก: ืืื ืคืึธืจืืืก ืคืึทืจืงืขืจ ืฆื ืื ืคืืจืืื ืื ืืขืกืืื ืืืฉืึทื, ืืืคืืื ื ืืื ืึท ืงื ืืื.
- ืงืืึทืกืืขืจื: ืืื ืืขืคืื ืืจื ืื ืขื ืืคึผืืื ื ืคึฟืึทืจ ืคืึทืจืงืขืจ ืืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืคึผืึทืจืึทืืขืืขืจืก.
ืืืจ ืืืขืื ื ืืฆื ืื ืคืืจ ืงืึทืืคึผืึธืื ืึทื ืฅ ืฆื ืฉืึทืคึฟื ืึทื Envoy Proxy ืงืึทื ืคืืืืขืจืืืฉืึทื ืฆื ืืืืึทืื ืึท ืกืคึผืขืฆืืคืืฉ NGINX ืงืึทื ืคืืืืขืจืืืฉืึทื. ืืขืจ ืฆืื ืคืื Envoy ืืื ืฆื ืึทืจืืขืื ืืื ืึทืคึผืืก ืืื ืืื ืึทืืืฉ ืงืึทื ืคืืืืขืจืืืฉืึทื. ืืื ืืขื ืคืึทื, ืื ืืึทืืข ืงืึทื ืคืืืืขืจืืืฉืึทื ืืืขื ื ืืฆื ืกืืึทืืืง, ืฉืืืขืจ-ืงืึธืืขื ืกืขืืืื ืืก ืคึฟืื NGINX.
ืฉืจืื 2 - NGINX ืงืึทื ืคืืืืขืจืืืฉืึทื
ืืขืจ ืขืจืฉืืขืจ ืืืื nginx.conf ืืืคืืื ื ืขืืืขืืข NGINX ืื ืืขืจื ืึทืืก ืืืึธืก ืืึทืจืคึฟื ืฆื ืืืื ืงืึทื ืคืืืืขืจื.
ืึทืจืืขืืขืจ ืงืึทื ืขืงืฉืึทื ื
ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืื ืื ืืืืขืจืืึทื ื ืื ื ืืืขืจ ืคืื ืึทืจืืขื ืคึผืจืึทืกืขืกืึทื ืืื ืงืึทื ืขืงืฉืึทื ื. ืืึธืก ืื ืืืงืืืฅ ืืื NGINX ืืืขื ืืืึธื ืฆื ืืจืขืคื ืคืึธืืขืจืื ื.
worker_processes 2;
events {
worker_connections 2000;
}
Envoy Proxy ืืึทื ืืืืฉืื ืืืึธืจืงืคืืึธืื ืืื ืงืึทื ืขืงืฉืึทื ื ืืื ืคืึทืจืฉืืืขื ืข ืืืขืื.
ืึทื ืืืื ืงืจืืืืฅ ืึท ืึทืจืืขืืขืจ ืคืึธืืขื ืคึฟืึทืจ ืืขืืขืจ ืืึทืื ืืืึทืจื ืคืึธืืขื ืืืืฃ ืื ืกืืกืืขื. ืืขืืขืจ ืึทืจืืขืืขืจ ืคืึธืืขื ืขืงืกืึทืงืืืฅ ืึท ื ืื-ืืืึทืงืื ื ืืขืฉืขืขื ืืฉ ืฉืืืืฃ ืืืึธืก ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ
- ืฆืืืขืืขืจื ืฆื ืืขืืขืจ ืฆืืืขืจืขืจ
- ืึทืงืกืขืคึผืืื ื ื ืืึทืข ืงืึทื ืขืงืฉืึทื ื
- ืฉืึทืคึฟื ืึท ืืึทื ื ืคืื ืคืืืืขืจืก ืคึฟืึทืจ ืึท ืงืฉืจ
- ืคึผืจืึธืฆืขืก ืึทืืข ื / ืึธ ืึทืคึผืขืจืืืฉืึทื ื ืืขืฉืึทืก ืื ืืขืื ืคืื ืื ืงืฉืจ.
ืึทืืข ืืืืึทืืขืจ ืงืฉืจ ืคึผืจืึทืกืขืกืื ื ืืื ืืึทื ืืึทืื ืืื ืื ืึทืจืืขืืขืจ ืคืึธืืขื, ืึทืจืืึทื ืืขืจืขืื ื ืงืืื ืคืึธืจืืืขืจืืื ื ื ืึทืืืจ.
ืคึฟืึทืจ ืืขืืขืจ ืึทืจืืขืืขืจ ืคืึธืืขื ืืื ืขื ืืืื, ืขืก ืืื ืึท ืงืฉืจ ืืขืงื. ืึทืืื ืืืืคึผ / 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)%"}
ืคึฟืึทืจ ืืขืจ ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืขื ืืื ืจืขืืืกืืจืึทืืืึธื ืืขืืึทืืึทืืึทืืืฉื, ืืึทืืืื
ืืึธืืื ื ืืื ื ืืฉื ืืขืจ ืืืืื ืืืขื ืฆื ืืึทืงืืืขื ืื ืกืืื ืืื ืืจืืขืื ืืื 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 ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืืืฃ ืืขื ืืืขืืืืืื
ืืืจื ืคืขืืืงืืึทื, ืจืคึผื ืืื ื ืืฉื ืืึธืื ืึท ืกืืกืืขื ืกืขืจืืืืก ืงืึทื ืคืืืืขืจืืืฉืึทื.
ืืืื ืกืืกืืขื ืกืขืจืืืืก ืงืึธื ืคืื /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 ืืึธืจื.
ืขืก ืืื ืึท ืืขืืขืืจืึทื ืฉืืืขืกื ื ืืฆื ืึทื ืืืื ืคึผืจืึทืงืกื:
Envoy Proxy ืฉืืืฆื ื ืืฉื ืกืขืจืืืื ื ืกืืึทืืืง ืืื ืืึทืื. ืืขืจืืืขืจ, ืืืขืจ ืงืขื ืขื ืฉืืืืขื ืคึฟืึทืจ ืื ืฉืืจืื:
ืืืืื ืจืขืืืกืืจืืจื ื ืืฆืขืจืก ืงืขื ืขื ืึธื ืืืื ื ืขืืขื ืืื ืื ืืืขืจืืืืง.
ืฆื ืืึธื ืืขื ืคึผืึธืกืื ืืืืืงื ืืืจ ืฆื ืื ืกืืึทืืืจื ืืื ืคึผืจืืืืจื ืึทืืืื ืคึผืจืึทืงืกื?
-
ืืึธ
-
ืงืืื
75 ืืื ืืฆืขืจ ืืืื ืืขืฉืืืื. 18 ืืื ืืฆืขืจ ืืืื ืืื ืืคืืขืืืืื.
ืืงืืจ: www.habr.com