Azure Kubernetes LoadBalancer перенаправляет запросы во все экземпляры

#azure #kubernetes #load-balancing #azure-aks #azure-load-balancer

#azure #kubernetes #балансировка нагрузки #azure-aks #azure-балансировщик нагрузки

Вопрос:

У меня есть служба, использующая кластер Azure Kubernetes и балансировщик нагрузки AKS. Я хочу перенаправить некоторые HTTP (клиентские) запросы во все экземпляры. есть ли какой-либо способ настроить это поведение с помощью AKS или Kubernetes в целом?

Допустим, у меня есть XYZ API, в котором запущены две реплики / экземпляра.

  • Экземпляр модуля XYZ-1
  • Экземпляр модуля XYZ-2

У меня есть несколько запросов rest API к приложению domain.com/testendpoint

В настоящее время с помощью балансировщика нагрузки AKS запросы циклически отправляются в XYZ-1 и XYZ-2. Я хочу посмотреть, возможно ли перенаправить запрос в оба экземпляра (XYZ-1 и XYZ-2), когда конечная точка запроса testendpoint и все другие запросы API используют один и тот же циклический порядок.

Вариант использования для обновления данных службы в памяти с помощью вызова rest один или два раза в день, и при необходимости вызов rest будет инициирован другой службой. поэтому необходимо убедиться, что все экземпляры pod обновляют / обновляют данные в памяти с помощью HTTP-запроса.

Комментарии:

1. Что вы имеете в виду? Разве это не то, что делает «балансировщик нагрузки»? Что вы подразумеваете под «во все экземпляры» — что он должен транслировать ваш запрос или использовать циклический перебор для распределения нагрузки по экземплярам? «все экземпляры» — вы имеете в виду все копии приложения или все разные модули — для разных приложений — почему вам это нравится?

2. Есть некоторые запросы, которые я хочу перенаправить на все экземпляры pod. Теперь я обновил свой вопрос.

3. Как вы планируете обрабатывать ответы? Если клиент получает оба ответа — это ошибка — не должно произойти.

4. Какова цель вызова? Должно ли быть возвращаемое значение? Если требуется выполнить некоторую работу со всеми экземплярами, попробуйте службу обмена сообщениями, такую как event grid, и пусть все экземпляры прослушивают событие.

5. Это делается для обновления данных в памяти с помощью вызова один или два раза в день, и при необходимости вызов будет инициирован другой службой. поэтому нужно убедиться, что все экземпляры pod обновляют / обновляют данные в памяти с помощью HTTP-запроса.

Ответ №1:

если возможно переадресовать запрос в оба экземпляра (XYZ-1 и XYZ-2), когда конечная точка запроса — testendpoint

Это не предусмотрено протоколом HTTP, поэтому для этого вам нужна специальная служба.

Вариант использования для обновления данных службы в памяти с помощью вызова rest один или два раза в день, и при необходимости вызов rest будет инициирован другой службой. поэтому необходимо убедиться, что все экземпляры pod обновляют / обновляют данные в памяти с помощью HTTP-запроса.

Я предлагаю вам создать новую служебную службу «update-service», на которую вы отправляете вызов один раз в день. Затем эта служба отправляет запрос каждому экземпляру XYZ, например XYZ-1 , и XYZ-2 .

Комментарии:

1. Привет, Джонас, спасибо за ответ. Есть ли какие-либо API AKS (или K8S), доступные для достижения этой цели, чтобы находить все экземпляры и отправлять им запросы?

2. Если XYZ развертывается как StatefulSet (вместо Deployment), то это легко, поскольку ваши модули будут иметь имя, как вы написали, XYZ-0 , XYZ-1 … в зависимости от того, сколько у вас реплик. Для развертывания легко запрашивать модули с теми же метками, что и в вашем «селекторе», используя библиотеку, например github.com/kubernetes/client-go или github.com/kubernetes-client/java

3. Вместо использования клиента Kubernetes (и настройки необходимых разрешений / учетных записей служб) вы можете рассмотреть возможность использования дополнительной безголовой службы, которая не имеет собственного IP-адреса кластера и балансировки нагрузки, но вместо этого возвращает все исправные pod-IP-адреса при выполнении поиска dns. См. dev.to/kaoskater08 /…