Μετανάστευση από το Nginx στο Envoy Proxy

Γεια σου, Χαμπρ! Φέρνω στην προσοχή σας μετάφραση της ανάρτησης: Μετανάστευση από το Nginx στο Envoy Proxy.

Το Envoy είναι ένας κατανεμημένος διακομιστής μεσολάβησης υψηλής απόδοσης (γραμμένος σε C++) που έχει σχεδιαστεί για μεμονωμένες υπηρεσίες και εφαρμογές, είναι επίσης ένας δίαυλος επικοινωνίας και «καθολικό επίπεδο δεδομένων» που έχει σχεδιαστεί για μεγάλες αρχιτεκτονικές «πλέγμα υπηρεσιών» μικροϋπηρεσιών. Κατά τη δημιουργία του, ελήφθησαν υπόψη λύσεις σε προβλήματα που προέκυψαν κατά την ανάπτυξη διακομιστών όπως NGINX, HAProxy, εξισορροπητές φορτίου υλικού και εξισορροπητές φορτίου cloud. Το Envoy λειτουργεί παράλληλα με κάθε εφαρμογή και αφαιρεί το δίκτυο για να παρέχει κοινή λειτουργικότητα ανεξάρτητα από την πλατφόρμα. Όταν όλη η κίνηση υπηρεσιών σε μια υποδομή ρέει μέσω του πλέγματος Envoy, γίνεται εύκολο να απεικονιστούν οι προβληματικές περιοχές με σταθερή παρατηρησιμότητα, να ρυθμίσετε τη συνολική απόδοση και να προσθέσετε βασικές λειτουργίες σε μια συγκεκριμένη τοποθεσία.

Δυνατότητες

  • Αρχιτεκτονική εκτός διαδικασίας: ο envoy είναι ένας αυτόνομος διακομιστής υψηλής απόδοσης που καταλαμβάνει μικρή ποσότητα μνήμης RAM. Λειτουργεί σε συνδυασμό με οποιαδήποτε γλώσσα εφαρμογής ή πλαίσιο.
  • Υποστήριξη http/2 και grpc: ο envoy διαθέτει υποστήριξη πρώτης κατηγορίας http/2 και grpc για εισερχόμενες και εξερχόμενες συνδέσεις. Αυτός είναι ένας διαφανής διακομιστής μεσολάβησης από http/1.1 έως http/2.
  • Προηγμένη εξισορρόπηση φορτίου: ο envoy υποστηρίζει προηγμένες λειτουργίες εξισορρόπησης φορτίου, συμπεριλαμβανομένων αυτόματων επαναλήψεων, διακοπής της αλυσίδας, περιορισμού καθολικού ρυθμού, σκίασης αιτημάτων, εξισορρόπησης φορτίου τοπικής ζώνης κ.λπ.
  • Configuration Management API: ο envoy παρέχει ένα ισχυρό API για τη δυναμική διαχείριση της διαμόρφωσής σας.
  • Παρατηρησιμότητα: Βαθιά παρατηρησιμότητα της κυκλοφορίας L7, εγγενής υποστήριξη για κατανεμημένη ανίχνευση και παρατηρησιμότητα των mongodb, dynamodb και πολλών άλλων εφαρμογών.

Βήμα 1 — Παράδειγμα διαμόρφωσης NGINX

Αυτό το σενάριο χρησιμοποιεί ένα ειδικά δημιουργημένο αρχείο nginx.conf, με βάση το πλήρες παράδειγμα από NGINX Wiki. Μπορείτε να δείτε τη διαμόρφωση στο πρόγραμμα επεξεργασίας ανοίγοντας 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 και δεν χρειάζεται να διαμορφώσετε ορισμένες ρυθμίσεις. Το Envoy Proxy έχει τέσσερις βασικούς τύπους, τα οποία υποστηρίζουν τη βασική υποδομή που προσφέρει το NGINX. Ο πυρήνας είναι:

  • Ακροατές: Καθορίζουν πώς ο Envoy Proxy δέχεται τα εισερχόμενα αιτήματα. Το Envoy Proxy υποστηρίζει προς το παρόν μόνο ακροατές που βασίζονται σε TCP. Μόλις δημιουργηθεί μια σύνδεση, περνά σε ένα σύνολο φίλτρων για επεξεργασία.
  • Φίλτρα: Αποτελούν μέρος μιας αρχιτεκτονικής αγωγών που μπορεί να επεξεργάζεται εισερχόμενα και εξερχόμενα δεδομένα. Αυτή η λειτουργία περιλαμβάνει φίλτρα όπως το Gzip, το οποίο συμπιέζει τα δεδομένα πριν τα στείλει στον πελάτη.
  • Δρομολογητές: Προωθούν την κυκλοφορία στον απαιτούμενο προορισμό, που ορίζεται ως σύμπλεγμα.
  • Συστάδες: Καθορίζουν το τελικό σημείο για τις παραμέτρους κυκλοφορίας και διαμόρφωσης.

Θα χρησιμοποιήσουμε αυτά τα τέσσερα στοιχεία για να δημιουργήσουμε μια διαμόρφωση Envoy Proxy για να ταιριάζει με μια συγκεκριμένη διαμόρφωση NGINX. Στόχος του Envoy είναι να συνεργαστεί με API και δυναμικές ρυθμίσεις. Σε αυτήν την περίπτωση, η βασική διαμόρφωση θα χρησιμοποιεί στατικές, σκληρά κωδικοποιημένες ρυθμίσεις από το NGINX.

Βήμα 2 - Διαμόρφωση NGINX

Το πρώτο μέρος nginx.conf ορίζει ορισμένα εσωτερικά στοιχεία NGINX που πρέπει να ρυθμιστούν.

Συνδέσεις εργαζομένων

Η παρακάτω διαμόρφωση καθορίζει τον αριθμό των διεργασιών και των συνδέσεων εργαζομένων. Αυτό δείχνει πώς το NGINX θα κλιμακωθεί για να καλύψει τη ζήτηση.

worker_processes  2;

events {
  worker_connections   2000;
}

Το Envoy Proxy διαχειρίζεται τις ροές εργασίας και τις συνδέσεις με διαφορετικούς τρόπους.

Ο Envoy δημιουργεί ένα νήμα εργασίας για κάθε νήμα υλικού στο σύστημα. Κάθε νήμα εργαζομένου εκτελεί έναν βρόχο συμβάντων χωρίς αποκλεισμό για τον οποίο είναι υπεύθυνο

  1. Ακούγοντας κάθε ακροατή
  2. Αποδοχή νέων συνδέσεων
  3. Δημιουργία συνόλου φίλτρων για σύνδεση
  4. Επεξεργαστείτε όλες τις λειτουργίες I/O κατά τη διάρκεια ζωής της σύνδεσης.

Όλη η περαιτέρω επεξεργασία σύνδεσης γίνεται εξ ολοκλήρου στο νήμα εργάτη, συμπεριλαμβανομένης οποιασδήποτε συμπεριφοράς προώθησης.

Για κάθε νήμα εργάτη στο Envoy, υπάρχει μια ομάδα σύνδεσης. Έτσι, οι ομάδες σύνδεσης HTTP/2 δημιουργούν μόνο μία σύνδεση ανά εξωτερικό κεντρικό υπολογιστή κάθε φορά, εάν υπάρχουν τέσσερα νήματα εργασίας, θα υπάρχουν τέσσερις συνδέσεις HTTP/2 ανά εξωτερικό κεντρικό υπολογιστή σε σταθερή κατάσταση. Διατηρώντας τα πάντα σε ένα νήμα εργαζομένων, σχεδόν όλος ο κώδικας μπορεί να γραφτεί χωρίς αποκλεισμό, σαν να ήταν με ένα νήμα. Εάν κατανεμηθούν περισσότερα νήματα εργαζομένων από όσα χρειάζεται, αυτό μπορεί να οδηγήσει σε σπατάλη μνήμης, δημιουργώντας μεγάλο αριθμό αδρανών συνδέσεων και μειώνοντας τον αριθμό των φορών που οι συνδέσεις επιστρέφουν πίσω στην πισίνα.

Για περισσότερες πληροφορίες επισκεφθείτε Ιστολόγιο Envoy Proxy.

Διαμόρφωση HTTP

Το ακόλουθο μπλοκ διαμόρφωσης NGINX ορίζει ρυθμίσεις HTTP όπως:

  • Ποιοι τύποι μίμησης υποστηρίζονται
  • Προεπιλεγμένα χρονικά όρια
  • Διαμόρφωση 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, ελέγχεται από Listeners.

Απεσταλμένοι ακροατές

Η πιο σημαντική πτυχή για να ξεκινήσετε με το Envoy Proxy είναι να ορίσετε τους ακροατές σας. Πρέπει να δημιουργήσετε ένα αρχείο διαμόρφωσης που να περιγράφει πώς θέλετε να εκτελέσετε την παρουσία Envoy.

Το παρακάτω απόσπασμα θα δημιουργήσει ένα νέο πρόγραμμα ακρόασης και θα το συνδέσει στη θύρα 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, το μπλοκ τοποθεσίας καθορίζει τον τρόπο επεξεργασίας και πού θα δρομολογηθεί η κίνηση. Στο ακόλουθο τμήμα, όλη η επισκεψιμότητα στον ιστότοπο μεταφέρεται σε ένα σύμπλεγμα ανάντη (σημείωση μεταφραστή: το upstream είναι συνήθως ένας διακομιστής εφαρμογής) με το όνομα targetCluster. Το upstream cluster ορίζει τους κόμβους που θα πρέπει να επεξεργαστούν το αίτημα. Θα το συζητήσουμε στο επόμενο βήμα.

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

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

Στο Envoy, το Filters το κάνει αυτό.

Φίλτρα 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. Άλλα φίλτρα περιλαμβάνουν Ρέντη, Μόνγκο, TCP. Μπορείτε να βρείτε την πλήρη λίστα στο τεκμηρίωση.

Για περισσότερες πληροφορίες σχετικά με άλλες πολιτικές εξισορρόπησης φορτίου, επισκεφθείτε Τεκμηρίωση απεσταλμένου.

Βήμα 5 - Διαμόρφωση διακομιστή μεσολάβησης και ανάντη

Στο NGINX, η upstream διαμόρφωση ορίζει ένα σύνολο διακομιστών-στόχων που θα επεξεργάζονται την κυκλοφορία. Σε αυτή την περίπτωση, εκχωρήθηκαν δύο ομάδες.

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

Στο Envoy, αυτό γίνεται από clusters.

Ομάδες απεσταλμένων

Το ανάντη ισοδύναμο ορίζεται ως συστάδες. Σε αυτή την περίπτωση έχουν εντοπιστεί οι οικοδεσπότες που θα εξυπηρετούν την κυκλοφορία. Ο τρόπος πρόσβασης στους κεντρικούς υπολογιστές, όπως τα χρονικά όρια, ορίζεται ως διαμόρφωση συμπλέγματος. Αυτό επιτρέπει πιο λεπτομερή έλεγχο σε θέματα όπως η καθυστέρηση και η εξισορρόπηση φορτίου.

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 Ο Envoy θα επιλύει συνεχώς και ασύγχρονα τους καθορισμένους στόχους DNS. Κάθε επιστρεφόμενη διεύθυνση IP από το αποτέλεσμα DNS θα θεωρείται ρητός κεντρικός υπολογιστής στο σύμπλεγμα ανάντη. Αυτό σημαίνει ότι εάν ένα αίτημα επιστρέψει δύο διευθύνσεις IP, το Envoy θα υποθέσει ότι υπάρχουν δύο κεντρικοί υπολογιστές στο σύμπλεγμα και και οι δύο πρέπει να είναι ισορροπημένοι φόρτωσης. Εάν ένας κεντρικός υπολογιστής αφαιρεθεί από το αποτέλεσμα, το Envoy θα υποθέσει ότι δεν υπάρχει πλέον και θα τραβήξει την κυκλοφορία από τυχόν υπάρχουσες ομάδες σύνδεσης.

Για περισσότερες πληροφορίες βλ Τεκμηρίωση πληρεξουσίου απεσταλμένου.

Βήμα 6 — Πρόσβαση στο αρχείο καταγραφής και σφάλματα

Η τελική διαμόρφωση είναι η εγγραφή. Αντί να σπρώχνει τα αρχεία καταγραφής σφαλμάτων στο δίσκο, το Envoy Proxy ακολουθεί μια προσέγγιση που βασίζεται σε σύννεφο. Όλα τα αρχεία καταγραφής εφαρμογών εξάγονται σε stdout и stderr.

Όταν οι χρήστες υποβάλλουν ένα αίτημα, τα αρχεία καταγραφής πρόσβασης είναι προαιρετικά και απενεργοποιημένα από προεπιλογή. Για να ενεργοποιήσετε τα αρχεία καταγραφής πρόσβασης για αιτήματα HTTP, ενεργοποιήστε τη διαμόρφωση access_log για τον διαχειριστή συνδέσεων HTTP. Η διαδρομή μπορεί να είναι είτε μια συσκευή όπως π.χ stdout, ή ένα αρχείο στο δίσκο, ανάλογα με τις απαιτήσεις σας.

Η ακόλουθη διαμόρφωση θα ανακατευθύνει όλα τα αρχεία καταγραφής πρόσβασης stdout (Η σημείωση του μεταφραστή - το 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. Ωστόσο, όπως ορίζεται στη διαμόρφωση του ακροατή, ο διακομιστής μεσολάβησης Envoy ακούει την εισερχόμενη κίνηση στη θύρα 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 service 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

Το Envoy Proxy δεν υποστηρίζει την εξυπηρέτηση στατικού περιεχομένου. Επομένως, ποιος μπορεί να ψηφίσει για το χαρακτηριστικό: https://github.com/envoyproxy/envoy/issues/378

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Αυτή η ανάρτηση σας ενθάρρυνε να εγκαταστήσετε και να δοκιμάσετε το proxy envoy;

  • да

  • όχι

Ψήφισαν 75 χρήστες. 18 χρήστες απείχαν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο