ʻElele. 1. Hoʻolauna

Aloha mai! He ʻatikala pōkole kēia e pane ana i nā nīnau: "He aha ka ʻelele?", "No ke aha e pono ai?" a "ma hea e hoʻomaka ai?".

He aha kēia

ʻO Envoy kahi mea kaulike L4-L7 i kākau ʻia ma C ++, e kālele ana i ka hana kiʻekiʻe a me ka loaʻa. Ma ka ʻaoʻao hoʻokahi, he ʻano like kēia o ka nginx a me ka haproxy, i hoʻohālikelike ʻia i ka hana iā lākou. Ma ka ʻaoʻao ʻē aʻe, ʻoi aku ka maikaʻi o ka hoʻolālā microservice a ʻaʻole i ʻoi aku ka hewa ma mua o java a hele i nā mea kaulike, e like me zuul a i ʻole traefik.

ʻO ka papa hoʻohālikelike o haproxy/nginx/envoy, ʻaʻole ia e ʻōlelo ʻo ia ka ʻoiaʻiʻo maoli, akā hāʻawi i kahi kiʻi ākea.

nginx
haproxy
ʻelele
hemo

nā hōkū ma github
11.2k / aniani
1.1k / aniani
12.4k
27.6k

kākau ʻia ma
C
C
C ++
go

API
aole
puna wale/paʻi
mokulele/huki
huki

ʻeleu ola kino
aole
ʻo ia
ʻo ia
ʻo ia

Hāmama ka ʻimi ʻana
pākuʻi waho
aole
ʻo ia
ʻo ia

Ua ʻōlelo ʻo J.W.T.
pākuʻi waho
aole
ʻo ia
aole

palena manawa
Lua/C
Lua/C
Lua/C++
aole

No ke aha

He papahana ʻōpio kēia, nui nā mea i nalowale, kekahi ma ka alpha mua. Akā ʻelele, ma muli o kona ʻōpiopio, ke ulu wikiwiki nei a ua loaʻa iā ia nā hiʻohiʻona hoihoi he nui: hoʻonohonoho hoʻoikaika, nui nā kānana i mākaukau, kahi maʻalahi no ke kākau ʻana i kāu mau kānana ponoʻī.
Hoʻopili nā wahi o ka noi mai kēia, akā ʻo ka mea mua he 2 antipatterns:

  • Hoʻihoʻi paʻa.

ʻO ka ʻoiaʻiʻo i kēia manawa i ʻelele ʻaʻohe kākoʻo cache. Ke hoʻāʻo nei nā kāne Google i kēia hoʻoponopono. E hoʻokō ʻia ka manaʻo i hoʻokahi manawa ʻelele ʻO nā subtleties āpau (nā poʻomanaʻo zoo) o ka hoʻokō RFC, a no nā hoʻokō kikoʻī e hana i kahi interface. Akā i kēia manawa ʻaʻole ia he alpha, ke kūkākūkā ʻia nei ka hale hana, PR wehe ʻia (ʻoiai wau e kākau ana i ka ʻatikala PR, ua maloʻo ka PR, akā pili mau kēia wahi).

I kēia manawa, e hoʻohana i ka nginx no statics.

  • Hoʻonohonoho paʻa.

Hiki iā ʻoe ke hoʻohana, akā ʻelele ʻAʻole ia ka mea i hana ʻia ai. ʻAʻole e hōʻike ʻia nā hiʻohiʻona ma kahi hoʻonohonoho paʻa. Nui nā manawa:

I ka hoʻoponopono ʻana i ka hoʻonohonoho ʻana ma yaml, e kuhihewa ʻoe, e ʻāhewa i nā mea hoʻomohala no ka verbosity a noʻonoʻo ʻo ka nginx/haproxy configs, ʻoiai ʻaʻole i hoʻonohonoho ʻia, ʻoi aku ka pōkole. ʻO ia ke kumu. Ua hana ʻia ka hoʻonohonoho ʻana o Nginx a me Haproxy no ka hoʻoponopono ʻana ma ka lima, a ʻelele no ka hanauna mai ke code. Ua wehewehe ʻia ka hoʻonohonoho holoʻokoʻa ma protobuf, ʻoi aku ka paʻakikī o ka hana hewa ʻana mai nā faila proto.

ʻO Canary, b/g deployment scenario a me nā mea hou aʻe e hoʻokō maʻamau wale ʻia i kahi hoʻonohonoho hoʻoikaika. ʻAʻole wau e ʻōlelo nei ʻaʻole hiki ke hana i kēia mea, hana mākou a pau. Akā no kēia pono ʻoe e kau i nā koʻokoʻo, i kekahi o nā mea kaulike, i loko ʻelele e komo pū ana.

Nā hana e pono ai ka ʻelele:

  • ʻO ke kaulike kaʻahele ma nā ʻōnaehana paʻakikī a paʻakikī. Hoʻopili kēia i ka mesh lawelawe, akā ʻaʻole pono ia wale nō.
  • ʻO ka pono no ka hoʻokaʻawale ʻana i ka hana tracing, ka mana paʻakikī a i ʻole nā ​​​​hana ʻē aʻe i loaʻa i loko ʻelele ma waho o ka pahu a i ʻole i hoʻokō pono ʻia, akā i ka nginx/haproxy pono ʻoe e hoʻopuni ʻia e nā lua a me nā plugins dubious.

ʻO nā meaʻelua, inā pono, e hāʻawi i ka hana kiʻekiʻe.

Pehea hana i keia hana

Hoʻokaʻawale ʻia ka ʻelele ma nā binaries wale nō ma ke ʻano he kiʻi docker. Aia i ke kiʻi kekahi laʻana o kahi hoʻonohonoho paʻa. Akā, makemake mākou iā ia no ka hoʻomaopopo ʻana i ke ʻano.

ʻelele.yaml hoʻonohonoho paʻa

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

Hoʻonohonoho hoʻolalelale

He aha ka pilikia a mākou e ʻimi nei i kahi hoʻonā? ʻAʻole hiki iā ʻoe ke hoʻouka hou i ka hoʻonohonoho hoʻonohonoho hoʻohālikelike ukana ma lalo o ka ukana; e kū mai nā pilikia "liʻiliʻi":

  • Hōʻoia hoʻonohonoho.

Hiki ke nui ka config, hiki ke nui loa, inā hoʻonui mākou i ka manawa hoʻokahi, piʻi ka manawa o kahi hewa ma kahi.

  • Nā pilina lōʻihi.

I ka hoʻomaka ʻana i kahi mea hoʻolohe hou, pono ʻoe e mālama i nā pili e holo ana ma ka mea kahiko; inā loli pinepine a loaʻa nā pilina lōʻihi, pono ʻoe e ʻimi i kahi kuʻikahi. Aloha, komo nā kubernetes ma nginx.

  • Nā nānā ola kino.

Inā loaʻa iā mākou nā loiloi olakino ikaika, pono mākou e nānā pālua iā lākou āpau i ka config hou ma mua o ka hoʻouna ʻana i nā kaʻa. Inā nui nā kahawai i luna, pono kēia i ka manawa. Aloha haproxy.

Pehea e hoʻoholo ai i kēia ma ʻeleleMa ka hoʻouka ʻana i ka config dynamically, e like me ke kumu hoʻohālike, hiki iā ʻoe ke hoʻokaʻawale iā ia i nā ʻāpana ʻokoʻa a ʻaʻole hoʻomaka hou i ka ʻāpana i loli ʻole. No ka laʻana, he mea hoʻolohe, he pipiʻi ke hoʻomaka hou a ʻaʻole liʻiliʻi e loli.

Kauoa ʻelele (mai ka faila ma luna) loaʻa kēia mau mea:

  • hoʻolohe - ka mea hoʻolohe e kau ana ma kahi ip/port kikoʻī
  • mea hoʻokipa virtual - ka mea hoʻokipa ma ka inoa kikowaena
  • ala - lula kaulike
  • huiwaina - kahi hui o nā kahawai i luna me nā ʻāpana kaulike
  • hopena kūlike — ka helu kuhi henua

Hiki ke hoʻopiha piha ʻia kēlā me kēia mau mea a me nā mea ʻē aʻe; no kēia, ua kuhikuhi ka hoʻonohonoho i ka helu o ka lawelawe mai kahi e loaʻa ai ka config. Hiki i ka lawelawe ke REST a i ʻole gRPC, ʻoi aku ka maikaʻi o ka gRPC.

Ua kapa ʻia nā lawelawe: LDS, VHDS, RDS, CDS a me EDS. Hiki iā ʻoe ke hoʻohui i ka hoʻonohonoho static a me ka dynamic, me ka palena ʻaʻole hiki ke kuhikuhi ʻia kahi kumuwaiwai dynamic i kahi static.

No ka hapa nui o nā hana, lawa ia e hoʻokō i nā lawelawe hope ʻekolu, ua kapa ʻia lākou ADS (Aggregated Discovery Service), no ka java a hele i laila kahi hoʻokō mākaukau o ka dataplane gRPC kahi āu e pono ai e hoʻopiha i nā mea mai kāu kumu.

Lawe ʻia ka hoʻonohonoho ʻana i kēia ʻano:

envoy.yaml hoʻonohonoho hoʻoikaika kino

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

Hoʻomaka ʻelele me kēia config, e hoʻopili ia i ka control-plane a ho'āʻo e noi i ka hoʻonohonoho RDS, CDS a me EDS. Ua wehewehe ʻia ke ʻano o ke kaʻina hana pili maanei.

I ka pōkole, ʻelele hoʻouna i kahi noi e hōʻike ana i ke ʻano o ka waiwai i noi ʻia, ka mana a me nā ʻāpana o ka node. Ma ka pane ʻana, loaʻa iā ia kahi kumuwaiwai a me kahi mana; inā ʻaʻole i loli ka mana ma ka mokulele hoʻokele, ʻaʻole ia e pane.
Aia he 4 mau koho pilina:

  • Hoʻokahi kahawai gRPC no nā ʻano waiwai āpau, hoʻouna ʻia ke kūlana piha o ka waiwai.
  • Nā kahawai kaʻawale, kūlana piha.
  • Hoʻokahi kahawai, kūlana hoʻonui.
  • ʻO nā kahawai kaʻawale, kūlana hoʻonui.

Hiki i ka Incremental xDS ke hōʻemi i ke kaʻa ma waena o ka mokulele hoʻokele a me ʻelele, pili kēia no nā hoʻonohonoho nui. Akā paʻakikī ka pilina; aia ka papa inoa o nā kumuwaiwai no ka haʻalele ʻana a me ke kau inoa ʻana.

Hoʻohana kā mākou laʻana iā ADS - hoʻokahi kahawai no RDS, CDS, EDS a me ke ʻano hoʻonui ʻole. No ka ho'ā ʻana i ke ʻano incremental, pono ʻoe e kuhikuhi api_type: DELTA_GRPC

No ka mea aia i loko o ka noi nā ʻāpana node, hiki iā mākou ke hoʻouna i nā kumuwaiwai like ʻole i ka control-plane no nā manawa like ʻole ʻelele, He mea maʻalahi kēia no ke kūkulu ʻana i kahi mesh lawelawe.

Hoʻomehana

maluna o ʻelele i ka hoʻomaka ʻana a i ka wā e loaʻa ai kahi hoʻonohonoho hou mai ka control-plane, hoʻomaka ke kaʻina hana hoʻomehana waiwai. Ua māhele ʻia i ka hoʻolohe hoʻolohe a me ka pumehana puʻupuʻu. Hoʻokuʻu ʻia ka mua inā loaʻa nā loli i RDS/LDS, ʻo ka lua i ka wā CDS/EDS. ʻO ia hoʻi, inā hoʻololi wale ʻia ka upstreams, ʻaʻole hana hou ʻia ka mea hoʻolohe.

Ma ke kaʻina hana pumehana, manaʻo ʻia nā kumu waiwai hilinaʻi mai ka mokulele hoʻokele i ka wā o ka manawa. Inā hiki mai ka manawa pau, ʻaʻole e holomua ka hoʻomaka ʻana a ʻaʻole hoʻomaka ka mea hoʻolohe hou e hoʻolohe ma ke awa.
Kauoha hoʻomaka: EDS, CDS, nānā ola kino, RDS, LDS. Me ka ʻae ʻana i nā loiloi olakino ikaika, e piʻi ka huakaʻi i uka wale nō ma hope o hoʻokahi nānā olakino holomua.

Inā hana hou ʻia ka mea hoʻolohe, hele ka mea kahiko i ka mokuʻāina DRAIN a holoi ʻia ma hope o ka pani ʻana o nā pilina a pau a i ʻole ka pau ʻana o ka manawa. --drain-time-s, 10 mau minuke paʻamau.

E hoʻomauʻia.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka