Bonjou! Sa a se yon atik kout ki reponn kesyon yo: "ki sa ki anvwaye?", "poukisa li nesesè?" ak "ki kote yo kòmanse?".
Ki sa ki sa a
Envoy se yon balans L4-L7 ekri nan C++, konsantre sou pèfòmans segondè ak disponiblite. Sou yon bò, sa a se nan kèk fason yon analogue nan nginx ak haproxy, ki konparab nan pèfòmans yo. Nan lòt men an, li se plis oryante nan achitekti mikwosèvis epi li gen fonksyonalite pa pi mal pase java and go balancers, tankou zuul oswa traefik.
Tablo konparezon haproxy/nginx/envoy, li pa fè reklamasyon yo se verite a absoli, men li bay yon foto jeneral.
nginx
haproxy
anvwaye
traefik
zetwal sou github
11.2k / glas
1.1k / glas
12.4k
27.6k
ekri nan
C
C
C ++
go
API
нет
priz sèlman/pouse
plan done/rale
rale
chèk sante aktif
нет
repons lan se wi
repons lan se wi
repons lan se wi
Louvri tras
ekstèn plugin
нет
repons lan se wi
repons lan se wi
J.W.T.
ekstèn plugin
нет
repons lan se wi
нет
ekstansyon
Lua/C
Lua/C
Lua/C++
нет
Poukisa
Sa a se yon pwojè jèn, gen anpil bagay ki manke, kèk nan alfa bonè. Men anvwaye, tou akòz jèn li yo, ap devlope rapidman e li deja gen anpil karakteristik enteresan: konfigirasyon dinamik, anpil filtè pare yo, yon koòdone senp pou ekri pwòp filtè ou yo.
Zòn aplikasyon yo swiv sa a, men premye gen 2 antimodèl:
- Recul estatik.
Reyalite a se ke nan moman sa a nan anvwaye pa gen sipò kachèt. Mesye Google yo ap eseye sa
Pou kounye a, sèvi ak nginx pou estatik.
- Konfigirasyon estatik.
Ou ka sèvi ak li, men anvwaye Se pa pou sa li te kreye. Karakteristik nan yon konfigirasyon estatik pa pral ekspoze. Gen anpil moman:
Lè w ap modifye konfigirasyon an nan yaml, w ap fè erè, reprimande devlopè yo pou verite epi panse ke konfigirasyon nginx/haproxy yo, byenke mwens estriktire, yo pi kout. Sa a se pwen an. Konfigirasyon Nginx ak Haproxy te kreye pou koreksyon alamen, ak anvwaye pou jenerasyon soti nan kòd. Tout konfigirasyon an dekri nan
Canary, senaryo deplwaman b/g ak plis ankò yo nòmalman aplike sèlman nan yon konfigirasyon dinamik. Mwen pa di ke sa pa ka fè statique, nou tout fè li. Men, pou sa ou bezwen mete sou beki, nan nenpòt nan balans yo, nan anvwaye ki gen ladan.
Travay ki Envoy endispansab:
- Balanse trafik nan sistèm konplèks ak dinamik. Sa a gen ladan may sèvis la, men li pa nesesèman youn nan sèlman.
- Bezwen pou fonksyonalite trase distribiye, otorizasyon konplèks oswa lòt fonksyonalite ki disponib nan anvwaye soti nan bwat la oswa pratikman aplike, men nan nginx / haproxy ou bezwen antoure pa lua ak grefon ézitan.
Tou de, si sa nesesè, bay pèfòmans segondè.
Kijan travay sa a
Envoy distribye nan binè sèlman kòm yon imaj docker. Imaj la deja gen yon egzanp yon konfigirasyon estatik. Men, nou enterese nan li sèlman pou konprann estrikti a.
envoy.yaml konfigirasyon estatik
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
Konfigirasyon dinamik
Pou ki pwoblèm nap chèche yon solisyon? Ou pa ka jis rechaje konfigirasyon balans chaj la anba chaj; "ti" pwoblèm ap parèt:
- Validasyon konfigirasyon.
Konfigirasyon an ka gwo, li ka trè gwo, si nou surcharge li tout nan yon fwa, chans yo nan yon erè yon kote ogmante.
- Koneksyon ki dire lontan.
Lè w inisyalize yon nouvo koute, ou bezwen pran swen koneksyon yo kouri sou ansyen an; si chanjman yo rive souvan epi gen koneksyon ki dire lontan, w ap oblije chèche yon konpwomi. Bonjou, kubernetes antre sou nginx.
- Chèk sante aktif.
Si nou gen chèk sante aktif, nou bezwen double-tcheke yo tout nan nouvo konfigirasyon an anvan voye trafik. Si gen yon anpil nan upstreams, sa a pran tan. Bonjou haproxy.
Ki jan sa rezoud nan anvwayePa chaje konfigirasyon an dinamik, dapre modèl pisin lan, ou ka divize li an pati separe epi ou pa re-inisyalize pati ki pa chanje. Pou egzanp, yon koute, ki se chè reinitialize ak raman chanje.
Konfigirasyon anvwaye (ki soti nan dosye ki anwo a) gen antite sa yo:
- koute — koute pandye sou yon ip/pò espesifik
- lame vityèl - lame vityèl pa non domèn
- wout - règ balanse
- gwoup - yon gwoup amont ak paramèt balanse
- pwen final - adrès egzanp en
Chak nan antite sa yo ak kèk lòt ka ranpli dinamik; pou sa a, konfigirasyon an presize adrès sèvis la soti nan kote yo pral resevwa konfigirasyon an. Sèvis la ka REST oswa gRPC, gRPC pi preferab.
Sèvis yo rele respektivman: LDS, VHDS, RDS, CDS ak EDS. Ou ka konbine konfigirasyon estatik ak dinamik, ak limit ke yon resous dinamik pa ka espesifye nan yon yon sèl estatik.
Pou pifò travay, li ase pou aplike twa dènye sèvis yo, yo rele yo ADS (Aggregated Discovery Service), pou
Konfigirasyon an pran fòm sa a:
envoy.yaml konfigirasyon dinamik
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
Nan demaraj anvwaye ak konfigirasyon sa a, li pral konekte nan avyon kontwòl la epi eseye mande RDS, CDS ak EDS konfigirasyon an. Yo dekri kijan pwosesis entèraksyon an rive
An rezime, anvwaye voye yon demann ki endike ki kalite resous ke yo te mande, vèsyon an ak paramèt ne la. Kòm repons, li resevwa yon resous ak yon vèsyon; si vèsyon an sou avyon kontwòl la pa chanje, li pa reponn.
Gen 4 opsyon entèraksyon:
- Yon kouran gRPC pou tout kalite resous, yo voye estati konplè resous la.
- Kouran separe, kondisyon konplè.
- Yon sèl kouran, eta incrémentielle.
- Kouran separe, eta incrémentielle.
Incrémental xDS pèmèt ou redwi trafik ant kontwòl avyon an ak anvwaye, sa a enpòtan pou konfigirasyon gwo. Men, li konplike entèraksyon an; demann lan gen yon lis resous pou dezabònman ak abònman.
Egzanp nou an sèvi ak ADS - yon sèl kouran pou RDS, CDS, EDS ak mòd ki pa enkreman. Pou pèmèt mòd incrémentielle, ou bezwen presize api_type: DELTA_GRPC
Depi demann lan gen paramèt ne, nou ka voye resous diferan nan avyon kontwòl la pou diferan ka anvwaye, sa a se pratik pou bati yon may sèvis.
Chofe
Sou anvwaye nan demaraj oswa lè w ap resevwa yon nouvo konfigirasyon nan plan kontwòl, pwosesis chofe resous la te lanse. Li divize an chofe oditè ak chofe grap. Premye a lanse lè gen chanjman nan RDS/LDS, dezyèm lan lè CDS/EDS. Sa vle di ke si sèlman upstreams chanje, koute a pa rkree.
Pandan pwosesis chofe a, resous depandan yo atann nan plan kontwòl la pandan tan an. Si tan an rive, inisyalizasyon pa pral reyisi epi nouvo moun k ap koute a pa pral kòmanse koute sou pò a.
Lòd inisyalizasyon: EDS, CDS, chèk sante aktif, RDS, LDS. Avèk chèk sante aktif yo aktive, trafik yo pral monte sèlman apre yon chèk sante siksè.
Si moun k ap koute a te rkree, ansyen an ale nan eta DRAIN epi yo pral efase apre tout koneksyon yo fèmen oswa tan an ekspire. --drain-time-s
, default 10 minit.
Yo dwe kontinye.
Sous: www.habr.com