Kwaziwai! Ichi chinyorwa chipfupi chinopindura mibvunzo: "chii chinonzi nhume?", "Nei ichidikanwa?" uye "kutangira kupi?".
Chii ichi
Envoy is an L4-L7 balancer yakanyorwa muC ++, yakatarisana nepamusoro pekuita uye kuwanikwa. Kune rimwe divi, iyi neimwe nzira analogue ye nginx uye haproxy, inofananidzwa mukuita kwavari. Nekune rimwe divi, yakanangana neiyo microservice architecture uye haina mashandiro akaipisisa kupfuura java uye enda mabharanzi, akadai sezuul kana traefik.
Tafura yekuenzanisa ye haproxy/nginx/nhume, haitauri kuti ichokwadi chakakwana, asi inopa mufananidzo wakakwana.
nginx
haproxy
akatuma
traefik
nyeredzi pagithub
11.2k/girazi
1.1k/girazi
12.4k
27.6k
yakanyorwa mukati
C
C
C ++
go
API
kwete
socket chete/push
dataplane/dhonza
pull
active healthcheck
kwete
hongu
hongu
hongu
Open tracking
kunze plugin
kwete
hongu
hongu
J.W.T.
kunze plugin
kwete
hongu
kwete
ekisitenjeni
Lua/C
Lua/C
Lua/C++
kwete
Nei
Ichi chirongwa chechidiki, pane zvinhu zvakawanda zvisipo, zvimwe mukutanga alpha. Asi akatuma, zvakare nekuda kwehudiki hwayo, iri kukura nekukurumidza uye yatova nezvakawanda zvinonakidza maficha: dhizaini dhizaini, akawanda akagadzirira-akagadzirwa mafirita, iri nyore interface yekunyora yako mafirita.
Nzvimbo dzekushandisa dzinotevera kubva pane izvi, asi kutanga kune 2 antipatterns:
- Static recoil.
Chokwadi ndechekuti panguva ino in akatuma hapana caching rutsigiro. Vakomana veGoogle vari kuedza izvi
Parizvino, shandisa nginx ye statics.
- Static configuration.
Unogona kuishandisa, asi akatuma Handizvo zvakasikirwa. Zvimiro mune inomira zvigadziriso hazvizoburitswa pachena. Pane nguva dzakawanda:
Paunenge uchigadzirisa iyo yekumisikidza muyaml, unenge uchikanganisa, tsiura vanogadzira verbosity uye funga kuti nginx/haproxy configs, kunyangwe isina kurongeka, yakanyanya kupfupika. Ndiyo nyaya yacho. Kugadziriswa kweNginx neHaproxy kwakagadzirirwa kugadzirisa neruoko, uye akatuma kugadzirwa kubva kodhi. Iyo yese configuration inotsanangurwa mukati
Canary, b/g deployment scenarios uye zvimwe zvakawanda zvinowanzoitwa chete mukugadziriswa kwesimba. Handisi kuti izvi hazvigone kuitwa statically, tese tinozviita. Asi nokuda kweizvi unoda kuisa madondoro, mune chero ipi zvayo yekuenzanisa, mukati akatuma kusanganisira.
Mabasa ayo Envoy akakosha:
- Traffic balancing mune yakaoma uye ine simba masisitimu. Izvi zvinosanganisira mesh yebasa, asi haisiriyo yega.
- Iko kudikanwa kwekugoverwa kwekuteedzera mashandiro, mvumo yakaoma kana kumwe kushanda kunowanikwa mukati akatuma kunze kwebhokisi kana kushandiswa zviri nyore, asi mu nginx/haproxy iwe unofanirwa kuve wakakomberedzwa ne lua uye dubious plugins.
Zvose, kana zvichidiwa, zvinopa kushanda kwepamusoro.
Sei basa iri
Envoy inogoverwa mumabhinari chete semufananidzo wedocker. Mufananidzo wacho watove nemuenzaniso weiyo static gadziriso. Asi isu tinofarira mazviri chete pakunzwisisa chimiro.
envoy.yaml static 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
Dynamic kugadzirisa
Idambudziko ripi ratiri kutsvaga mhinduro? Iwe haugone kungorodha zvakare kurodha balancer kumisikidzwa pasi pemutoro; "madiki" matambudziko achamuka:
- Configuration kusimbiswa.
Iyo config inogona kuve yakakura, inogona kuve yakakura kwazvo, kana tikairemedza yese kamwechete, mikana yekukanganisa kumwe inowedzera.
- Kubatana kwenguva refu.
Paunenge uchitanga muteereri mutsva, unofanirwa kutarisira zvinongedzo zvichimhanya pane yekare; kana shanduko dzichiitika nguva zhinji uye paine zvinongedzo zvekugara kwenguva refu, uchafanirwa kutsvaga kuwirirana. Mhoro, kubernetes ingress pane nginx.
- Kuongorora hutano hunoshanda.
Kana isu tine cheki yehutano inoshanda, isu tinofanirwa kuvatarisa kaviri muiyo nyowani config tisati tatumira traffic. Kana kune yakawanda yemvura inokwira, izvi zvinotora nguva. Mhoro haproxy.
Izvi zvinogadziriswa sei mukati akatumaNekurodha iyo config dynamically, zvinoenderana nedziva modhi, unogona kuipatsanura muzvikamu zvakasiyana uye kwete kutangazve chikamu chisina kuchinja. Semuyenzaniso, muteereri, izvo zvinodhura kuti reinitialize uye kashoma kuchinja.
Kugadziriswa akatuma (kubva mufaira riri pamusoro) ine zvinhu zvinotevera:
- muteereri - muteereri akarembera pane chaiyo ip / port
- virtual host - virtual host nezita rezita
- nzira - kuenzanisa mutemo
- sumbu - boka remikwidza ine mitsetse yekuenzanisa
- endpoint - kero yepamusoro yemuenzaniso
Imwe neimwe yeaya masangano pamwe nemamwe anogona kuzadzwa zvine simba; kune izvi, iyo gadziriso inotsanangura kero yesevhisi kubva panozogashirwa config. Iyo sevhisi inogona kuve REST kana gRPC, gRPC inodiwa.
Iwo masevhisi ane mazita akateerana: LDS, VHDS, RDS, CDS uye EDS. Iwe unogona kusanganisa static uye dynamic kumisikidza, pamwe neinogumira iyo ine simba sosi haigone kutaurwa mune imwe yakamira.
Pamabasa mazhinji, zvinokwana kuita masevhisi matatu ekupedzisira, anonzi ADS (Aggregated Discovery Service), ye
Kugadziriswa kunotora fomu rinotevera:
envoy.yaml dynamic 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
Pakutanga akatuma neiyi config, ichabatana kune control-ndege uye edza kukumbira iyo RDS, CDS uye EDS kumisikidzwa. Kuti kudyidzana kunoitika sei kunotsanangurwa
Muchidimbu, akatuma inotumira chikumbiro chinoratidza rudzi rwechishandiso chiri kukumbirwa, iyo vhezheni uye paramita yenode. Mukupindura, inogamuchira sosi uye vhezheni; kana iyo vhezheni pane yekudzora-ndege isina kuchinja, haipindure.
Pane 4 yekudyidzana sarudzo:
- Imwe gRPC rwizi kune ese marudzi ezviwanikwa, iyo yakazara mamiriro eiyo sosi inotumirwa.
- Hova dzakaparadzana, mamiriro akazara.
- Rukova rumwe, chimiro chekuwedzera.
- Hova dzakaparadzana, mamiriro ekuwedzera.
Inowedzera xDS inobvumidza iwe kudzikisa traffic pakati pekutonga-ndege uye akatuma, izvi zvakakosha kune zvigadziriso zvakakura. Asi zvinokanganisa kudyidzana; chikumbiro chine runyorwa rwezviwanikwa zvekusanyora uye kunyoresa.
Muenzaniso wedu unoshandisa ADS - rwizi rumwe rweRSS, CDS, EDS uye isiri-yekuwedzera modhi. Kugonesa incremental mode, unofanirwa kutsanangura api_type: DELTA_GRPC
Sezvo chikumbiro chine node paramita, tinogona kutumira zviwanikwa zvakasiyana kune yekudzora-ndege yezviitiko zvakasiyana akatuma, izvi zvakanakira kuvaka mesh yebasa.
Dziisa
pamusoro akatuma pakutanga kana kana uchigamuchira gadziriso nyowani kubva kukudzora-ndege, iyo resource warmup process inotangwa. Yakakamurwa kuva muteereri warmup uye cluster warmup. Yekutanga inotangwa kana paine shanduko muRSS/LDS, yechipiri kana CDS/EDS. Izvi zvinoreva kuti kana kumusoro kwerwizi chete kwakachinja, muteereri haagadziriswe zvakare.
Munguva yekudziya-up process, inotsamira zviwanikwa zvinotarisirwa kubva kune yekudzora-ndege panguva yekubuda. Kana nguva yekupera ikaitika, kutanga hakuzobudiriri uye muteereri mutsva haatange kuteerera pachiteshi.
Kutanga kurongeka: EDS, CDS, cheki yehutano inoshanda, RDS, LDS. Nekuongororwa kwehutano kwakagoneswa, traffic inokwira kumusoro chete mushure mekutarisa hutano hwakabudirira.
Kana muteereri akagadzirwa patsva, yekare inoenda kuDRAIN state uye inobviswa mushure mekunge zvese zvakabatana zvavharwa kana nguva yekubuda yapera. --drain-time-s
, default maminitsi gumi.
Zvichaenderera mberi.
Source: www.habr.com