Imirce ó Nginx go Toscaire Proxy

Dia duit, Habr! Cuirim d’aird ar aistriúchán ar an bpost: Imirce ó Nginx go Toscaire Proxy.

Is seachfhreastalaí dáilte ardfheidhmíochta é Toscaire (scríofa in C++) atá deartha le haghaidh seirbhísí agus feidhmchláir aonair, is bus cumarsáide agus “eitleán sonraí uilíoch” é freisin atá deartha le haghaidh ailtireachtaí móra “mogalra seirbhíse” micreasheirbhíse. Agus é á chruthú, cuireadh san áireamh réitigh ar fhadhbanna a tháinig chun cinn le linn forbairt freastalaithe ar nós NGINX, HAProxy, cothromóirí ualaigh crua-earraí agus cothromóirí ualaigh scamall. Oibríonn Toscaire taobh le gach feidhmchlár agus coimríonn sé an líonra chun feidhmiúlacht choiteann a sholáthar beag beann ar ardán. Nuair a shreabhann an trácht seirbhíse go léir i mbonneagar trí mhogalra an Toscaire, bíonn sé éasca réimsí fadhbacha a shamhlú le hinfheictheacht chomhsheasmhach, feidhmíocht iomlán a choigeartú, agus feidhmiúlacht lárnach a chur leis i suíomh ar leith.

Cumais

  • Ailtireacht lasmuigh den phróiseas: is freastalaí féinchuimsitheach ardfheidhmíochta é toscaire a thógann méid beag RAM. Oibríonn sé i gcomhar le haon teanga nó creat feidhme.
  • http/2 agus tacaíocht grpc: tá tacaíocht http/2 agus grpc den chéad scoth ag an toscaire do naisc isteach agus amach. Is seachfhreastalaí trédhearcach é seo ó http/1.1 go http/2.
  • Comhardú Luchtaithe Casta: tacaíonn an toscaire le gnéithe ardchothromaithe ualaigh lena n-áirítear atriail uathoibríocha, briseadh slabhraí, teorannú ráta domhanda, scáthú iarratais, cothromú ualaigh limistéir áitiúil, etc.
  • API Bainistíochta Cumraíochta: soláthraíonn toscaire API láidir chun do chumraíocht a bhainistiú go dinimiciúil.
  • Inbhraiteacht: Doimhneacht inbhraite tráchta L7, tacaíocht dhúchasach do rianú dáilte agus inbhraiteacht mongodb, dynamodb agus go leor feidhmeanna eile.

Céim 1 - Cumraíocht NGINX Sampla

Úsáideann an script seo comhad saindeartha nginx.conf, bunaithe ar an sampla iomlán ó NGINX Vicí. Is féidir leat an chumraíocht a fheiceáil san eagarthóir trí oscailt nginx.conf

cumraíocht foinse nginx

user  www www;
pid /var/run/nginx.pid;
worker_processes  2;

events {
  worker_connections   2000;
}

http {
  gzip on;
  gzip_min_length  1100;
  gzip_buffers     4 8k;
  gzip_types       text/plain;

  log_format main      '$remote_addr - $remote_user [$time_local]  '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$gzip_ratio"';

  log_format download  '$remote_addr - $remote_user [$time_local]  '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$http_range" "$sent_http_content_range"';

  upstream targetCluster {
    172.18.0.3:80;
    172.18.0.4:80;
  }

  server {
    listen        8080;
    server_name   one.example.com  www.one.example.com;

    access_log   /var/log/nginx.access_log  main;
    error_log  /var/log/nginx.error_log  info;

    location / {
      proxy_pass         http://targetCluster/;
      proxy_redirect     off;

      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
    }
  }
}

De ghnáth bíonn trí phríomhghné ag cumraíochtaí NGINX:

  1. Cumrú freastalaí NGINX, struchtúr logála agus feidhmiúlacht Gzip. Sainmhínítear é seo go domhanda i ngach cás.
  2. NGINX á chumrú chun glacadh le hiarratais chuig an óstaigh aon.shampla.com ar port 8080.
  3. An suíomh sprice a shocrú, conas trácht a láimhseáil le haghaidh codanna éagsúla den URL.

Ní bhainfidh gach cumraíocht le Toscaire Proxy, agus ní gá duit roinnt socruithe a chumrú. Tá Proxy Toscaire ceithre chineál eochair, a thacaíonn leis an mbonneagar lárnach a thairgeann NGINX. Is é an croí:

  • Éisteoirí: Socraíonn siad conas a ghlacann Toscaire Proxy le hiarratais a thagann isteach. Faoi láthair ní thacaíonn Toscaire Proxy ach éisteoirí TCP-bhunaithe. Nuair a bhíonn nasc bunaithe, cuirtear ar aghaidh chuig sraith scagairí é lena phróiseáil.
  • Scagairí: Is cuid d’ailtireacht píblíne iad ar féidir leo sonraí isteach agus amach a phróiseáil. Áirítear leis an bhfeidhmiúlacht seo scagairí cosúil le Gzip, a chomhbhrúíonn na sonraí sula seoltar chuig an gcliant iad.
  • Ródairí: Cuireann siad trácht ar aghaidh chuig an gceann scríbe riachtanach, sainithe mar bhraisle.
  • Cnuasaigh: Sainmhíníonn siad críochphointe do pharaiméadair tráchta agus cumraíochta.

Úsáidfimid na ceithre chomhpháirt seo chun cumraíocht Toscaire Proxy a chruthú chun cumraíocht shonrach NGINX a mheaitseáil. Is é sprioc an Toscaire oibriú le APIanna agus cumraíocht dhinimiciúil. Sa chás seo, úsáidfidh an chumraíocht bonn socruithe statacha, crua-chódaithe ó NGINX.

Céim 2 - Cumraíocht NGINX

An chéad chuid nginx.conf sainmhíníonn sé roinnt inmheánach NGINX nach mór a chumrú.

Naisc Oibrithe

Cinneann an chumraíocht thíos líon na bpróiseas agus na nasc oibrithe. Léiríonn sé seo conas a dhéanfaidh NGINX scála chun freastal ar an éileamh.

worker_processes  2;

events {
  worker_connections   2000;
}

Bainistíonn Toscaire Proxy sreafaí oibre agus naisc ar bhealaí éagsúla.

Cruthaíonn Toscaire snáithe oibrí do gach snáithe crua-earraí sa chóras. Déanann gach snáithe oibrí lúb imeacht neamh-blocála atá freagrach as

  1. Ag éisteacht le gach éisteoir
  2. Glacadh le naisc nua
  3. Ag cruthú sraith scagairí le haghaidh nasc
  4. Próiseáil gach oibríocht I/O le linn shaolré an naisc.

Déantar gach próiseáil nasc breise a láimhseáil go hiomlán sa snáithe oibrí, lena n-áirítear aon iompar ar aghaidh.

I gcás gach snáithe oibrí in Toscaire, tá linn ceangail. Mar sin ní bhunaíonn comhthiomsuithe naisc HTTP/2 ach nasc amháin in aghaidh an óstaigh sheachtraigh ag an am céanna, má tá ceithre shnáithe oibrithe ann beidh ceithre nasc HTTP/2 in aghaidh an óstaigh sheachtraigh i staid chobhsaí. Trí gach rud a choinneáil i snáithe oibrí amháin, is féidir beagnach gach cód a scríobh gan blocáil, amhail is dá mba snáithithe aonair é. Má leithdháiltear níos mó snáitheanna oibrithe ná mar is gá, d'fhéadfadh sé seo a bheith mar thoradh ar chuimhne amú, ag cruthú líon mór de naisc díomhaoin, agus ag laghdú an líon uaireanta a chuirtear naisc ar ais chuig an linn snámha.

Le haghaidh tuilleadh faisnéise tabhair cuairt ar Blag Toscaire Proxy.

Cumraíocht HTTP

Sainmhíníonn an bloc cumraíochta NGINX seo a leanas socruithe HTTP mar:

  • Cad iad na cineálacha mím a thacaítear leo
  • Teorainneacha Ama Réamhshocraithe
  • Cumraíocht Gzip

Is féidir leat na gnéithe seo a shaincheapadh trí úsáid a bhaint as scagairí sa Toscaire Seachfhreastalaí, a phléfaimid níos déanaí.

Céim 3 - Cumraíocht Freastalaí

Sa bhloc cumraíochta HTTP, sonraíonn cumraíocht NGINX éisteacht ar phort 8080 agus freagra a thabhairt ar iarratais isteach ar fhearann aon.shampla.com и www.one.example.com.

 server {
    listen        8080;
    server_name   one.example.com  www.one.example.com;

Laistigh Toscaire, tá sé á rialú ag Éisteoirí.

Éisteoirí Toscaire

Is í an ghné is tábhachtaí maidir le tosú le Toscaire Proxy ná do chuid éisteoirí a shainiú. Ní mór duit comhad cumraíochta a chruthú a chuireann síos ar an gcaoi a bhfuil tú ag iarraidh an sampla Toscaire a rith.

Cruthóidh an mhír thíos éisteoir nua agus nascfaidh sé le port 8080 é. Insíonn an chumraíocht do Sheachfhreastalaí Toscaire cé na poirt ar cheart dó a bheith ina gceangal le haghaidh iarratais isteach.

Úsáideann Toscaire Proxy nodaireacht YAML dá chumraíocht. Chun réamhrá a fháil ar an nodaireacht seo, féach anseo nasc.

Copy to Editorstatic_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }

Níl gá a shainiú server_name, toisc go láimhseálfaidh scagairí Seachfhreastalaí Toscaire é seo.

Céim 4 - Cumraíocht Suíomh

Nuair a thagann iarratas isteach i NGINX, socraíonn an bloc suímh conas an trácht a phróiseáil agus cén áit ar féidir é a threorú. Sa chuid seo a leanas, aistrítear an trácht go léir chuig an suíomh chuig braisle in aghaidh an tsrutha (nóta an aistritheora: is gnách freastalaí feidhmchláir é in aghaidh an tsrutha) ainmnithe spriocCluster. Sainmhíníonn an bhraisle in aghaidh an tsrutha na nóid ar cheart dóibh an t-iarratas a phróiseáil. Déanfaimid é seo a phlé sa chéad chéim eile.

location / {
    proxy_pass         http://targetCluster/;
    proxy_redirect     off;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
}

Ag Toscaire, déanann Scagairí é seo.

Scagairí Toscaire

Maidir le cumraíocht statach, cinneann na scagairí conas iarratais a thagann isteach a phróiseáil. Sa chás seo leagamar scagairí a mheaitseálann ainmneacha_freastalaí sa chéim roimhe seo. Nuair a thagann iarratais isteach a mheaitseálann fearainn agus bealaí áirithe, seoltar an trácht chuig an mbraisle. Is ionann é seo agus cumraíocht ó bhun aníos NGINX.

Copy to Editor    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
                - "one.example.com"
                - "www.one.example.com"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: targetCluster
          http_filters:
          - name: envoy.router

ainm toscaire.http_connection_manager is scagaire ionsuite i Seachfhreastalaí Toscaire. I measc na scagairí eile Redis, Mhongó, TCP. Is féidir leat teacht ar an liosta iomlán ag doiciméadú.

Chun tuilleadh eolais a fháil faoi bheartais eile um chothromú ualaigh, tabhair cuairt ar Doiciméadú Toscaire.

Céim 5 - Proxy agus Cumraíocht In aghaidh an tSrutha

In NGINX, sainmhíníonn an chumraíocht in aghaidh an tsrutha sraith de fhreastalaithe sprice a phróiseálfaidh trácht. Sa chás seo, sannadh dhá bhraisle.

  upstream targetCluster {
    172.18.0.3:80;
    172.18.0.4:80;
  }

In Toscaire, déantar é seo a bhainistiú ag cnuasaigh.

Braislí Toscaire

Sainmhínítear an choibhéis in aghaidh an tsrutha mar bhraislí. Sa chás seo, sainaithníodh na hóstach a dhéanfaidh freastal ar an trácht. Sainmhínítear an bealach a ndéantar rochtain ar óstach, mar am istigh, mar chumraíocht bhraisle. Ligeann sé seo do smacht níos gráinneach ar ghnéithe mar latency agus cothromú ualaigh.

Copy to Editor  clusters:
  - name: targetCluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [
      { socket_address: { address: 172.18.0.3, port_value: 80 }},
      { socket_address: { address: 172.18.0.4, port_value: 80 }}
    ]

Agus tú ag úsáid fionnachtain seirbhíse STRICT_DNS Déanfaidh an Toscaire na spriocanna DNS sonraithe a réiteach go leanúnach agus go neamhshioncronach. Measfar gach seoladh IP a sheoltar ar ais ón toradh DNS mar óstach sainráite sa bhraisle in aghaidh an tsrutha. Ciallaíonn sé seo má thugann iarratas ar ais dhá sheoladh IP, glacfaidh Toscaire leis go bhfuil dhá óstach sa bhraisle, agus ní mór an dá cheann a bheith cothromaithe ó thaobh ualach. Má bhaintear óstach ón toradh, glacfaidh an Toscaire leis nach bhfuil sé ann a thuilleadh agus tarraingeoidh sé trácht ó aon linnte ceangail atá ann cheana féin.

Le haghaidh tuilleadh faisnéise féach Doiciméadú seachfhreastalaí Toscaire.

Céim 6 - Logáil Rochtain agus Earráidí

Is é an chumraíocht deiridh ná clárú. In ionad logaí earráide a bhrú ar dhiosca, glacann Toscaire Proxy cur chuige scamall-bhunaithe. Aschuirtear gach loga feidhmchlár go stdout и stderr.

Nuair a dhéanann úsáideoirí iarratas, tá logaí rochtana roghnach agus díchumasaithe de réir réamhshocraithe. Chun logaí rochtana d'iarratais HTTP a chumasú, cumasaigh an chumraíocht rochtain_log don bhainisteoir nasc HTTP. Is féidir leis an cosán a bheith ceachtar gléas den sórt sin mar stdout, nó comhad ar diosca, ag brath ar do riachtanais.

Déanfaidh an chumraíocht seo a leanas na logaí rochtana go léir a atreorú chuig stdout (nóta an aistritheora - teastaíonn stdout chun toscaire a úsáid taobh istigh den docker. Má úsáidtear é gan docker, ansin cuir an cosán chuig logchomhad rialta in ionad /dev/stdout). Cóipeáil an bhlúire chuig an rannán cumraíochta don bhainisteoir ceangail:

Copy to Clipboardaccess_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"

Ba cheart go mbeadh cuma mar seo ar na torthaí:

      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          access_log:
          - name: envoy.file_access_log
            config:
              path: "/dev/stdout"
          route_config:

De réir réamhshocraithe, tá teaghrán formáide ag Toscaire a chuimsíonn sonraí an iarratais HTTP:

[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"n

Is é toradh na teaghrán formáide seo ná:

[2018-11-23T04:51:00.281Z] "GET / HTTP/1.1" 200 - 0 58 4 1 "-" "curl/7.47.0" "f21ebd42-6770-4aa5-88d4-e56118165a7d" "one.example.com" "172.18.0.4:80"

Is féidir an t-ábhar aschuir a shaincheapadh tríd an réimse formáide a shocrú. Mar shampla:

access_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"
    format: "[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"n"

Is féidir an líne logála a aschur freisin i bhformáid JSON tríd an réimse a shocrú json_form. Mar shampla:

access_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"
    json_format: {"protocol": "%PROTOCOL%", "duration": "%DURATION%", "request_method": "%REQ(:METHOD)%"}

Chun tuilleadh eolais a fháil ar an Modheolaíocht um Chlárú Toscaire, tabhair cuairt ar

https://www.envoyproxy.io/docs/envoy/latest/configuration/access_log#config-access-log-format-dictionaries

Ní hé an logáil an t-aon bhealach chun léargas a fháil ar oibriú le Toscaire Proxy. Tá ardchumas rianaithe agus méadrachta ionsuite ann. Is féidir leat tuilleadh eolais a fháil ag doiciméid rianaithe nó trí Script rianaithe idirghníomhach.

Céim 7 - Seoladh

Tá do chumraíocht aistrithe anois agat ó NGINX go Seachfhreastalaí Toscaire. Is í an chéim dheireanach ná sampla Toscaire Proxy a sheoladh chun é a thástáil.

Rith mar úsáideoir

Ag barr na líne cumraíochta NGINX úsáideoir www; sonraítear NGINX a rith mar úsáideoir ísealphribhléid chun slándáil a fheabhsú.

Glacann Toscaire Proxy cur chuige scamall-bhunaithe chun bainistiú a dhéanamh ar cé leis an bpróiseas. Nuair a rithimid Toscaire Proxy trí choimeádán, is féidir linn úsáideoir ísealphribhléid a shonrú.

Ag Seoladh Seachfhreastalaí Toscaire

Rithfidh an t-ordú thíos Toscaire Proxy trí choimeádán Docker ar an ósta. Tugann an t-ordú seo an cumas don Toscaire éisteacht le hiarratais isteach ar phort 80. Mar sin féin, mar atá sonraithe i gcumraíocht an éisteoir, éisteann Toscaire Proxy le haghaidh tráchta ag teacht isteach ar phort 8080. Ligeann sé seo don phróiseas rith mar úsáideoir ísealphribhléid.

docker run --name proxy1 -p 80:8080 --user 1000:1000 -v /root/envoy.yaml:/etc/envoy/envoy.yaml envoyproxy/envoy

Tástáil

Agus an seachfhreastalaí á rith, is féidir tástálacha a dhéanamh agus a phróiseáil anois. Eisíonn an t-ordú cURL seo a leanas iarratas leis an gceanntásc ósta atá sainmhínithe sa chumraíocht seachfhreastalaí.

curl -H "Host: one.example.com" localhost -i

Beidh earráid mar thoradh ar an iarratas HTTP 503. Tá sé seo amhlaidh toisc nach bhfuil naisc in aghaidh an tsrutha ag obair agus nach bhfuil siad ar fáil. Mar sin, níl aon cheann scríbe ar fáil don iarratas ag Toscaire Proxy. Tosóidh an t-ordú seo a leanas sraith seirbhísí HTTP a mheaitseálann an chumraíocht atá sainithe don Toscaire.

docker run -d katacoda/docker-http-server; docker run -d katacoda/docker-http-server;

Leis na seirbhísí atá ar fáil, is féidir leis an Toscaire trácht seachfhreastalaí chuig a cheann scríbe.

curl -H "Host: one.example.com" localhost -i

Ba cheart duit freagra a fheiceáil a thabharfadh le fios cén coimeádán Docker a phróiseáil an t-iarratas. I logaí an tSeachfhreastalaí Toscaire ba cheart duit aschur teaghrán rochtana a fheiceáil freisin.

Ceanntásca Freagartha HTTP Breise

Feicfidh tú ceanntásca HTTP breise i gceanntásca freagartha an iarratais iarbhír. Taispeánann an ceanntásc an t-am a chaith an t-óstach réamhtheachtacha ag próiseáil an iarratais. Léirithe i milleasoicindí. Tá sé seo úsáideach más mian leis an gcliant am seirbhíse a chinneadh i gcomparáid le latency líonra.

x-envoy-upstream-service-time: 0
server: envoy

Cumraíocht deiridh

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
                - "one.example.com"
                - "www.one.example.com"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: targetCluster
          http_filters:
          - name: envoy.router
          clusters:
  - name: targetCluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [
      { socket_address: { address: 172.18.0.3, port_value: 80 }},
      { socket_address: { address: 172.18.0.4, port_value: 80 }}
    ]

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9090 }

Eolas breise ón aistritheoir

Is féidir treoracha chun Proxy Toscaire a shuiteáil ar an suíomh Gréasáin https://www.getenvoy.io/

De réir réamhshocraithe, níl cumraíocht seirbhíse systemd ag rpm.

Cuir cumraíocht seirbhíse systemd leis /etc/systemd/system/envoy.service:

[Unit]
Description=Envoy Proxy
Documentation=https://www.envoyproxy.io/
After=network-online.target
Requires=envoy-auth-server.service
Wants=nginx.service

[Service]
User=root
Restart=on-failure
ExecStart=/usr/bin/envoy --config-path /etc/envoy/config.yaml
[Install]
WantedBy=multi-user.target

Ní mór duit eolaire /etc/envoy/ a chruthú agus an config config.yaml a chur ann.

Tá comhrá teileagram ann ag baint úsáide as seachfhreastalaí toscaire: https://t.me/envoyproxy_ru

Ní thacaíonn Toscaire Proxy le freastal ar ábhar statach. Mar sin, cé atá in ann vótáil don ghné: https://github.com/envoyproxy/envoy/issues/378

Ní féidir ach le húsáideoirí cláraithe páirt a ghlacadh sa suirbhé. Sínigh isteach, le do thoil.

Ar spreag an postáil seo tú chun seachfhreastalaí toscaire a shuiteáil agus a thástáil?

  • yes

  • aon

Vótáil 75 úsáideoir. Staon 18 úsáideoir.

Foinse: will.com

Add a comment