การย้ายจาก Nginx ไปยัง Envoy Proxy

สวัสดีฮับ! ฉันแจ้งให้คุณทราบถึงคำแปลของโพสต์: การย้ายจาก Nginx ไปยัง Envoy Proxy.

Envoy เป็นพร็อกซีเซิร์ฟเวอร์แบบกระจายประสิทธิภาพสูง (เขียนด้วยภาษา C++) ออกแบบมาสำหรับบริการและแอปพลิเคชันแต่ละรายการ อีกทั้งยังเป็นบัสการสื่อสารและ “ระนาบข้อมูลสากล” ที่ออกแบบมาสำหรับสถาปัตยกรรม “service mesh” ไมโครเซอร์วิสขนาดใหญ่ เมื่อสร้างมันขึ้นมา จะต้องคำนึงถึงวิธีแก้ไขปัญหาที่เกิดขึ้นระหว่างการพัฒนาเซิร์ฟเวอร์ เช่น NGINX, HAProxy, โหลดบาลานเซอร์ของฮาร์ดแวร์ และโหลดบาลานเซอร์บนคลาวด์ Envoy ทำงานร่วมกับแต่ละแอปพลิเคชันและสรุปเครือข่ายเพื่อมอบฟังก์ชันการทำงานทั่วไปโดยไม่คำนึงถึงแพลตฟอร์ม เมื่อการรับส่งข้อมูลบริการทั้งหมดในโครงสร้างพื้นฐานไหลผ่านตาข่าย Envoy จะกลายเป็นเรื่องง่ายที่จะแสดงภาพพื้นที่ปัญหาพร้อมความสามารถในการสังเกตที่สม่ำเสมอ ปรับแต่งประสิทธิภาพโดยรวม และเพิ่มฟังก์ชันการทำงานหลักในตำแหน่งเฉพาะ

ความสามารถในการ

  • สถาปัตยกรรมที่อยู่นอกกระบวนการ: envoy เป็นเซิร์ฟเวอร์ประสิทธิภาพสูงและครบวงจรซึ่งใช้ RAM จำนวนเล็กน้อย ทำงานร่วมกับภาษาหรือกรอบงานของแอปพลิเคชันใดๆ
  • รองรับ http/2 และ grpc: ทูตมีการสนับสนุน http/2 และ grpc ระดับเฟิร์สคลาสสำหรับการเชื่อมต่อขาเข้าและขาออก นี่คือพร็อกซีแบบโปร่งใสตั้งแต่ http/1.1 ถึง http/2
  • การปรับสมดุลโหลดขั้นสูง: ทูตรองรับคุณสมบัติการปรับสมดุลโหลดขั้นสูง รวมถึงการลองใหม่อัตโนมัติ, การแยกลูกโซ่, การจำกัดอัตราทั่วโลก, การแชโดว์คำขอ, การปรับสมดุลโหลดโซนท้องถิ่น ฯลฯ
  • API การจัดการการกำหนดค่า: ทูตมอบ API ที่มีประสิทธิภาพสำหรับการจัดการการกำหนดค่าของคุณแบบไดนามิก
  • ความสามารถในการสังเกต: ความสามารถในการสังเกตเชิงลึกของการรับส่งข้อมูล L7, การสนับสนุนดั้งเดิมสำหรับการติดตามแบบกระจายและการสังเกตของ mongodb, dynamodb และแอปพลิเคชันอื่น ๆ อีกมากมาย

ขั้นตอนที่ 1 — ตัวอย่างการกำหนดค่า NGINX

สคริปต์นี้ใช้ไฟล์ที่สร้างขึ้นเป็นพิเศษ 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 รองรับเฉพาะ Listener ที่ใช้ TCP เท่านั้น เมื่อสร้างการเชื่อมต่อแล้ว การเชื่อมต่อจะถูกส่งไปยังชุดตัวกรองสำหรับการประมวลผล
  • ตัวกรอง: เป็นส่วนหนึ่งของสถาปัตยกรรมไปป์ไลน์ที่สามารถประมวลผลข้อมูลขาเข้าและขาออก ฟังก์ชันนี้ประกอบด้วยตัวกรอง เช่น Gzip ซึ่งจะบีบอัดข้อมูลก่อนส่งไปยังไคลเอ็นต์
  • เราเตอร์: พวกเขาส่งต่อการรับส่งข้อมูลไปยังปลายทางที่ต้องการซึ่งกำหนดเป็นคลัสเตอร์
  • คลัสเตอร์: กำหนดจุดสิ้นสุดสำหรับพารามิเตอร์การรับส่งข้อมูลและการกำหนดค่า

เราจะใช้องค์ประกอบทั้งสี่นี้เพื่อสร้างการกำหนดค่า Envoy Proxy เพื่อให้ตรงกับการกำหนดค่า NGINX เฉพาะ เป้าหมายของทูตคือการทำงานกับ API และการกำหนดค่าแบบไดนามิก ในกรณีนี้ การกำหนดค่าพื้นฐานจะใช้การตั้งค่าแบบตายตัวแบบคงที่จาก NGINX

ขั้นตอนที่ 2 - การกำหนดค่า NGINX

ส่วนแรก nginx.conf กำหนดภายใน NGINX บางส่วนที่จำเป็นต้องกำหนดค่า

การเชื่อมต่อของผู้ปฏิบัติงาน

การกำหนดค่าด้านล่างนี้จะกำหนดจำนวนกระบวนการของผู้ปฏิบัติงานและการเชื่อมต่อ สิ่งนี้บ่งชี้ว่า NGINX จะปรับขนาดเพื่อตอบสนองความต้องการอย่างไร

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy จัดการเวิร์กโฟลว์และการเชื่อมต่อในรูปแบบต่างๆ

ทูตสร้างเธรดผู้ปฏิบัติงานสำหรับแต่ละเธรดฮาร์ดแวร์ในระบบ เธรดของผู้ปฏิบัติงานแต่ละเธรดดำเนินการวนรอบเหตุการณ์ที่ไม่บล็อกซึ่งรับผิดชอบ

  1. การฟังผู้ฟังแต่ละคน
  2. การยอมรับการเชื่อมต่อใหม่
  3. การสร้างชุดตัวกรองสำหรับการเชื่อมต่อ
  4. ประมวลผลการดำเนินการ I/O ทั้งหมดตลอดอายุของการเชื่อมต่อ

การประมวลผลการเชื่อมต่อเพิ่มเติมทั้งหมดได้รับการจัดการทั้งหมดในเธรดของผู้ปฏิบัติงาน รวมถึงพฤติกรรมการส่งต่อใดๆ

สำหรับแต่ละเธรดของผู้ปฏิบัติงานใน Envoy จะมีพูลการเชื่อมต่อ ดังนั้นพูลการเชื่อมต่อ HTTP/2 จะสร้างการเชื่อมต่อได้ครั้งละหนึ่งการเชื่อมต่อต่อโฮสต์ภายนอกเท่านั้น หากมีเธรดผู้ปฏิบัติงานสี่เธรด ก็จะมีการเชื่อมต่อ HTTP/2 สี่การเชื่อมต่อต่อโฮสต์ภายนอกในสถานะที่เสถียร ด้วยการเก็บทุกอย่างไว้ในเธรดของผู้ปฏิบัติงานเพียงเธรดเดียว โค้ดเกือบทั้งหมดจึงสามารถเขียนได้โดยไม่ต้องปิดกั้น เหมือนกับว่าเป็นเธรดเดี่ยว หากมีการจัดสรรเธรดของผู้ปฏิบัติงานมากกว่าที่จำเป็น สิ่งนี้อาจทำให้หน่วยความจำสิ้นเปลือง สร้างการเชื่อมต่อที่ไม่ได้ใช้งานจำนวนมาก และลดจำนวนครั้งที่การเชื่อมต่อจะถูกส่งกลับไปยังพูล

ดูข้อมูลเพิ่มเติมได้ที่ บล็อกตัวแทนผู้แทน.

การกำหนดค่า 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 คือการกำหนดผู้ฟังของคุณ คุณต้องสร้างไฟล์การกำหนดค่าที่อธิบายวิธีที่คุณต้องการเรียกใช้อินสแตนซ์ Envoy

ข้อมูลโค้ดด้านล่างจะสร้าง Listener ใหม่และเชื่อมโยงเข้ากับพอร์ต 8080 การกำหนดค่าจะบอก Envoy Proxy ว่าควรเชื่อมโยงพอร์ตใดสำหรับคำขอที่เข้ามา

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 บล็อกตำแหน่งจะกำหนดวิธีดำเนินการและตำแหน่งที่จะกำหนดเส้นทางการรับส่งข้อมูล ในส่วนต่อไปนี้ การรับส่งข้อมูลทั้งหมดไปยังไซต์จะถูกถ่ายโอนไปยังคลัสเตอร์อัปสตรีม (หมายเหตุของผู้แปล: โดยปกติแล้วอัปสตรีมคือแอปพลิเคชันเซิร์ฟเวอร์) คลัสเตอร์ชื่อ เป้าหมายคลัสเตอร์. คลัสเตอร์อัปสตรีมกำหนดโหนดที่ควรประมวลผลคำขอ เราจะหารือเรื่องนี้ในขั้นตอนต่อไป

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

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

ที่ Envoy ตัวกรองทำเช่นนี้

ตัวกรองทูต

สำหรับการกำหนดค่าแบบคงที่ ตัวกรองจะกำหนดวิธีประมวลผลคำขอที่เข้ามา ในกรณีนี้ เราตั้งค่าตัวกรองที่ตรงกัน เซิร์ฟเวอร์_ชื่อ ในขั้นตอนก่อนหน้า เมื่อคำขอขาเข้ามาถึงซึ่งตรงกับโดเมนและเส้นทางที่กำหนด ปริมาณการใช้งานจะถูกส่งไปยังคลัสเตอร์ ซึ่งเทียบเท่ากับการกำหนดค่า 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 เป็นตัวกรองในตัวใน Envoy Proxy ตัวกรองอื่น ๆ ได้แก่ Redis, Mongo, TCP. คุณสามารถดูรายการทั้งหมดได้ที่ เอกสาร.

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับนโยบายการปรับสมดุลภาระงานอื่นๆ โปรดไปที่ เอกสารเอกอัครราชทูต.

ขั้นตอนที่ 5 - การกำหนดค่าพร็อกซีและอัปสตรีม

ใน NGINX การกำหนดค่าอัปสตรีมจะกำหนดชุดของเซิร์ฟเวอร์เป้าหมายที่จะประมวลผลการรับส่งข้อมูล ในกรณีนี้ มีการกำหนดสองคลัสเตอร์

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

ใน Envoy สิ่งนี้ได้รับการจัดการโดยคลัสเตอร์

กลุ่มทูต

เทียบเท่าอัพสตรีมถูกกำหนดให้เป็นคลัสเตอร์ ในกรณีนี้ มีการระบุโฮสต์ที่จะให้บริการการรับส่งข้อมูลแล้ว วิธีการเข้าถึงโฮสต์ เช่น การหมดเวลา ถูกกำหนดเป็นการกำหนดค่าคลัสเตอร์ ซึ่งช่วยให้สามารถควบคุมแง่มุมต่างๆ เช่น เวลาแฝงและการปรับสมดุลโหลดได้ละเอียดยิ่งขึ้น

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 ที่ระบุอย่างต่อเนื่องและไม่พร้อมกัน ที่อยู่ IP ที่ส่งคืนแต่ละรายการจากผลลัพธ์ DNS จะถือเป็นโฮสต์ที่ชัดเจนในคลัสเตอร์อัปสตรีม ซึ่งหมายความว่าหากคำขอส่งคืนที่อยู่ IP สองรายการ Envoy จะถือว่ามีโฮสต์สองรายการในคลัสเตอร์ และทั้งสองรายการจะต้องมีความสมดุลของโหลด หากโฮสต์ถูกลบออกจากผลลัพธ์ Envoy จะถือว่าไม่มีอยู่อีกต่อไป และจะดึงการรับส่งข้อมูลจากกลุ่มการเชื่อมต่อที่มีอยู่

ดูข้อมูลเพิ่มเติมได้ที่ เอกสารมอบฉันทะผู้แทน.

ขั้นตอนที่ 6 — การเข้าถึงบันทึกและข้อผิดพลาด

การกำหนดค่าสุดท้ายคือการลงทะเบียน แทนที่จะส่งบันทึกข้อผิดพลาดไปยังดิสก์ Envoy Proxy ใช้วิธีการแบบคลาวด์ บันทึกแอปพลิเคชันทั้งหมดจะถูกส่งไปที่ แย่ и สตเดอร์.

เมื่อผู้ใช้ส่งคำขอ บันทึกการเข้าถึงจะเป็นทางเลือกและปิดใช้งานตามค่าเริ่มต้น หากต้องการเปิดใช้งานบันทึกการเข้าถึงสำหรับคำขอ HTTP ให้เปิดใช้งานการกำหนดค่า การเข้าถึง_log สำหรับตัวจัดการการเชื่อมต่อ HTTP เส้นทางสามารถเป็นได้ทั้งอุปกรณ์เช่น แย่หรือไฟล์บนดิสก์ ขึ้นอยู่กับความต้องการของคุณ

การกำหนดค่าต่อไปนี้จะเปลี่ยนเส้นทางบันทึกการเข้าถึงทั้งหมดไปที่ แย่ (หมายเหตุของผู้แปล - จำเป็นต้องใช้ stdout เพื่อใช้ envoy ภายใน docker หากใช้โดยไม่มี docker ให้แทนที่ /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:

ตามค่าเริ่มต้น Envoy มีสตริงรูปแบบที่มีรายละเอียดของคำขอ 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

คำสั่งด้านล่างจะเรียกใช้ Envoy Proxy ผ่านคอนเทนเนอร์ Docker บนโฮสต์ คำสั่งนี้ทำให้ Envoy สามารถรับฟังคำขอขาเข้าบนพอร์ต 80 อย่างไรก็ตาม ตามที่ระบุไว้ในการกำหนดค่า Listener Envoy Proxy จะรับฟังการรับส่งข้อมูลขาเข้าบนพอร์ต 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. เนื่องจากการเชื่อมต่ออัปสตรีมไม่ทำงานและไม่พร้อมใช้งาน ดังนั้น Envoy Proxy จึงไม่มีปลายทางที่พร้อมใช้งานสำหรับการร้องขอ คำสั่งต่อไปนี้จะเริ่มชุดบริการ HTTP ที่ตรงกับการกำหนดค่าที่กำหนดไว้สำหรับ Envoy

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

ด้วยบริการที่มีให้ Envoy สามารถมอบพร็อกซีการรับส่งข้อมูลไปยังปลายทางได้สำเร็จ

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

คุณควรเห็นการตอบสนองที่ระบุว่าคอนเทนเนอร์ Docker ใดที่ประมวลผลคำขอ ในบันทึก Envoy Proxy คุณควรเห็นเอาต์พุตสตริงการเข้าถึงด้วย

ส่วนหัวการตอบกลับ 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 /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

Envoy Proxy ไม่รองรับการให้บริการเนื้อหาแบบคงที่ ดังนั้นใครสามารถลงคะแนนให้กับฟีเจอร์นี้ได้: https://github.com/envoyproxy/envoy/issues/378

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

โพสต์นี้สนับสนุนให้คุณติดตั้งและทดสอบพร็อกซีทูตหรือไม่

  • ใช่

  • ไม่

ผู้ใช้ 75 คนโหวต ผู้ใช้ 18 รายงดออกเสียง

ที่มา: will.com

เพิ่มความคิดเห็น