Сервисный прокси с привязкой на основе URL - PullRequest
2 голосов
/ 18 марта 2019

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 25 марта 2019

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

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

hash_policy:
  header:
    header_name: "x-url"

В качестве альтернативы вы можете использовать Istio в качествепромежуточный прокси, который использует расширенную версию Envoy.Сервисы Kubernetes включаются в сетку сервисов путем развертывания специального прокси-сервера с дополнительной коляской в ​​вашей среде, который перехватывает все сетевое взаимодействие между микросервисами.Istio также можно использовать для согласованного распределения нагрузки Hash с привязкой к сеансам на основе заголовков 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
...