Балансировка нагрузки на стороне клиента gRPC

#kubernetes #grpc-go

#kubernetes #grpc-go

Вопрос:

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

  conn, err := grpc.Dial(
        address,
        grpc.WithInsecure(),
        grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),)
  

Я проверил несколько конечных точек в службе. Я также проверил, что служба разрешает эти несколько IP-адресов, но каким-то образом она подключается только к первому модулю в этом списке.
MAX_CONNECTION_AGE на стороне сервера установлено значение 30 секунд, чтобы гарантировать, что клиент периодически повторно подключается в случае увеличения масштаба.
Я следил за многочисленными статьями о том, как это настроить, и это просто не работает. Чего мне не хватает?

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

1. Вот статья о балансировке нагрузки gRPC в k8s

2. Спасибо, я тоже прочитал эту статью. Мы бы хотели не использовать никаких прокси-серверов и на данный момент сохранить только балансировку нагрузки на стороне клиента

Ответ №1:

Ключ должен был явно использоваться dns:/// в качестве префикса для назначения. Несмотря на то, что в документации это указано по умолчанию.