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
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
ʻ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
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
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