ααααΆαααα! αααααΊααΆα’αααααααααΈαα½ααααααααΎααααα½αα "ααΎα’αααΈααΆαααααα?", "α ααα»α’αααΈααΆαααΆααΆααααΌαααΆα?" αα·α "αααααααααααααΌαα αΆααααααΎα?" α
αααααΆα’αααΈ
Envoy ααΊααΆα§ααααααα»αααααΆα L4-L7 αααααααΌαααΆαααααααα αααα»α C++ ααααααααααΎααααΎαααΆαααααα αα·αααΆαα’αΆα ααααΆαα αα ααΎαααα½α, αααααΊαα αααα»ααα·ααΈαα½αα ααα½α analogue αα nginx αα·α haproxy, αααααααααα αααα»αααΆαα’αα»αααααα αα½αααα αααααΆααα·αααα ααΆααααΌαααΆααααααααα·αααααααα ααααααΆααααααααααααΆαααΌα αα·αααΆααα»αααΆααα·αα’αΆαααααααΆα java αα·α go balancers ααΌα ααΆ zuul α¬ traefik αααααα
ααΆααΆααααααααααα haproxy/nginx/envoy ααΆαα·αα’αα’αΆαααΆααΆααΆααα·αααΆαααααα»αααααα ααα»αααααααααααΌαααΆαααΌαα α
nginx
α αΆααααΌααααΈ
αααααΆαααααΎ
ααααα ααα·α
ααααΆααα
ααΎ github
11.2k/αααα
αα
1.1k/αααα
αα
12.4k
27.6k
ααΆαααααααα
αααα»α
C
C
C ++
go
ααΆα API
ααααΆα
αααα / αα»αααααα»ααααα
ααααα αααα·αααααα/ααΆα
ααΆα
ααΆααα·αα·ααααα»αααΆαααααα
ααααΆα
ααΆα
ααΆα
ααΆα
ααΎαααΆαααΆαααΆα
αααααα·ααΈαααα½αααΆααααα
ααααΆα
ααΆα
ααΆα
J.W.T.
αααααα·ααΈαααα½αααΆααααα
ααααΆα
ααΆα
ααααΆα
ααααααααααα
ααΌ/αααΈ
ααΌ/αααΈ
Lua/C++
ααααΆα
α ααα»α’αααΈα
αααβααΆβααααααβαααβααααα ααΆαβα’αααΈβααΆβα
αααΎαβααΆααβααα ααααβααΆβα’αΆααα αααΆβααααΌαα ααα»αααα αααααΆαααααΎααααααααααΆααααα»ααααααααααΆαααα»αα’αα·αααααααΆαααΆαααα αα αα·αααΆααααααααα·ααααα½αα±ααα
αΆααα’αΆααααααααΆα
αααΎααα½α
αα
α αΎαα ααΆαααααααα
ααΆααααααααααΆααααα ααααααααααααααα½α
ααΆααααα
ααΆα
αααΎα α
ααα»α
αααααΆααααΆαααααααααΆααααααααααααααααΆαααααα½αααααα’αααα
ααααααααααααα·ααΈααααΎααΆαααΈααα ααα»ααααααααΌαααΆα 2 antipatterns:
- ααΆαααααα·ααααα
ααΆααα·αααΊααΆαα
αααααααα
αααα»α αααααΆαααααΎ αα·αααΆαααΆαααΆααααααααΆαααααααΆααααα αα»αα Google αααα»αααααΆααΆααααα
αααααΆαααααααα ααΌαααααΎ nginx αααααΆαααα·αα·ααααα
- ααΆαααααααα ααΆαααααααααα·αα·ααααα
α’αααα’αΆα ααααΎααΆααΆα ααα»αααα αααααΆαααααΎ ααααα·ααααααΆα’αααΈαααααΆααααΌαααΆααααααΎαα‘αΎααααααΆαααααααα αααααααα·ααααα αααα»αααΆαααααααα ααΆαααααααααα·αα·ααααααΉααα·αααααΌαααΆαααΆααααααΆαααα ααΆαααααΆααΆα αααΎαα
αα
αααααααααα½αααΆαααααααα
ααΆαααααααααα
αααα»α yaml α’αααααΉααααα
ααα‘α ααααΈααααααα’αααα’αα·αααααααααααΆαααααααΈ α αΎααα·αααΆααΆαααααααα
ααΆαααααααα nginx/haproxy αααααΈααΆααΆααα
ααΆαααααααααα·α
ααΆαααααα ααα»ααααααΆαααΆαααααααααΆαα α
ααα»α
βα αααΉαβα αΎαα ααΆαααααααα
ααΆαααααααα Nginx αα·α Haproxy ααααΌαααΆααααααΎαα‘αΎααααααΆααααααααα½αααααα αα·α αααααΆαααααΎ αααααΆααααααΆααααΈααΌαα ααΆαααααααα
ααΆααααααααααΆααααΌαααααΌαααΆααα·αααααΆαα
αααα»α
ααααΆααΈαααΌααααΆαααΆαααααααΆα Canary, b/g αα·αα αααΎααααααΆααααααΆααααΌαααΆαα’αα»αααααααα αααα»αααΆαααααααα ααΆααααααααααΆαααααααα»αααααα αααα»αβαα·αβαα·ααΆαβααΆβαααβαα·αβα’αΆα βααααΎβαα βααΆαβαα·αα·ααααβαα ααΎαβααΆααβα’ααβααααΆβααααΎβααΆβααΆαα ααα»αααααααααΆααααΆααααα’αααααααΌαααΆαααα ααΎααΎα αααα, αα αααα»αααΆαα½ααααα»αααααΆα, αα αααα»α αααααΆαααααΎ αα½αααΆααα
αα·α αα ααΆαααααααααααα·αα’αΆα ααααααΆαα
- αα»αααααΆαα ααΆα ααααα αααα»ααααααααααααα»αααααΆα αα·αααΆαααααα αααααΆαααααα αΌαααΆααααααΆααααΆαα ααα»ααααααΆαα·αα αΆαααΆα ααααα½αααα
- αααααΌαααΆααααααΆαααα»αααΆαααΆαααΆααααααΆαα ααα αΆα ααΆαα’αα»ααααΆααααααα»αααααΆα α¬αα»αααΆααααααααααααααΆααα αααα»α αααααΆαααααΎ α ααααΈαααα’αα α¬ααααΌαααΆαα’αα»αααααααΆαααΆααααα½α ααα»αααααα αααα»α nginx/haproxy α’αααααααΌαα αα»ααααααααα lua αα·ααααααα·ααΈαααα½ααα½αα±ααααααααα
ααΆααααΈα, ααΎα αΆαααΆα α, αααααααΌαααΆαα’αα»αααααααααα
ααΎααΆαααΆαααα
ααααααααααΌαααΆαα ααα αΆαααΆαααααααααααααΈαααΆααΌαααΆα 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 ingress αα ααΎ nginx α
- ααΆααααα½ααα·αα·ααααα»αααΆααααααα
ααααα·αααΎααΎαααΆαααΆααααα½ααα·αα·ααααα»αααΆαααααα ααΎαααααΌααα·αα·αααααΆααΈααααααα»αααΆαααααααα ααΆααααααααααααΈ αα»αααααααααΌαα ααΆα αααα ααααα·αααΎααΆαα ααααααΉαα αααΎα αααααααΌαααΆααααααααΆα αα½ααααΈ haproxy α
ααΎαααααααΌαααΆααααααααΆααααααααααΆ αααααΆαααααΎααααααα»αααΆαααααααα ααΆααααααααααΆααααα ααααα ααΆαααααΌα’αΆα α’αααα’αΆα αααα ααααΆαα ααΆαααααααΆα ααααα‘αα α αΎααα·αα αΆααααααΎαα‘αΎααα·αααΌααααααααααα·αααΆαααααΆααααααΌααααααα α§ααΆα ααα α’αααααααΆαααααααΆαααααααααααααα»αααΆαα αΆααααααΎαα‘αΎααα·α α αΎαααααααΉαααααΆααααααΌαα
ααΆααααααβαα ααΆαααααααα αααααΆαααααΎ (ααΈα―αααΆαααΆαααΎ) ααΆαα’αααααΆαααΌα ααΆααααααα
- α’αααααααΆαα - α’αααααααΆαααααα½ααα ααΎ ip/port ααΆααααΆαααα½αα
- αααΆαααΈααα·αααα·α - αααΆαααΈααα·αααα·αααααααααααα
- ααααΌα - α αααΆαααα»αααααΆα
- α ααααα - αααα»αααα ααααααΉααααααΆααααΆαααΆαααααααα»αααααΆα
- α α»α - α’αΆααααααΆαα§ααΆα αααααΆαααΎ
α’αααααΆαααΆαααααααΈαα½αα ααΌαααΉαααΆαα»αα½αα ααα½αααααααααα’αΆα ααααΌαααΆαααααααααααΆααααα αααααΆααααΆαααα ααΆαααααααα ααΆαααααααααααααΆααα’αΆααααααΆαααααααΆααααααΈαααααααααααΆααααααααΉαααααΌαααΆαααα½αα ααααΆααααα’αΆα ααΆ REST α¬ gRPC, gRPC ααΊααα’ααΆαα
ααααΆααααααααΌαααΆαααΆααααααααααααααα½αα LDS, VHDS, RDS, CDS αα·α EDS α α’αααα’αΆα αα½ααααα αΌαααααΆααΌαααΆαααααααα ααΆαααααααααα·αα·αααα αα·αααΆααααα αααααΆααααααααααααααααΆαααΆααααααα·αα’αΆα αααααΆαααα αααα»ααα·αα·αααααα½αα
αααααΆαααα·α
αα
ααΆαααΆαα
αααΎα ααΆαααααααααΆαααααα»αααΆαα’αα»ααααααααΆααααααΈα
α»ααααααααα α
ααΆ ADS (Aggregated Discovery Service) αααααΆαα
ααΆαααααααα ααΆααααααααααΆαααααααααΌα ααΆααααααα
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 α αααααααααααΎαααΆαα’ααααααααααΎαα‘αΎαααααΌαααΆααα·αααααΆ
αα·ααΆαα±ααααααΈ αααααΆαααααΎ ααααΎααααΎααααααα αΆαααΈααααααααααααΆααααααααΌαααΆαααααΎαα»α αααα αα·ααααΆαααΆααααααααααααΆααα ααΆααΆαααααΎααα ααΆααα½αααΆαααααΆα αα·ααααα ααααα·αααΎαααααα
ααΎααααα αααααααΆαα·αααΆαααααΆααααααΌα ααΆαα·αααααΎαααααα
ααΆααααααΎαα’ααααααααα
ααα½α α€α
- ααααααΈα 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