Envoy-Proxy-Match-Route mithilfe von regulären Ausdrücken

Envoy-Proxy-Match-Route mithilfe von regulären Ausdrücken

Ich habe eine funktionierende Envoy-Proxy-Konfiguration, die zwei Routen /name/foo/bar?mode=receive-dataund entspricht /name/receive-data. Die Envoy-Konfigurationsdatei sieht ungefähr so ​​aus:

static_resources:
  ...
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        typed_config:
          ...
          route_config:
            virtual_hosts:
            - ...
              routes:
              - match:
                  prefix: "/name/foo/bar?mode=receive-data"
                ...
              - match:
                  prefix: "/name/receive-data"
                ...

Ich muss die Konfiguration von der Verwendung von Routenabgleich prefixauf regexden Abgleich wie im Abschnitt beschrieben aktualisieren.route.RouteMatchDokumentation. Diese beiden Routendefinitionen müssen irgendwie in /:name/foo/bar?mode=receive-dataund konvertiert werden /:name/receive-data, wo :name. [a-z0-9]Ich habe versucht, hierfür meine eigene zu schreiben regex:, aber ohne Erfolg, daher wäre ich hier für Hilfe dankbar.

Antwort1

Um einen Standort zu finden, der einer bestimmten Anfrage entspricht, überprüft nginx zunächst die Standorte, die mithilfe der Präfixzeichenfolgen (Präfixstandorte) definiert sind.

Antwort2

Laut Dokumentation zu 1.13.1:

- match:
   safe_regex:
    google_re2: {}
    regex: "\/.*\/foo\/bar"
  route:
    cluster: whatever
- match:
    safe_regex:
      google_re2: {}
      regex: "\/.*\/receive-data"
  route:
    cluster: somethingelse

verwandte Informationen