我正在使用带有弹簧引导的spring cloud kubernetes以及项目所需的必要RBAC要求。
<!-- kubernetes -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
</dependency>
我有2个微服务在kubernetes运行
my-service
some-service
my-service
使用spring boot 2.x运行,some-service
运行Spring boot 1.x.这两项服务都通过Kubernetes Service
和适当的端点公开。
application.yaml
的my-service
摘录如下。
some-service:
url: http://some-service:8080
serviceName: some-service
并且使用的FeignClient如下。
//FeignClient(url = "${some-service.url}") // does not work either
@FeignClient(value = "${some-service.serviceName}")
@RequestMapping("/api")
public interface SomeServiceClient {
我也做了spring.cloud.kubernetes.discovery.enabled=false
有了这个我希望my-service
应该能够通过kubernetes服务发现与some-service
交谈但是我得到了这个错误。
ERROR c.b.d.m.s.c.MatchCoordinator - error=FeignException: status 404 reading SomeServiceClient#get(Test
ion,Output) stacktrace=feign.FeignException: status 404 reading SomeServiceClient#get
我无法理解我做错了什么。此外,我没有为some-service
设置spring.application.name,因为它是第三方服务。
有人可以请帮助。另外还有一个,即服务与端口转发一起正常工作以及如果通过Ingress访问。
如果您没有为某项服务设置名称,并且它是第三方服务,我认为更好的方法是通过RestTemplate或其他方式调用它。
假设客户端需要配置和已知服务名称,以便使用服务发现在网络中调用该特定服务。
好吧,我发现差异在some-service
,更新的有效载荷和my-service
FeignClient没有更新。因而导致HTTP 404错误。但是它现在可以正常使用FeignClient
并且能够正确地使用服务名称进行服务发现。