Совпадение маршрута прокси-агента Envoy с использованием регулярных выражений

Вопрос или проблема

У меня есть работающая конфигурация прокси Envoy, которая соответствует двум маршрутам /name/foo/bar?mode=receive-data и /name/receive-data. Файл конфигурации Envoy выглядит примерно так:

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

Мне нужно обновить конфигурацию, изменив соответствие маршрута с prefix на regex, как это описано в документации route.RouteMatch. Эти два определения маршрутов должны быть преобразованы в /:name/foo/bar?mode=receive-data и /:name/receive-data каким-то образом, где :name может быть [a-z0-9]. Я пытался написать свой собственный regex: для этого, но безуспешно, поэтому буду признателен за помощь.

Чтобы найти местоположение, соответствующее данному запросу, nginx сначала проверяет местоположения, определённые с использованием префиксных строк (префиксные местоположения).

Согласно документации о версии 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

.

Ответ или решение

Обновление конфигурации маршрутизации Envoy с использованием_REGEX_Matching

Введение

В современных распределённых системах маршрутизация запросов играет ключевую роль. Envoy Proxy, как высокопроизводительный прокси-сервер, предоставляет мощные функции для обработки маршрутов, включая возможности для использования регулярных выражений (regex). В этой статье мы рассмотрим, как протестировать и обновить существующую конфигурацию Envoy для использования механизма regex вместо механизма prefix для маршрутизации запросов.

Задача

В текущей конфигурации у вас есть два маршрута, использующих prefix matching:

  1. /name/foo/bar?mode=receive-data
  2. /name/receive-data

Теперь вы хотите обновить конфигурацию, чтобы использовать regex matching, где :name соответствует символам [a-z0-9].

Шаг 1: Понимание регулярных выражений

Регулярные выражения позволяют более гибко определять шаблоны маршрутов. В данном случае, мы можем использовать следующее регулярное выражение для определения маршрутов:

  1. Для /name/foo/bar?mode=receive-data:

    • Регулярное выражение: ^/[a-z0-9]+/foo/bar\?mode=receive-data$
  2. Для /name/receive-data:

    • Регулярное выражение: ^/[a-z0-9]+/receive-data$

На этом этапе важно отметить, что мы должны использовать символы ^ и $, чтобы обозначить начало и конец строки, что гарантирует, что наш шаблон соответствует именно указанному пути.

Шаг 2: Обновление конфигурации Envoy

С обновлёнными регулярными выражениями, конфигурация Envoy может быть изменена следующим образом:

static_resources:
  ...
  filter_chains:
  - filters:
    - name: envoy.http_connection_manager
      typed_config:
        ...
        route_config:
          virtual_hosts:
          - ...
            routes:
            - match:
                safe_regex:
                  google_re2: {}
                  regex: "^/[a-z0-9]+/foo/bar\\?mode=receive-data$"
              route:
                cluster: whatever
            - match:
                safe_regex:
                  google_re2: {}
                  regex: "^/[a-z0-9]+/receive-data$"
              route:
                cluster: somethingelse

Шаг 3: Валидация конфигурации

После внесения изменений, важно проверить конфигурацию на наличие ошибок и корректность путей. Вы можете использовать команду для проверки конфигурации Envoy:

envoy --mode validate --config-path <path-to-your-config>

Это позволит вам убедиться, что ваше регулярное выражение корректно и будет работать согласно ожиданиям.

Заключение

Переход от prefix matching к regex matching в конфигурации Envoy Proxy предоставляет вам более гибкие возможности для маршрутизации запросов. Использование регулярных выражений упрощает управление маршрутами, особенно в условиях динамически меняющейся среды. Надеемся, что приведённые примеры и предложения помогут вам эффективно адаптировать вашу конфигурацию.

Оптимизация SEO

При написании данной статьи были использованы ключевые слова, такие как "Envoy Proxy", "регулярные выражения", "маршрутизация запросов" и "конфигурация Envoy", что способствует привлечению аудитории, интересующейся техническими аспектами работы с современными прокси-серверами.

Оцените материал
Добавить комментарий

Капча загружается...