Требуется разъяснение по использованию клиента обнаружения с собственным обнаружением kubernetes.

Я не понимаю, как правильно настроить мой проект spring-cloud-kubernetes, чтобы использовать собственное обнаружение kubernetes и использовать discoveryclient, когда фронт службы kuberbetes mult

Я могу заставить все работать, используя discoveryClient и ссылаясь только на службу по имени. Все идет нормально. Однако затем мне нужно выбрать один из экземпляров службы (который выглядит как фактический IP-адрес + порт модуля), что я явно не хочу делать, поскольку я хочу полагаться на собственное обнаружение службы. Не следует ли мне использовать discoveryClient при использовании службы обнаружения kubernetes?

Я также могу подключиться к остальной службе с помощью restTemplate, используя http://{service-name}.{namespace}.svc.{cluster}.local:{service-port}. Насколько я могу судить, restTemplate также будет использовать discoveryClient и выбирать serviceInstance (особенно при использовании аннотации @LoadBalanced). Однако, судя по описанному выше поведению, это предполагает, что выбран один экземпляр службы, а не фактическая служба kubernetes.

Я чувствую, что не понимаю, что такое семантика клиента обнаружения при работе с собственным обнаружением kubernetes. Я также не понимаю, почему мне нужно ссылаться на службу в моем restTemplate, используя {service-name}.{namespace}.svc.{cluster}.local:{service-port}, а не просто {service-name) ( учитывая, что этого кажется достаточно при использовании балансировки нагрузки на стороне клиента)?

Спасибо за разъяснения.


person nvp152    schedule 01.09.2020    source источник
comment
См. docs.spring.io/spring-cloud-kubernetes/docs/1.1.6.RELEASE/ о spring.cloud.kubernetes.ribbon.mode={POD|SERVICE}. Если вы не используете ленту и используете весенний облачный балансировщик нагрузки, используйте spring.cloud.kubernetes.loadbalancer.mode=SERVICE   -  person spencergibb    schedule 02.09.2020
comment
Спасибо, что помогли прояснить, что в основном discoveryClient — это общий клиентский интерфейс обнаружения. В некоторых случаях это означает, что нам нужны именно все экземпляры сервисов (как в случае с балансировкой нагрузки на стороне клиента), а в других случаях (например, обнаружение природы с использованием kubernetes) нас интересует только один единственный serviceInstance. (discoveryClient.getServicesInstances().get(0) ), который указывает на службу kubernetes.   -  person nvp152    schedule 02.09.2020
comment
@spencergibb - не используйте Hoxton SR8 и spring-cloud-starter-kubernetes-loadbalancer версии 1.1.6.RELEASE. Я начал с отладки и вообще не вижу KubernetesLoadBalancerAutoConfiguration ни в положительных, ни в отрицательных совпадениях. Я ожидал увидеть автоконфигурацию где-нибудь в режиме отладки. Мне явно не хватает чего-то основного здесь. Насколько я могу судить, spring.factories для этого проекта выглядит нормально.....   -  person nvp152    schedule 04.09.2020


Ответы (1)


Я столкнулся с той же проблемой, что и вы. Насколько я понимаю, изменение балансировщика нагрузки в режим SERVICE, как упоминал @spencergibb, должно позволить вам подключиться к URL-адресу службы через IP-адрес модуля, но, похоже, он не работает или я использую его неправильно. Я создал задачу на GitHub Spring Cloud https://github.com/spring-cloud/spring-cloud-kubernetes/issues/783.

person Pearson Radu    schedule 07.05.2021