Envoy. 1. Nhanganyaya

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 gadzirisa. Pfungwa yacho ichaitwa kamwe mukati akatuma zvese zvisinganzwisisike (zoo misoro) yeRFC kuteedzera, uye kune chaiyo maitirwo gadzira chinongedzo. Asi pari zvino haisi kana alpha, dhizaini iri kukurukurwa, PR vhura (pandanga ndichinyora chinyorwa chePR, iyo PR yakamira, asi iyi poindi ichiri yakakosha).

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 protobuf, kuigadzira kubva kumafaira eproto zvakanyanya kuoma kuita chikanganiso.

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 java uye enda kune yakagadzirira-yakagadzirwa kuisirwa kwegRPC dataplane umo iwe unongoda kuzadza zvinhu kubva kunobva yako.

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 pano.

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

Voeg