Aṣojú. 1. Ifihan

Ẹ kí! Eyi jẹ nkan kukuru kan ti o dahun awọn ibeere: “kini aṣoju?”, “Kini idi ti o fi nilo?” ati "nibo ni lati bẹrẹ?".

Kini eyi

Envoy jẹ iwọntunwọnsi L4-L7 ti a kọ sinu C ++, lojutu lori iṣẹ giga ati wiwa. Ni ọna kan, eyi jẹ ni ọna kan afọwọṣe ti nginx ati haproxy, ti o ṣe afiwe ni iṣẹ si wọn. Ni apa keji, o wa ni iṣalaye diẹ sii si ọna faaji microservice ati pe ko ni iṣẹ ṣiṣe ti o buru ju java ati awọn iwọntunwọnsi lọ, gẹgẹbi zuul tabi traefik.

Tabili afiwe ti haproxy / nginx / envoy, ko beere pe o jẹ otitọ pipe, ṣugbọn o funni ni aworan gbogbogbo.

nginx
haproxy
aṣojú
trafik

irawọ lori github
11.2k / digi
1.1k / digi
12.4k
27.6k

ti a kọ sinu
C
C
C ++
go

API
ko si
iho nikan / titari
dataplane / fa
Fa

ti nṣiṣe lọwọ ilera ayẹwo
ko si
bẹẹni
bẹẹni
bẹẹni

Ṣii wiwa kakiri
ita itanna
ko si
bẹẹni
bẹẹni

J.W.T.
ita itanna
ko si
bẹẹni
ko si

Imugboroosi
Lua/C
Lua/C
Lua/C++
ko si

Idi ti

Eyi jẹ iṣẹ akanṣe ọdọ, ọpọlọpọ awọn nkan ti nsọnu, diẹ ninu alpha ni kutukutu. Sugbon aṣojú, tun nitori ọdọ rẹ, n dagbasoke ni iyara ati tẹlẹ ni ọpọlọpọ awọn ẹya ti o nifẹ si: iṣeto ni agbara, ọpọlọpọ awọn asẹ ti a ti ṣetan, wiwo ti o rọrun fun kikọ awọn asẹ tirẹ.
Awọn agbegbe ti ohun elo tẹle lati eyi, ṣugbọn akọkọ awọn apanirun meji wa:

  • Ipadasẹhin aimi.

Otitọ ni pe ni akoko yii aṣojú ko si atilẹyin caching. Awọn eniyan Google n gbiyanju eyi atunse. Awọn agutan yoo wa ni muse ni kete ti ni aṣojú gbogbo awọn arekereke (awọn akọle zoo) ti ibamu RFC, ati fun awọn imuse kan pato ṣe wiwo kan. Ṣugbọn fun bayi kii ṣe paapaa alpha, faaji wa labẹ ijiroro, PR ṣii (nigba ti Mo nkọ nkan PR, PR ti di, ṣugbọn aaye yii tun wulo).

Fun bayi, lo nginx fun awọn iṣiro.

  • Aimi iṣeto ni.

O le lo, ṣugbọn aṣojú Iyẹn kii ṣe ohun ti a ṣẹda fun. Awọn ẹya ara ẹrọ ni a aimi iṣeto ni yoo wa ko le fara. Awọn akoko pupọ wa:

Nigbati o ba n ṣatunkọ iṣeto ni yaml, iwọ yoo ṣe aṣiṣe, kọlu awọn olupilẹṣẹ fun ọrọ sisọ ki o ronu pe awọn atunto nginx/haproxy, botilẹjẹpe eto ti ko dara, jẹ ṣoki diẹ sii. Oro naa niyen. Iṣeto ni Nginx ati Haproxy ni a ṣẹda fun ṣiṣatunṣe nipasẹ ọwọ, ati aṣojú fun iran lati koodu. Gbogbo iṣeto ni a sapejuwe ninu protobuf, ti o npese o lati proto awọn faili jẹ Elo siwaju sii soro lati ṣe kan ìfípáda.

Canary, awọn oju iṣẹlẹ imuṣiṣẹ b/g ati pupọ diẹ sii ni a ṣe imuse deede nikan ni iṣeto ni agbara. Emi ko sọ pe eyi ko le ṣee ṣe ni iṣiro, gbogbo wa ni a ṣe. Ṣugbọn fun eyi o nilo lati fi sori awọn crutches, ni eyikeyi ninu awọn iwọntunwọnsi, ni aṣojú pẹlu.

Awọn iṣẹ ṣiṣe fun eyiti Aṣoju jẹ pataki:

  • Iwontunwosi ijabọ ni eka ati awọn ọna ṣiṣe agbara. Eyi pẹlu apapo iṣẹ, ṣugbọn kii ṣe dandan nikan.
  • Iwulo fun iṣẹ ṣiṣe wiwa kaakiri, aṣẹ eka tabi iṣẹ ṣiṣe miiran ti o wa ninu aṣojú jade ninu apoti tabi ni irọrun imuse, sugbon ni nginx/haproxy o nilo lati wa ni ti yika nipasẹ lua ati dubious afikun.

Mejeeji, ti o ba jẹ dandan, pese iṣẹ ṣiṣe giga.

Báwo ni ise yi

Aṣoju ti pin ni awọn alakomeji nikan bi aworan docker kan. Aworan naa ti ni apẹẹrẹ ti iṣeto ni aimi tẹlẹ ninu. Ṣugbọn a nifẹ ninu rẹ nikan fun oye eto naa.

envoy.yaml aimi iṣeto ni

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

Ìmúdàgba iṣeto ni

Isoro wo ni a n wa ojutu si? O ko le ṣe atunto atunto iwọntunwọnsi fifuye labẹ ẹru; awọn iṣoro “kekere” yoo dide:

  • Afọwọsi iṣeto ni.

Awọn atunto le jẹ nla, o le jẹ pupọ, ti a ba ṣe apọju gbogbo rẹ ni ẹẹkan, awọn aye ti aṣiṣe ni ibi kan pọ si.

  • Awọn asopọ igba pipẹ.

Nigbati o ba bẹrẹ olutẹtisi tuntun, o nilo lati ṣe abojuto awọn asopọ ti n ṣiṣẹ lori atijọ; ti awọn ayipada ba waye nigbagbogbo ati pe awọn asopọ ti o pẹ, iwọ yoo ni lati wa adehun kan. Kaabo, kubernetes ingress lori nginx.

  • Awọn sọwedowo ilera ti nṣiṣe lọwọ.

Ti a ba ni awọn sọwedowo ilera ti nṣiṣe lọwọ, a nilo lati ṣayẹwo lẹẹmeji gbogbo wọn ni atunto tuntun ṣaaju fifiranṣẹ ijabọ. Ti o ba ti wa ni ọpọlọpọ awọn oke, eyi gba akoko. Hello haproxy.

Bawo ni eyi ṣe yanju ni aṣojúNipa ikojọpọ atunto ni agbara, ni ibamu si awoṣe adagun-odo, o le pin si awọn ẹya lọtọ ati ki o maṣe tun bẹrẹ apakan ti ko yipada. Fun apẹẹrẹ, olutẹtisi kan, eyiti o jẹ gbowolori lati tun bẹrẹ ati kii ṣe iyipada.

Iṣeto ni aṣojú (lati faili ti o wa loke) ni awọn nkan wọnyi:

  • olutẹtisi - olutẹtisi adiye lori ip / ibudo kan pato
  • foju ogun - foju ogun nipa ašẹ orukọ
  • ipa ọna - iwontunwosi ofin
  • oloro - ẹgbẹ kan ti oke pẹlu awọn aye iwọntunwọnsi
  • ipari - upstream apeere adirẹsi

Ọkọọkan awọn nkan wọnyi pẹlu diẹ ninu awọn miiran le kun ni agbara; fun eyi, iṣeto ni pato adirẹsi iṣẹ naa lati ibiti atunto naa yoo gba. Iṣẹ naa le jẹ REST tabi gRPC, gRPC jẹ ayanfẹ.

Awọn iṣẹ naa jẹ orukọ lẹsẹsẹ: LDS, VHDS, RDS, CDS ati EDS. O le darapọ aimi ati iṣeto ni agbara, pẹlu aropin pe orisun agbara ko le ṣe pato ni aimi kan.

Fun ọpọlọpọ awọn iṣẹ-ṣiṣe, o to lati ṣe awọn iṣẹ mẹta ti o kẹhin, wọn pe wọn ni ADS (Iṣẹ Awari Akopọ), fun java ki o si lọ nibẹ ni imuse ti a ti ṣetan ti gRPC dataplane ninu eyiti o kan nilo lati kun awọn nkan lati orisun rẹ.

Iṣeto ni o gba fọọmu wọnyi:

envoy.yaml ìmúdàgba iṣeto ni

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

Ni ibẹrẹ aṣojú pẹlu atunto yii, yoo sopọ si ọkọ ofurufu iṣakoso ati gbiyanju lati beere RDS, CDS ati iṣeto EDS. Bawo ni ilana ibaraenisepo waye ti wa ni apejuwe nibi.

Ni soki, aṣojú firanṣẹ ibeere kan ti o nfihan iru orisun ti o beere, ẹya ati awọn aye ti ipade naa. Ni idahun, o gba orisun kan ati ẹya kan; ti ẹya lori ọkọ ofurufu iṣakoso ko ba yipada, ko dahun.
Awọn aṣayan ibaraenisepo 4 wa:

  • Ṣiṣan gRPC kan fun gbogbo awọn iru awọn orisun, ipo kikun ti orisun ni a firanṣẹ.
  • Awọn ṣiṣan lọtọ, ipo kikun.
  • ṣiṣan kan, ipo afikun.
  • Awọn ṣiṣan lọtọ, ipo afikun.

Alekun xDS gba ọ laaye lati dinku ijabọ laarin ọkọ ofurufu iṣakoso ati aṣojú, eyi jẹ pataki fun awọn atunto nla. Ṣugbọn o ṣe idiju ibaraenisepo; ibeere naa ni atokọ ti awọn orisun fun yiyọkuro ati ṣiṣe alabapin.

Apeere wa nlo ADS - ṣiṣan kan fun RDS, CDS, EDS ati ipo ti kii ṣe afikun. Lati mu ipo afikun ṣiṣẹ, o nilo lati pato api_type: DELTA_GRPC

Niwọn igba ti ibeere naa ni awọn paramita ipade, a le firanṣẹ awọn orisun oriṣiriṣi si ọkọ ofurufu iṣakoso fun awọn iṣẹlẹ oriṣiriṣi aṣojú, Eyi jẹ rọrun fun kikọ apapo iṣẹ kan.

Dara ya

Ni aṣojú ni ibẹrẹ tabi nigba gbigba iṣeto ni titun lati iṣakoso-ofurufu, ilana igbona awọn oluşewadi ti ṣe ifilọlẹ. O ti pin si igbona olutẹtisi ati imorusi iṣupọ. Ni igba akọkọ ti wa ni se igbekale nigbati awọn ayipada wa ni RDS/LDS, keji nigbati CDS/EDS. Eyi tumọ si pe ti awọn iṣan oke nikan ba yipada, olutẹtisi ko ni atunda.

Lakoko ilana igbona, awọn orisun ti o gbẹkẹle ni a nireti lati inu ọkọ ofurufu iṣakoso lakoko akoko ipari. Ti akoko asiko ba waye, ibẹrẹ kii yoo ṣaṣeyọri ati olutẹtisi tuntun kii yoo bẹrẹ gbigbọ lori ibudo naa.
Ilana ibẹrẹ: EDS, CDS, ayẹwo ilera ti nṣiṣe lọwọ, RDS, LDS. Pẹlu awọn sọwedowo ilera ti nṣiṣe lọwọ ṣiṣẹ, ijabọ yoo lọ si oke nikan lẹhin ayẹwo ilera aṣeyọri kan.

Ti olutẹtisi naa ba tun ṣe, atijọ lọ sinu ipo DRAIN ati pe yoo paarẹ lẹhin gbogbo awọn asopọ ti wa ni pipade tabi akoko ipari pari --drain-time-s, aiyipada 10 iṣẹju.

A tun ma a se ni ojo iwaju.

orisun: www.habr.com

Fi ọrọìwòye kun