Mga pangomosta! Kini usa ka mubo nga artikulo nga nagtubag sa mga pangutana: "unsa ang sinugo?", "ngano nga kinahanglan kini?" ug "asa magsugod?".
Unsa kini
Ang Envoy usa ka L4-L7 balancer nga gisulat sa C ++, nga naka-focus sa taas nga pasundayag ug pagkaanaa. Sa usa ka bahin, kini sa usa ka paagi usa ka analogue sa nginx ug haproxy, nga ikatandi sa pasundayag sa kanila. Sa laing bahin, kini mas nakapunting sa microservice nga arkitektura ug adunay pagpaandar nga dili mas grabe kay sa java ug go balancers, sama sa zuul o traefik.
Talaan sa pagtandi sa haproxy / nginx / envoy, wala kini nag-angkon nga hingpit nga kamatuoran, apan naghatag usa ka kinatibuk-ang litrato.
nginx
haproxy
nagpadala
traefik
mga bituon sa github
11.2k/salamin
1.1k/salamin
12.4k
27.6k
gisulat sa
C
C
C ++
go
API
dili
socket lang/push
dataplane/pagbira
pagbitad
aktibo nga pagsusi sa kahimsog
dili
oo
oo
oo
Bukas nga pagsubay
gawas nga plugin
dili
oo
oo
Ang JWT
gawas nga plugin
dili
oo
dili
extension
Lua/C
Lua/C
Lua/C++
dili
Alang alang
Kini usa ka batan-on nga proyekto, adunay daghang mga butang nga nawala, ang uban sa sayo nga alpha. Apan nagpadala, tungod usab sa iyang pagkabatan-on, paspas nga nag-uswag ug adunay daghang makapaikag nga mga bahin: dinamikong pag-configure, daghang andam nga mga pagsala, usa ka yano nga interface alang sa pagsulat sa imong kaugalingon nga mga pagsala.
Ang mga lugar sa aplikasyon nagsunod gikan niini, apan una adunay 2 nga mga antipattern:
- Static recoil.
Ang kamatuoran mao nga sa pagkakaron sa nagpadala walay suporta sa caching. Gisulayan kini sa mga tawo sa Google
Sa pagkakaron, gamita ang nginx para sa statics.
- Static nga configuration.
Mahimo nimo kini gamiton, apan nagpadala Dili kana kung unsa kini gilalang. Ang mga feature sa usa ka static nga configuration dili ibutyag. Adunay daghang mga higayon:
Kung gi-edit ang configuration sa yaml, masayop ka, sawayon ang mga developers alang sa verbosity ug hunahunaa nga ang nginx/haproxy configs, bisan dili kaayo structured, mas mubo. Mao na ang punto. Ang pag-configure sa Nginx ug Haproxy gihimo alang sa pag-edit pinaagi sa kamot, ug nagpadala alang sa henerasyon gikan sa code. Ang tibuok nga configuration gihulagway sa
Ang Canary, b/g deployment scenario ug daghan pa kay kasagarang gipatuman lang sa dinamikong configuration. Wala ako nag-ingon nga dili kini mahimo nga static, buhaton naton tanan. Apan alang niini kinahanglan nimo nga isul-ob ang mga saklay, sa bisan unsang mga balanse, sa nagpadala apil.
Mga buluhaton nga gikinahanglan sa Envoy:
- Pagbalanse sa trapiko sa komplikado ug dinamikong mga sistema. Naglakip kini sa mesh sa serbisyo, apan dili kinahanglan nga usa ra.
- Ang panginahanglan alang sa giapod-apod nga pagsubay sa pag-andar, komplikado nga pagtugot o uban pang gamit nga magamit sa nagpadala gikan sa kahon o sayon ββββnga gipatuman, apan sa nginx / haproxy kinahanglan nimo nga mapalibutan sa lua ug mga dubious plugins.
Ang duha, kung gikinahanglan, naghatag og taas nga performance.
Unsa nga paagi nga kini nga buhat
Ang Envoy giapod-apod sa mga binary lamang ingon usa ka imahe sa docker. Ang hulagway aduna nay usa ka pananglitan sa usa ka static nga configuration. Apan kami interesado niini alang lamang sa pagsabut sa istruktura.
envoy.yaml static nga configuration
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
Dinamikong configuration
Unsa nga problema ang atong gipangita nga solusyon? Dili lang nimo ma-reload ang configuration sa load balancer ubos sa load; mutungha ang "gamay" nga mga problema:
- Pag-validate sa pag-configure.
Ang config mahimo nga dako, kini mahimong dako kaayo, kon kita mag-overload sa tanan sa usa ka higayon, ang mga kahigayonan sa usa ka sayop sa usa ka dapit sa pagdugang.
- Madugay nga mga koneksyon.
Sa pagsugod sa usa ka bag-ong tigpaminaw, kinahanglan nimo nga atimanon ang mga koneksyon nga nagdagan sa daan; kung ang mga pagbag-o kanunay nga mahitabo ug adunay dugay nga mga koneksyon, kinahanglan nimo pangitaon ang usa ka kompromiso. Hello, kubernetes ingress sa nginx.
- Aktibo nga pagsusi sa kahimsog.
Kung kami adunay aktibo nga mga pagsusi sa kahimsog, kinahanglan namon nga susihon kini tanan sa bag-ong config sa dili pa ipadala ang trapiko. Kung adunay daghang mga upstream, kini nagkinahanglag panahon. Hello haproxy.
Giunsa kini pagsulbad sa nagpadalaPinaagi sa pag-load sa config nga dinamiko, sumala sa modelo sa pool, mahimo nimong bahinon kini sa lainlaing mga bahin ug dili i-re-initialize ang bahin nga wala mausab. Pananglitan, ang usa ka tigpaminaw, nga mahal sa pag-reinitialize ug panagsa ra mausab.
Pagsalig nagpadala (gikan sa file sa ibabaw) adunay mosunod nga mga entidad:
- tigpaminaw β tigpaminaw nga nagbitay sa usa ka piho nga ip/port
- virtual nga host - virtual host pinaagi sa domain name
- ruta - pagbalanse nga lagda
- cluster - usa ka grupo sa mga upstream nga adunay mga parameter sa pagbalanse
- katapusang punto β adres sa upstream nga pananglitan
Ang matag usa niini nga mga entidad ug uban pa mahimong mapuno sa dinamikong paagi; tungod niini, ang configuration nagtino sa adres sa serbisyo gikan diin ang config madawat. Ang serbisyo mahimong REST o gRPC, gRPC mas gusto.
Ang mga serbisyo gihinganlan matag usa: LDS, VHDS, RDS, CDS ug EDS. Mahimo nimong ikombinar ang static ug dynamic nga configuration, uban ang limitasyon nga ang usa ka dinamikong kapanguhaan dili matino sa usa ka static.
Alang sa kadaghanan nga mga buluhaton, igo na nga ipatuman ang katapusan nga tulo nga mga serbisyo, kini gitawag nga ADS (Aggregated Discovery Service), alang sa
Ang configuration nagkinahanglan sa mosunod nga porma:
envoy.yaml dinamikong configuration
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
Sa pagsugod nagpadala uban niini nga config, kini magkonektar sa control-plane ug mosulay sa paghangyo sa RDS, CDS ug EDS configuration. Gihulagway kung giunsa ang proseso sa interaksyon mahitabo
Sa laktod, nagpadala nagpadala ug hangyo nga nagpakita sa matang sa kahinguhaan nga gipangayo, ang bersyon ug mga parametro sa node. Agig tubag, nakadawat kini usa ka kapanguhaan ug usa ka bersyon; kung ang bersyon sa control-plane wala mausab, dili kini motubag.
Adunay 4 ka opsyon sa interaksyon:
- Usa ka stream sa gRPC alang sa tanan nga mga matang sa mga kapanguhaan, ang tibuuk nga kahimtang sa kapanguhaan gipadala.
- Lahi nga mga sapa, hingpit nga kahimtang.
- Usa ka sapa, incremental nga estado.
- Lahi nga mga sapa, incremental nga estado.
Ang Incremental xDS nagtugot kanimo sa pagpakunhod sa trapiko tali sa control-plane ug nagpadala, kini may kalabutan alang sa dagkong mga configuration. Apan gikomplikado niini ang interaksyon; ang hangyo adunay usa ka lista sa mga kapanguhaan alang sa pag-unsubscribe ug pag-subscribe.
Ang among pananglitan naggamit sa ADS - usa ka sapa alang sa RDS, CDS, EDS ug non-incremental mode. Aron mahimo ang incremental mode, kinahanglan nimo nga ipiho api_type: DELTA_GRPC
Tungod kay ang hangyo adunay mga parameter sa node, mahimo namon ipadala ang lainlaing mga kapanguhaan sa control-plane alang sa lainlaing mga higayon nagpadala, kini sayon ββalang sa pagtukod sa usa ka service mesh.
Pag-init
sa nagpadala sa pagsugod o sa dihang nakadawat og bag-ong configuration gikan sa control-plane, ang resource warmup nga proseso gilunsad. Gibahin kini sa listener warmup ug cluster warmup. Ang una gilusad kung adunay mga pagbag-o sa RDS/LDS, ang ikaduha kung CDS/EDS. Kini nagpasabot nga kon ang mga upstream lang ang mausab, ang tigpaminaw dili mugnaon.
Atol sa proseso sa pagpainit, ang nagsalig nga mga kapanguhaan gipaabut gikan sa control-plane sa panahon sa timeout. Kung mahitabo ang timeout, ang pagsugod dili magmalampuson ug ang bag-ong tigpaminaw dili magsugod sa pagpaminaw sa pantalan.
Pag-order sa pagsugod: EDS, CDS, aktibo nga pagsusi sa kahimsog, RDS, LDS. Sa aktibo nga mga pagsusi sa kahimsog nga mahimo, ang trapiko moadto sa agos lamang pagkahuman sa usa ka malampuson nga pagsusi sa kahimsog.
Kung ang tigpaminaw gimugna pag-usab, ang daan moadto sa DRAIN nga kahimtang ug mapapas human ang tanan nga koneksyon sirado o ang timeout matapos. --drain-time-s
, default 10 minutos.
Ang pagpadayon.
Source: www.habr.com