需要澄清将发现客户端与本地kubernetes发现配合使用的情况

问题描述

对于让我的spring-cloud-kubernetes项目使用kubernetes本机发现并在kuberbetes服务面临困境时利用discoveryClient的正确设置,我感到困惑

我可以通过使用discoveryClient并按名称仅引用服务来使事情正常进行。到现在为止还挺好。但是,我然后需要选择一个服务实例(看起来像一个实际的Pod ip + port),由于我要依赖本机服务发现,因此我显然不愿意这样做。使用kubernetes服务发现时是否应该不使用discoveryClient?

我还可以使用http:// {service-name}。{namespace} .svc。{cluster} .local:{service-port}使用restTemplate连接到rest服务。据我所知,restTemplate也将使用discoveryClient并选择一个serviceInstance(尤其是在使用@LoadBalanced注释时)。但是,基于上述行为,这表明选择了一个服务实例,而不是访问实际的kubernetes服务。

我觉得在处理本地kubernetes发现时我不理解发现客户端的语义。我也不明白为什么我需要使用{service-name}。{namespace} .svc。{cluster} .local:{service-port}而不是{service-name)在restTemplate中引用服务(鉴于使用客户端负载平衡时似乎足够了?

感谢您的澄清。

解决方法

我遇到了和你一样的问题。根据我的理解,将负载均衡器更改为 SERVICE 模式,正如@spencergibb 所提到的,应该允许您通过 pod IP 地址连接服务 URL,但它似乎不起作用或者我使用不正确。我在 Spring Cloud 的 GitHub https://github.com/spring-cloud/spring-cloud-kubernetes/issues/783 上创建了一个问题。