Nginx සිට Envoy Proxy වෙත සංක්‍රමණය වීම

හෙලෝ, හබ්ර්! ලිපියේ පරිවර්තනයක් මම ඔබේ අවධානයට යොමු කරමි: Nginx සිට Envoy Proxy වෙත සංක්‍රමණය වීම.

Envoy යනු තනි සේවා සහ යෙදුම් සඳහා නිර්මාණය කර ඇති ඉහළ කාර්ය සාධනයක් සහිත බෙදාහැරීමේ ප්‍රොක්සි සේවාදායකයකි (C++ වලින් ලියා ඇත), එය සන්නිවේදන බස් රථයක් සහ විශාල ක්ෂුද්‍ර සේවා “සේවා දැල්” ගෘහ නිර්මාණ ශිල්පය සඳහා නිර්මාණය කර ඇති “විශ්වීය දත්ත තලය” ද වේ. එය නිර්මාණය කිරීමේදී, NGINX, HAProxy, Hardware load balancers සහ cloud load balancers වැනි සර්වර් සංවර්ධනය කිරීමේදී ඇති වූ ගැටළු සඳහා විසඳුම් සැලකිල්ලට ගන්නා ලදී. එන්වොයි එක් එක් යෙදුම සමඟ ක්‍රියා කරන අතර වේදිකාව නොසලකා පොදු ක්‍රියාකාරිත්වය සැපයීම සඳහා ජාලය සාරාංශ කරයි. යටිතල ව්‍යූහයක සියලුම සේවා ගමනාගමනය එන්වෝයි දැල හරහා ගලා යන විට, ගැටළු සහිත ප්‍රදේශ ස්ථාවර නිරීක්ෂණ හැකියාව, සුසර කිරීම, සහ නිශ්චිත ස්ථානයක මූලික ක්‍රියාකාරීත්වය එක් කිරීම පහසු වේ.

විශේෂාංග

  • ක්‍රියාවලියෙන් බැහැර ගෘහ නිර්මාණ ශිල්පය: එන්වොයි යනු කුඩා RAM ප්‍රමාණයක් ගන්නා ස්වයං අන්තර්ගත, ඉහළ කාර්ය සාධන සේවාදායකයකි. එය ඕනෑම යෙදුම් භාෂාවක් හෝ රාමුවක් සමඟ ඒකාබද්ධව ක්‍රියා කරයි.
  • http/2 සහ grpc සහාය: එන්වොයිට පළමු පන්තියේ http/2 සහ එන සහ පිටතට යන සම්බන්ධතා සඳහා grpc සහාය ඇත. මෙය http/1.1 සිට http/2 දක්වා විනිවිද පෙනෙන ප්‍රොක්සියකි.
  • උසස් පැටවුම් තුලනය: ස්වයංක්‍රීය නැවත උත්සාහ කිරීම්, දාම කැඩීම, ගෝලීය අනුපාත සීමා කිරීම, ඉල්ලීම් සෙවනැලි, දේශීය කලාප භාර සමතුලිත කිරීම යනාදිය ඇතුළුව උසස් බර සමතුලිත කිරීමේ විශේෂාංග සඳහා නියෝජිතයා සහාය දක්වයි.
  • වින්‍යාස කළමනාකරණ API: නියෝජිතයා ඔබේ වින්‍යාසය ගතිකව කළමනාකරණය කිරීම සඳහා ශක්තිමත් API සපයයි.
  • නිරීක්ෂණ හැකියාව: L7 ගමනාගමනය පිළිබඳ ගැඹුරු නිරීක්ෂණ හැකියාව, mongodb, dynamodb සහ වෙනත් බොහෝ යෙදුම්වල බෙදාහැරීම සහ නිරීක්ෂණ සඳහා දේශීය සහාය.

පියවර 1 — උදාහරණය NGINX Config

මෙම ස්ක්‍රිප්ටය විශේෂයෙන් සකස් කරන ලද ගොනුවක් භාවිතා කරයි nginx.conf, සම්පූර්ණ උදාහරණය මත පදනම්ව NGINX විකි. විවෘත කිරීමෙන් ඔබට සංස්කාරකයේ වින්‍යාසය නැරඹිය හැකිය nginx.conf

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;
    }
  }
}

NGINX වින්‍යාසය සාමාන්‍යයෙන් ප්‍රධාන අංග තුනක් ඇත:

  1. NGINX සේවාදායකය, ලොග් ව්‍යුහය සහ Gzip ක්‍රියාකාරීත්වය වින්‍යාස කිරීම. මෙය සෑම අවස්ථාවකදීම ගෝලීය වශයෙන් අර්ථ දක්වා ඇත.
  2. සත්කාරක වෙත ඉල්ලීම් පිළිගැනීමට NGINX වින්‍යාස කිරීම one.example.com වරාය 8080 මත.
  3. ඉලක්ක ස්ථානය සැකසීම, URL හි විවිධ කොටස් සඳහා ගමනාගමනය හැසිරවිය යුතු ආකාරය.

සියලුම වින්‍යාස කිරීම් එන්වෝයි ප්‍රොක්සි සඳහා අදාළ නොවන අතර ඔබට සමහර සැකසුම් වින්‍යාස කිරීමට අවශ්‍ය නොවේ. Envoy Proxy සතුව ඇත ප්රධාන වර්ග හතරක්NGINX විසින් පිරිනමනු ලබන මූලික යටිතල පහසුකම් සඳහා සහය වන. හරය වන්නේ:

  • සවන්දෙන්නන්: Envoy Proxy පැමිණෙන ඉල්ලීම් පිළිගන්නේ කෙසේද යන්න ඔවුන් තීරණය කරයි. Envoy Proxy දැනට සහාය දක්වන්නේ TCP මත පදනම් වූ සවන්දෙන්නන්ට පමණි. සම්බන්ධතාවයක් ස්ථාපිත වූ පසු, එය සැකසීම සඳහා පෙරහන් කට්ටලයකට යවනු ලැබේ.
  • පෙරහන්: ඒවා පැමිණෙන සහ පිටතට යන දත්ත සැකසීමට හැකි නල මාර්ග ගෘහ නිර්මාණ ශිල්පයේ කොටසකි. මෙම ක්‍රියාකාරීත්වයට Gzip වැනි පෙරහන් ඇතුළත් වේ, එය සේවාදායකයා වෙත යැවීමට පෙර දත්ත සම්පීඩනය කරයි.
  • රවුටර: ඔවුන් පොකුරක් ලෙස අර්ථ දක්වා ඇති අවශ්‍ය ගමනාන්තයට ගමනාගමනය යොමු කරයි.
  • පොකුරු: ඔවුන් ගමනාගමනය සහ වින්‍යාස පරාමිතීන් සඳහා අවසාන ලක්ෂ්‍යය නිර්වචනය කරයි.

නිශ්චිත NGINX වින්‍යාසයකට ගැළපෙන පරිදි Envoy Proxy වින්‍යාසයක් සෑදීමට අපි මෙම සංරචක හතර භාවිතා කරමු. එන්වෝයිගේ ඉලක්කය වන්නේ API සහ ගතික වින්‍යාසය සමඟ වැඩ කිරීමයි. මෙම අවස්ථාවේදී, මූලික වින්‍යාසය NGINX වෙතින් ස්ථිතික, දෘඪ-කේතගත සැකසුම් භාවිතා කරනු ඇත.

පියවර 2 - NGINX වින්‍යාසය

පළමු කොටස nginx.conf වින්‍යාස කළ යුතු සමහර NGINX අභ්‍යන්තරයන් නිර්වචනය කරයි.

සේවක සම්බන්ධතා

පහත වින්‍යාසය සේවක ක්‍රියාවලි සහ සම්බන්ධතා ගණන තීරණය කරයි. ඉල්ලුම සපුරාලීමට NGINX පරිමාණය කරන ආකාරය මෙයින් පෙන්නුම් කරයි.

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy විවිධ ආකාරවලින් කාර්ය ප්‍රවාහ සහ සම්බන්ධතා කළමනාකරණය කරයි.

එන්වෝයි පද්ධතියේ සෑම දෘඪාංග නූල් සඳහාම සේවක නූල් නිර්මාණය කරයි. සෑම සේවක නූල් එකක්ම වගකිව යුතු අවහිර නොවන සිදුවීම් පුඩුවක් ක්‍රියාත්මක කරයි

  1. එක් එක් සවන්දෙන්නන්ට සවන් දීම
  2. නව සම්බන්ධතා පිළිගැනීම
  3. සම්බන්ධතාවයක් සඳහා පෙරහන් කට්ටලයක් නිර්මාණය කිරීම
  4. සම්බන්ධතාවයේ ජීවිත කාලය තුළ සියලුම I/O මෙහෙයුම් සකසන්න.

ඕනෑම ඉදිරියට යැවීමේ හැසිරීම් ඇතුළුව සියලුම වැඩිදුර සම්බන්ධතා සැකසුම් සම්පූර්ණයෙන්ම සේවක නූල් තුළ හසුරුවනු ලැබේ.

එන්වෝයි හි එක් එක් සේවක නූල් සඳහා, සම්බන්ධතා සංචිතයක් ඇත. එබැවින් HTTP/2 සම්බන්ධතා සංචිත එක් වරකට එක් බාහිර සත්කාරකයකට එක් සම්බන්ධතාවයක් පමණක් ස්ථාපිත කරයි, සේවක නූල් හතරක් තිබේ නම්, ස්ථාවර තත්වයක බාහිර සත්කාරක එකකට HTTP/2 සම්බන්ධතා හතරක් ඇත. සෑම දෙයක්ම තනි කම්කරු ත්‍රෙඩ් එකක තබා ගැනීමෙන්, සියලුම කේතයන් වාගේ බ්ලොක් නොකර තනි නූල් එකක් මෙන් ලිවිය හැකිය. අවශ්‍ය ප්‍රමාණයට වඩා කම්කරු ත්‍රෙඩ් ප්‍රමාණයක් වෙන් කළ හොත්, මෙය මතකය අපතේ යාම, අක්‍රිය සම්බන්ධතා විශාල ප්‍රමාණයක් නිර්මාණය කිරීම සහ නැවත සංචිතයට නැවත පැමිණෙන සම්බන්ධතා සංඛ්‍යාව අඩු කිරීම සඳහා හේතු විය හැක.

වැඩි විස්තර සඳහා පිවිසෙන්න Envoy Proxy බ්ලොගය.

HTTP වින්‍යාසය

පහත NGINX වින්‍යාස කොටස HTTP සැකසුම් නිර්වචනය කරයි:

  • කුමන mime වර්ග සඳහා සහය දක්වයි
  • පෙරනිමි කල් ඉකුත්වීම්
  • Gzip වින්‍යාසය

Envoy Proxy හි පෙරහන් භාවිතයෙන් ඔබට මෙම අංග අභිරුචිකරණය කළ හැකිය, එය අපි පසුව සාකච්ඡා කරමු.

පියවර 3 - සේවාදායක වින්‍යාසය

HTTP වින්‍යාස කොටසෙහි, NGINX වින්‍යාසය 8080 වරායට සවන් දීමට සහ වසම් සඳහා එන ඉල්ලීම්වලට ප්‍රතිචාර දැක්වීමට නියම කරයි. one.example.com и www.one.example.com.

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

එන්වෝයි ඇතුලත, එය පාලනය කරනු ලබන්නේ සවන්දෙන්නන් විසිනි.

අසන්නන් දූතයෝ

Envoy Proxy සමඟ ආරම්භ කිරීමේ වැදගත්ම අංගය වන්නේ ඔබේ සවන්දෙන්නන් නිර්වචනය කිරීමයි. ඔබට එන්වෝයි අවස්ථාව ධාවනය කිරීමට අවශ්‍ය ආකාරය විස්තර කරන වින්‍යාස ගොනුවක් සෑදිය යුතුය.

පහත ස්නිපටය නව සවන්දෙන්නෙකු සාදා එය 8080 තොටට බඳිනු ඇත. එන ඉල්ලීම් සඳහා එය බැඳිය යුතු වරායන් මොනවාදැයි වින්‍යාසය එන්වෝයි ප්‍රොක්සියට කියයි.

Envoy Proxy එහි වින්‍යාසය සඳහා YAML අංකනය භාවිතා කරයි. මෙම අංකනය සඳහා හැඳින්වීමක් සඳහා, මෙහි බලන්න සබැඳිය.

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

නිර්වචනය කිරීමට අවශ්ය නැත සේවාදායක නම, Envoy Proxy පෙරහන් මෙය හසුරුවන බැවින්.

පියවර 4 - ස්ථාන වින්‍යාසය

ඉල්ලීමක් NGINX වෙත පැමිණි විට, ස්ථාන අවහිර කිරීම සකසන ආකාරය සහ ගමනාගමනය කොතැනට යා යුතුද යන්න තීරණය කරයි. පහත ඛණ්ඩනය තුළ, වෙබ් අඩවිය වෙත වන සියලුම ගමනාගමනය උඩු ගංවතුර (පරිවර්තකයාගේ සටහන: upstream යනු සාමාන්‍යයෙන් යෙදුම් සේවාදායකයකි) නම් කරන ලද පොකුරකට මාරු කරනු ලැබේ ඉලක්ක පොකුර. upstream cluster මගින් ඉල්ලීම ක්‍රියාවට නැංවිය යුතු නෝඩ් නිර්වචනය කරයි. අපි මේ ගැන ඊළඟ පියවරේදී සාකච්ඡා කරමු.

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

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

එන්වෝයිහිදී, පෙරහන් මෙය කරයි.

එන්වෝයි ෆිල්ටර්

ස්ථිතික වින්‍යාසයක් සඳහා, එන ඉල්ලීම් සකසන ආකාරය පෙරහන් තීරණය කරයි. මෙම අවස්ථාවේදී අපි ගැලපෙන පෙරහන් සකස් කරමු සේවාදායක_නම් පෙර පියවරේදී. ඇතැම් වසම් සහ මාර්ගවලට ගැළපෙන එන ඉල්ලීම් පැමිණි විට, ගමනාගමනය පොකුරට යොමු කෙරේ. මෙය 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

නම තානාපති.http_connection_manager යනු එන්වෝයි ප්‍රොක්සියේ ඇති ෆිල්ටරයකි. අනෙකුත් පෙරහන් ඇතුළත් වේ Redis, මොන්ගෝ, TCP. ඔබට සම්පූර්ණ ලැයිස්තුව සොයාගත හැකිය ලියකියවිලි.

වෙනත් බර තුලනය කිරීමේ ප්‍රතිපත්ති පිළිබඳ වැඩි විස්තර සඳහා, පිවිසෙන්න තානාපති ලේඛන.

පියවර 5 - Proxy සහ Upstream Configuration

NGINX හි, උඩුගත වින්‍යාසය ගමනාගමනය සකසන ඉලක්ක සේවාදායක කට්ටලයක් නිර්වචනය කරයි. මෙම අවස්ථාවේ දී, පොකුරු දෙකක් පවරා ඇත.

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

එන්වෝයි හි මෙය කළමනාකරණය කරනු ලබන්නේ පොකුරු මගිනි.

එන්වෝයි පොකුරු

උඩු ගංවතුර සමානය පොකුරු ලෙස අර්ථ දැක්වේ. මෙම අවස්ථාවේදී, ගමනාගමනයට සේවය කරන ධාරක හඳුනාගෙන ඇත. කල් ඉකුත්වීම් වැනි සත්කාරක වෙත ප්‍රවේශ වන ආකාරය පොකුරු වින්‍යාසයක් ලෙස අර්ථ දැක්වේ. මෙය ප්‍රමාදය සහ බර සමතුලිත කිරීම වැනි අංශ කෙරෙහි වඩාත් කැටිති පාලනයට ඉඩ සලසයි.

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 }}
    ]

සේවා සොයාගැනීම භාවිතා කරන විට STRICT_DNS නියෝජිතයා විසින් නිශ්චිත DNS ඉලක්ක අඛණ්ඩව සහ අසමමිතිකව විසඳනු ඇත. DNS ප්‍රතිඵලයෙන් ලැබෙන සෑම IP ලිපිනයක්ම upstream cluster හි පැහැදිලි ධාරකයක් ලෙස සලකනු ලැබේ. මෙයින් අදහස් කරන්නේ ඉල්ලීමක් IP ලිපින දෙකක් ආපසු ලබා දෙන්නේ නම්, එන්වෝයි පොකුරේ ධාරක දෙකක් ඇති බව උපකල්පනය කරයි, සහ දෙකම පැටවීම සමතුලිත විය යුතුය. ප්‍රතිඵලයෙන් ධාරකයක් ඉවත් කළහොත්, එය තවදුරටත් නොපවතින බව එන්වෝයි උපකල්පනය කරන අතර පවතින සම්බන්ධතා සංචිතවලින් ගමනාගමනය ඇද ගනු ඇත.

වැඩි විස්තර සඳහා බලන්න නියෝජිත ප්‍රොක්සි ලියකියවිලි.

පියවර 6 - ලොග් ප්රවේශය සහ දෝෂ

අවසාන වින්යාසය ලියාපදිංචි වේ. දෝෂ ලොග තැටියට තල්ලු කරනවා වෙනුවට, එන්වෝයි ප්‍රොක්සි වලාකුළු මත පදනම් වූ ප්‍රවේශයක් ගනී. සියලුම යෙදුම් ලොග ප්‍රතිදානය කර ඇත stdout и stderr.

පරිශීලකයන් ඉල්ලීමක් කරන විට, ප්‍රවේශ ලොග විකල්ප වන අතර පෙරනිමියෙන් අක්‍රිය වේ. HTTP ඉල්ලීම් සඳහා ප්‍රවේශ ලොග සක්‍රීය කිරීමට, වින්‍යාසය සක්‍රීය කරන්න ප්‍රවේශ_ලොගය HTTP සම්බන්ධතා කළමනාකරු සඳහා. මාර්ගය වැනි උපකරණයක් විය හැකිය stdout, හෝ තැටියේ ඇති ගොනුවක්, ඔබගේ අවශ්‍යතා මත පදනම්ව.

පහත වින්‍යාසය සියලුම ප්‍රවේශ ලොග නැවත හරවා යවනු ඇත stdout (පරිවර්තක සටහන - ඩොකර් ඇතුළත එන්වෝයි භාවිතා කිරීමට stdout අවශ්‍ය වේ. ඩොකර් නොමැතිව භාවිතා කරන්නේ නම්, සාමාන්‍ය ලොග් ගොනුවකට යන මාර්ගය සමඟ /dev/stdout ප්‍රතිස්ථාපනය කරන්න). සම්බන්ධතා කළමනාකරු සඳහා වින්‍යාස කොටස වෙත ස්නිපට් පිටපත් කරන්න:

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

ප්‍රතිඵල මෙසේ විය යුතුය:

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

පෙරනිමියෙන්, එන්වෝයි සතුව 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

මෙම ආකෘති තන්තුවේ ප්‍රතිඵලය වන්නේ:

[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"

ආකෘති ක්ෂේත්‍රය සැකසීමෙන් ප්‍රතිදාන අන්තර්ගතය අභිරුචිකරණය කළ හැකිය. උදාහරණ වශයෙන්:

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"

ක්ෂේත්‍රය සැකසීමෙන් ලොග් රේඛාව JSON ආකෘතියෙන් ප්‍රතිදානය කළ හැක json_format. උදාහරණයක් ලෙස:

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

තානාපති ලියාපදිංචි කිරීමේ ක්‍රමවේදය පිළිබඳ වැඩි විස්තර සඳහා, පිවිසෙන්න

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

Envoy Proxy සමඟ වැඩ කිරීම පිළිබඳ අවබෝධයක් ලබා ගැනීමට ඇති එකම මාර්ගය ලොග් වීම නොවේ. එය තුළ ගොඩනගා ඇති උසස් ලුහුබැඳීමේ සහ ප්‍රමිතික හැකියාවන් ඇත. ඔබට වැඩි විස්තර සොයා ගත හැක ලේඛන සොයා ගැනීම හෝ හරහා අන්තර්ක්‍රියාකාරී ලුහුබැඳීමේ පිටපත.

පියවර 7 - දියත් කිරීම

ඔබ දැන් ඔබේ වින්‍යාසය NGINX සිට Envoy Proxy වෙත සංක්‍රමණය කර ඇත. අවසාන පියවර වන්නේ එය පරීක්ෂා කිරීම සඳහා Envoy Proxy අවස්ථාවක් දියත් කිරීමයි.

පරිශීලකයෙකු ලෙස ධාවනය කරන්න

NGINX වින්‍යාස රේඛාවේ මුදුනේ පරිශීලක www www; ආරක්ෂාව වැඩි දියුණු කිරීම සඳහා අඩු වරප්‍රසාද ලත් පරිශීලකයෙකු ලෙස NGINX ධාවනය කිරීමට නියම කරයි.

Envoy Proxy ක්‍රියාවලියක් අයිති කාටද යන්න කළමනාකරණය කිරීමට වලාකුළු මත පදනම් වූ ප්‍රවේශයක් ගනී. අපි කන්ටේනරයක් හරහා Envoy Proxy ධාවනය කරන විට, අපට අඩු වරප්‍රසාද ලත් පරිශීලකයෙකු සඳහන් කළ හැක.

එන්වෝයි ප්‍රොක්සි දියත් කිරීම

පහත විධානය මඟින් ධාරකයේ ඩොකර් කන්ටේනරයක් හරහා Envoy Proxy ධාවනය කරනු ඇත. මෙම විධානය මඟින් 80 වරායේ එන ඉල්ලීම් සඳහා සවන්දීමේ හැකියාව එන්වෝයිට ලබා දේ. කෙසේ වෙතත්, ශ්‍රාවක වින්‍යාසයේ දක්වා ඇති පරිදි, එන්වෝයි ප්‍රොක්සි 8080 වරායේ එන ගමනාගමනයට සවන් දෙයි. මෙම ක්‍රියාවලිය අඩු වරප්‍රසාද සහිත පරිශීලකයෙකු ලෙස ක්‍රියාත්මක වීමට ඉඩ සලසයි.

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

පරීක්ෂා කිරීම

ප්‍රොක්සි ධාවනය සමඟින්, දැන් පරීක්ෂණ සිදු කර සැකසීමට හැකිය. පහත cURL විධානය ප්‍රොක්සි වින්‍යාසය තුළ අර්ථ දක්වා ඇති සත්කාරක ශීර්ෂය සමඟ ඉල්ලීමක් නිකුත් කරයි.

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

HTTP ඉල්ලීම දෝෂයක් ඇති කරයි 503. මෙයට හේතුව upstream connections ක්‍රියා නොකිරීම සහ ඒවා ලබා ගත නොහැකි වීමයි. එබැවින්, එන්වෝයි ප්‍රොක්සියට ඉල්ලීම සඳහා ගමනාන්ත නොමැත. පහත විධානය එන්වෝයි සඳහා අර්ථ දක්වා ඇති වින්‍යාසයට ගැලපෙන HTTP සේවා මාලාවක් ආරම්භ කරයි.

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

පවතින සේවාවන් සමඟින්, එන්වෝයි හට එහි ගමනාන්තයට ගමනාගමනය සාර්ථකව ප්‍රොක්සි කළ හැක.

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

ඉල්ලීම සකස් කළේ කුමන ඩොකර් කන්ටේනරයද යන්න දැක්වෙන ප්‍රතිචාරයක් ඔබ දැකිය යුතුය. එන්වෝයි ප්‍රොක්සි ලොග තුළ ඔබ ප්‍රවේශ තන්තු ප්‍රතිදානයක් ද දැකිය යුතුය.

අතිරේක HTTP ප්‍රතිචාර ශීර්ෂ

සත්‍ය ඉල්ලීමේ ප්‍රතිචාර ශීර්ෂවල ඔබට අතිරේක HTTP ශීර්ෂයන් පෙනෙනු ඇත. ශීර්ෂය මඟින් උඩුගං ධාරකය ඉල්ලීම සැකසීමට ගත කළ කාලය පෙන්වයි. මිලි තත්පර වලින් ප්‍රකාශ වේ. ජාල ප්‍රමාදයට සාපේක්ෂව සේවා කාලය තීරණය කිරීමට සේවාලාභියාට අවශ්‍ය නම් මෙය ප්‍රයෝජනවත් වේ.

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

අවසාන වින්යාසය

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 }

පරිවර්තකගෙන් අමතර තොරතුරු

Envoy Proxy ස්ථාපනය කිරීම සඳහා උපදෙස් වෙබ් අඩවියෙන් සොයාගත හැකිය https://www.getenvoy.io/

පෙරනිමියෙන්, rpm හි systemd සේවා වින්‍යාසයක් නොමැත.

systemd සේවා config /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

ඔබට බහලුම /etc/envoy/ සාදා එහි config.yaml config එක තැබිය යුතුය.

එන්වෝයි ප්‍රොක්සි භාවිතයෙන් විදුලි පණිවුඩ කතාබස් ඇත: https://t.me/envoyproxy_ru

එන්වෝයි ප්‍රොක්සි ස්ථිතික අන්තර්ගතයන් සැපයීමට සහාය නොදක්වයි. එබැවින්, විශේෂාංගය සඳහා ඡන්දය දිය හැක්කේ කාටද: https://github.com/envoyproxy/envoy/issues/378

සමීක්ෂණයට සහභාගී විය හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණි. පුරන්නකරුණාකර.

මෙම සටහන ඔබව නියෝජිත ප්‍රොක්සි ස්ථාපනය කිරීමට සහ පරීක්ෂා කිරීමට දිරිමත් කළේද?

  • ඔව්

  • කිසිදු

පරිශීලකයින් 75 දෙනෙක් ඡන්දය දුන්හ. පරිශීලකයින් 18 දෙනෙක් ඡන්දය දීමෙන් වැළකී සිටියහ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න