Прокси-сервер службы с привязкой на основе URL-адреса

Я ищу сервисный прокси (или балансировщик нагрузки) с привязкой на основе URL.

Это для использования в Kubernetes внутри кластера: я ищу «внутренний» балансировщик нагрузки, мне не нужно открывать сервис снаружи.

По умолчанию Сервис в Kubernetes использует алгоритм «циклического перебора».

Я хотел бы получить некоторую привязку на основе части URL-адреса HTTP: 1-й запрос будет направлен в случайный модуль, а последующие запросы, использующие тот же URL-адрес (предпочтительно), будут отправляться в тот же модуль.

Я прочитал некоторую документацию о сходстве на основе sourceIP, существует ли это на основе URL-адресов?

Я быстро прочитал о Envoy, возможно, подойдет алгоритм балансировки нагрузки «Ring hash», но я не знаю, возможно ли хеширование на основе URL-адреса.

Возможно, используя прокси-режим "ipvs" для kube-proxy (https://kubernetes.io/docs/concepts/services-networking/service/#proxy-mode-ipvs), но я вижу только «целевое хеширование» и «исходное хеширование» в качестве алгоритмов балансировки нагрузки, и я тоже не знаю, как его настроить.


person TagadaPoe    schedule 18.03.2019    source источник


Ответы (1)


Как вы уже упоминали, алгоритм прокси IPVS определяет источник и IP-адреса назначения, чтобы сгенерировать уникальный хэш-ключ для балансировки нагрузки. Однако он работает на транспортном уровне L4, перехватывая сетевой трафик для служб TCP или UDP. Поэтому может быть сложно взаимодействовать с HTTP-запросом и принимать решение о маршруте на основе пути URL.

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

hash_policy:
  header:
    header_name: "x-url"

В качестве альтернативы вы можете рассмотреть возможность использования Istio в качестве промежуточного прокси, который использует расширенную версию Envoy. Сервисы Kubernetes включаются в сервисную сетку путем развертывания в вашей среде специального дополнительного прокси-сервера, который перехватывает все сетевые взаимодействия между микросервисами. Istio также можно использовать для хеширования. согласованная балансировка нагрузки с привязкой сеанса на основе заголовков HTTP через DestinationRule ресурс.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: example
spec:
  host: my-service.default.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: x-url
person Nick_Kh    schedule 25.03.2019
comment
Спасибо ! Мне удалось успешно настроить Envoy для этого. Еще не тестировал istio. - person TagadaPoe; 12.04.2019