ืืจืืืช! ืืื ืืืืจ ืงืฆืจ ืฉืขืื ื ืขื ืืฉืืืืช: "ืืื ืฉืืื?", "ืืื ืื ื ืืืฅ?" ื"ืืืืคื ืืืชืืื?".
ืื ืื
Envoy ืืื ืืืื L4-L7 ืฉื ืืชื ื-C++, ืืืชืืงื ืืืืฆืืขืื ืืืืืื ืืืืื ืืช. ืืฆื ืืื, ืื ืืืจื ืืืฉืื ืื ืืืื ืฉื nginx ืืืคืจืืงืกื, ืืืืื ืืืืฆืืขืื ืืืืื. ืืฆื ืฉื ื, ืืื ืืืืื ืืืชืจ ืืืจืืืืงืืืจืช ืืืงืจื-ืฉืืจืืชืื ืืืฉ ืื ืคืื ืงืฆืืื ืืืืช ืื ืืจืืขื ืืืชืจ ืืืืื ื java ื-go, ืืืื zuul ืื traefik.
ืืืืช ืืฉืืืื ืฉื ืืืคืจืืงืกื/nginx/ืฉืืื, ืืื ืื ืืชืืืืจืช ืืืืืช ืืืืช ืืืืืืืช, ืืื ื ืืชื ืช ืชืืื ื ืืืืืช.
nginx
ืืคืจืืงืกื
ืฉืื
ืืจืืคืืง
ืืืืืื ื-github
11.2k/ืืจืื
1.1k/ืืจืื
12.4k
27.6k
ืืชืื ื
C
C
C + +
go
API
ืื
ืฉืงืข ืืืื/ืืืืคื
ืืืืก ื ืชืื ืื/ืืฉืืื
ืืืฉืื
ืืืืงืช ืืจืืืืช ืคืขืืื
ืื
ืื
ืื
ืื
ืคืชื ืืขืงื
ืชืืกืฃ ืืืฆืื ื
ืื
ืื
ืื
Jwt
ืชืืกืฃ ืืืฆืื ื
ืื
ืื
ืื
ืืืจืื
Lua/C
Lua/C
Lua/C++
ืื
ืืฉืืื ืื
ืื ืคืจืืืงื ืฆืขืืจ, ืืกืจืื ืืจืื ืืืจืื, ืืืงื ืืืืคื ืืืืงืืืช. ืืื ืฉืื, ืื ืืฉื ืฆืขืืจืืชื, ืืชืคืชืืช ืืืืืจืืช ืืืืจ ืืฉ ืื ืืจืื ืชืืื ืืช ืืขื ืืื ืืช: ืชืฆืืจื ืืื ืืืช, ืืกื ื ืื ืจืืื ืืืื ืื, ืืืฉืง ืคืฉืื ืืืชืืืช ืืกื ื ืื ืืฉืื.
ืืืื ื ืืืขืื ืชืืืื ืืืฉืื, ืื ืจืืฉืืช ืืฉ 2 ืื ืื ืืคืืกืื:
- ืจืชืืขื ืกืืืืช.
ืืขืืืื ืืื ืฉืืจืืข ื ืฉืื ืืื ืชืืืื ืืืืืื. ืืืืจ'ื ืฉื ืืืื ืื ืกืื ืืช ืื
ืืขืช ืขืชื, ืืฉืชืืฉ ื-nginx ืขืืืจ ืกืืืืงื.
- ืชืฆืืจื ืกืืืืช.
ืืชื ืืืื ืืืฉืชืืฉ ืืื, ืืื ืฉืื ืื ืืฉืืื ืื ืืื ื ืืฆืจ. ืชืืื ืืช ืืชืฆืืจื ืกืืืืช ืื ืืืืฉืคื. ืืฉ ืืจืื ืจืืขืื:
ืืขืช ืขืจืืืช ืืชืฆืืจื ื-yaml, ืืชื ืชืืขื, ืชื ืืืฃ ืืืคืชืืื ืขื ืืืืืืืืช ืืชืืฉืื ืฉืชืฆืืจืืช nginx/haproxy, ืืืจืืช ืฉืื ืคืืืช ืืืื ืืช, ืื ืชืืฆืืชืืืช ืืืชืจ. ืื ืื ืงืืื. ืืชืฆืืจื ืฉื Nginx ื-Haproxy ื ืืฆืจื ืืขืจืืื ืืื, ื ืฉืื ืืืคืงื ืืงืื. ืื ืืชืฆืืจื ืืชืืืจืช ื
ืชืจืืืฉื ืคืจืืกื ืฉื Canary, b/g ืืขืื ืืจืื ืืืชืจ ืืืืฉืืื ืืืจื ืืื ืจืง ืืชืฆืืจื ืืื ืืืช. ืื ื ืื ืืืืจ ืฉืื ืืคืฉืจ ืืขืฉืืช ืืช ืื ืืืืคื ืกืืื, ืืืื ื ืขืืฉืื ืืช ืื. ืืื ืืฉืืื ืื ืืชื ืฆืจืื ืืฉืื ืงืืืื, ืืื ืืื ืืืืืืื ืื, ืคื ืืื ืฉืื ืืืื
ืืฉืืืืช ืฉืืฉืืื ืืืื ื ืืื:
- ืืืืื ืชื ืืขื ืืืขืจืืืช ืืืจืืืืช ืืืื ืืืืช. ืื ืืืื ืืช ืจืฉืช ืืฉืืจืืช, ืืื ืืื ืื ืืืืจื ืืืืืื.
- ืืฆืืจื ืืคืื ืงืฆืืื ืืืืช ืืขืงื ืืืืืจืช, ืืจืฉืืืช ืืืจืืืืช ืื ืคืื ืงืฆืืื ืืืืช ืืืจืช ืืืืื ื ื ืฉืื ืืืืฅ ืืงืืคืกื ืื ืืืืฉื ืืฆืืจื ื ืืื, ืืื ื-nginx/haproxy ืืชื ืฆืจืื ืืืืืช ืืืงืฃ ื-lua ืืชืืกืคืื ืืคืืงืคืงืื.
ืฉื ืืื, ืืืืืช ืืฆืืจื, ืืกืคืงืื ืืืฆืืขืื ืืืืืื.
ืึตืื ืึทืคืขึดืืึดืื ืึถืช ืึถื
Envoy ืืืคืฅ ืืงืืฆืื ืืื ืืจืืื ืจืง ืืชืืื ืช docker. ืืชืืื ื ืืืจ ืืืืื ืืืืื ืืชืฆืืจื ืกืืืืช. ืืื ืื ืื ื ืืขืื ืืื ืื ืื ืจืง ืืฉืืื ืืืืื ืืช ืืืื ื.
ืชืฆืืจื ืกืืืืช ืฉื envoy.yaml
static_resources:
listeners:
- name: listener_0
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
host_rewrite: www.google.com
cluster: service_google
http_filters:
- name: envoy.router
clusters:
- name: service_google
connect_timeout: 0.25s
type: LOGICAL_DNS
# Comment out the following line to test on v6 networks
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_google
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: www.google.com
port_value: 443
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext
sni: www.google.com
ืชืฆืืจื ืืื ืืืช
ืืืืื ืืขืื ืื ืื ื ืืืคืฉืื ืคืชืจืื? ืืชื ืื ืืืื ืคืฉืื ืืืขืื ืืืืฉ ืืช ืชืฆืืจืช ืืืื ืืขืืืก ืชืืช ืขืืืก; ืืขืืืช "ืงืื ืืช" ืืชืขืืจืจื:
- ืืืืืช ืชืฆืืจื.
ืืชืฆืืจื ืืืืื ืืืืืช ืืืืื, ืืื ืืืืื ืืืืืช ืืืืื ืืืื, ืื ื ืขืืืก ืขื ืืื ืืืช ืืืช, ืืกืืืื ืืืขืืช ืืืคืฉืื ืืื.
- ืงืฉืจืื ืืจืืืื.
ืืขืช ืืชืืื ืืืืื ืืืฉ, ืืชื ืฆืจืื ืืืืื ืืืืืืจืื ืืคืืขืืื ืขื ืืืฉื; ืื ืืชืจืืฉืื ืฉืื ืืืื ืืขืชืื ืงืจืืืืช ืืืฉ ืืืืืจืื ืืจืืืื, ืชืฆืืจื ืืืคืฉ ืคืฉืจื. ืฉืืื, ืื ืืกืช kubernetes ื-nginx.
- ืืืืงืืช ืืจืืืืช ืืงืืืืืืช.
ืื ืืฉ ืื ื ืืืืงืืช ืชืงืื ืืช ืืงืืืืืืช, ืขืืื ื ืืืืืง ืืช ืืืื ืืชืฆืืจื ืืืืฉื ืืคื ื ืฉืืืืช ืชืขืืืจื. ืื ืืฉ ืืจืื ืืจืืื, ืื ืืืงื ืืื. ืฉืืื ืคืจืืงืกื.
ืืื ืื ื ืคืชืจ ื ืฉืืืขื ืืื ืืขืื ืช ืืชืฆืืจื ืืืืคื ืืื ืื, ืืคื ืืืื ืืืจืืื, ื ืืชื ืืืืง ืืืชื ืืืืงืื ื ืคืจืืื ืืื ืืืชืื ืืืืฉ ืืช ืืืืง ืฉืื ืืฉืชื ื. ืืืฉื, ืืืืื, ืฉืืงืจ ืืืชืื ืืืืฉ ืืืขืืชืื ืจืืืงืืช ืืฉืชื ื.
ืชึฐืฆืึผืจึธื ืฉืื (ืืืงืืืฅ ืืืขืื) ืืฉ ืืช ืืืฉืืืืช ืืืืืช:
- ืืืืื - ืืืืื ืชืืื ื-ip/ืืฆืืื ืกืคืฆืืคืืื
- ืืืจื ืืืจืืืืื - - - ืืืจื ืืืจืืืืื ืืคื ืฉื ืืืืืื
- ืึทืกืืึผื - ืืื ืืืืื
- ืืฉืืื - ืงืืืฆื ืฉื ืขืืืืช ืขื ืคืจืืืจื ืืืืื
- ื ืงืืืช ืกืืื - ืืชืืืช ืืืคืข ืืืขืื ืืืจื
ื ืืชื ืืืื ืื ืืืช ืืืืฉืืืืช ืืืื ืืขืื ืืื ืืืจืืช ืืืืคื ืืื ืื; ืืฉื ืื, ืืชืฆืืจื ืืฆืืื ืช ืืช ืืืชืืืช ืฉื ืืฉืืจืืช ืฉืืื ื ืชืชืงืื ืืชืฆืืจื. ืืฉืืจืืช ืืืื ืืืืืช REST ืื gRPC, ืขืืืฃ gRPC.
ืืฉืืจืืชืื ื ืงืจืืื ืืืชืืื: LDS, VHDS, RDS, CDS ื-EDS. ืืชื ืืืื ืืฉืื ืชืฆืืจื ืกืืืืช ืืืื ืืืช, ืขื ืืืืืื ืฉืื ื ืืชื ืืฆืืื ืืฉืื ืืื ืื ืืชืฆืืจื ืกืืืืช.
ืขืืืจ ืจืื ืืืฉืืืืช, ืืกืคืืง ืืืืฉื ืืช ืฉืืืฉืช ืืฉืืจืืชืื ืืืืจืื ืื, ืื ื ืงืจืืื ADS (ืฉืืจืืช ืืืืื ืืฆืืืจ), ืขืืืจ
ืืชืฆืืจื ืืืืฉืช ืืช ืืฆืืจื ืืืื:
ืชืฆืืจื ืืื ืืืช ืฉื envoy.yaml
dynamic_resources:
ads_config:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: xds_clr
cds_config:
ads: {}
static_resources:
listeners:
- name: listener_0
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
rds:
route_config_name: local_route
config_source:
ads: {}
http_filters:
- name: envoy.router
clusters:
- name: xds_clr
connect_timeout: 0.25s
type: LOGICAL_DNS
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: xds_clr
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: xds
port_value: 6565
ืืฉืืชื ืจืฅ ืฉืื ืขื ืืชืฆืืจื ืืื, ืืื ืืชืืืจ ืืืืฉืืจ ืืืงืจื ืืื ืกื ืืืงืฉ ืืช ืชืฆืืจืช RDS, CDS ื-EDS. ืืชืืืจ ืืืฆื ืชืืืื ืืืื ืืจืืงืฆืื ืืชืจืืฉ
ืืงืฆืจื, ืฉืื ืฉืืื ืืงืฉื ืืืฆืืื ืช ืืช ืกืื ืืืฉืื ืืืืืงืฉ, ืืืจืกื ืืืคืจืืืจืื ืฉื ืืฆืืืช. ืืชืืืื, ืืื ืืงืื ืืฉืื ืืืจืกื; ืื ืืืจืกื ืืืืฉืืจ ืืืงืจื ืื ืืฉืชื ืชื, ืืื ืื ืืืืื.
ืืฉื ื 4 ืืคืฉืจืืืืช ืืื ืืจืืงืฆืื:
- ืืจื gRPC ืืื ืขืืืจ ืื ืกืืื ืืืฉืืืื, ืืกืืืืก ืืืื ืฉื ืืืฉืื ื ืฉืื.
- ื ืืืื ื ืคืจืืื, ืืฆื ืืื.
- ืืจื ืืื, ืืฆื ืืฆืืืจ.
- ืืจืืื ื ืคืจืืื, ืืฆื ืืฆืืืจ.
xDS ืืฆืืืจ ืืืคืฉืจ ืื ืืืคืืืช ืืช ืืชืขืืืจื ืืื ืืืืก ืืืงืจื ืืืื ืฉืื, ืื ืจืืืื ืื ืขืืืจ ืชืฆืืจืืช ืืืืืืช. ืืื ืื ืืกืื ืืช ืืืื ืืจืืงืฆืื; ืืืงืฉื ืืืืื ืจืฉืืื ืฉื ืืฉืืืื ืืืืืื ืืจืฉืื ืืืจืฉืื.
ืืืืืื ืฉืื ื ืืฉืชืืฉืช ื-ADS - ืืจื ืืื ืขืืืจ RDS, CDS, EDS ืืืฆื ืื ืืฆืืืจ. ืืื ืืืคืขืื ืืฆื ืืื ืงืจืื ืืื, ืขืืื ืืฆืืื api_type: DELTA_GRPC
ืืืืืื ืฉืืืงืฉื ืืืืื ืคืจืืืจืื ืฉื ืฆืืืช, ืื ื ืืืืืื ืืฉืืื ืืฉืืืื ืฉืื ืื ืืืืฉืืจ ืืืงืจื ืขืืืจ ืืงืจืื ืฉืื ืื ืฉืื, ืื ื ืื ืืื ืืืช ืจืฉืช ืฉืืจืืช.
ืืืืื
ืขื ืฉืื ืืขืช ืืืชืืื ืื ืืขืช ืงืืืช ืชืฆืืจื ืืืฉื ืืืืืก ืืงืจื, ืชืืืื ืืืืื ืืืฉืื ืืืฆื ืืืจื. ืื ืืืืืง ืืืืืื ืืืืื ืื ืืืืืื ืืฉืืื. ืืจืืฉืื ืืืคืขื ืืืฉืจ ืืฉ ืฉืื ืืืื ื-RDS/LDS, ืืฉื ื ืืืฉืจ CDS/EDS. ืืฉืืขืืช ืืืืจ ืืื ืฉืื ืจืง ืืืขืื ืืืจืืื ืืฉืชื ืื, ืืืืืื ืื ื ืืฆืจ ืืืืฉ.
ืืืืื ืชืืืื ืืืืืื ืฆืคืืืื ืืฉืืืื ืชืืืืื ืืืืฉืืจ ืืืงืจื ืืืืื ืืืื ืืงืฆืื. ืื ืคืกืง ืืืื ืืชืจืืฉ, ืืืชืืื ืื ืืฆืืื ืืืืืืื ืืืืฉ ืื ืืชืืื ืืืืืื ืืืฆืืื.
ืกืืจ ืืชืืื: EDS, CDS, ืืืืงืช ืืจืืืืช ืคืขืืื, RDS, LDS. ืืืฉืจ ืืืืงืืช ืชืงืื ืืช ืคืขืืืืช ืืืคืขืืืช, ืืชืขืืืจื ืชืขืืืจ ืืืขืื ืืืจื ืจืง ืืืืจ ืืืืงืช ืชืงืื ืืช ืืืฆืืืช ืืืช.
ืื ืืืืืื ื ืืฆืจ ืืืืฉ, ืืืฉื ืขืืืจ ืืืฆื DRAIN ืืืืืืง ืืืืจ ืกืืืจืช ืื ืืืืืืจืื ืื ืคื ืชืืงืฃ ืืืื ืืงืฆืื --drain-time-s
, ืืจืืจืช ืืืื 10 ืืงืืช.
ืืืฉื.
ืืงืืจ: www.habr.com