0

我正在使用带有 spring boot 的 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>

我在 kubernetes 中运行了 2 个微服务

  1. my-service
  2. some-service

使用Spring my-serviceBoot 2.xsome-service运行并使用 Spring Boot 1.x 运行。这两项服务都通过 KubernetesService和适当的端点公开。

application.yamlfor的摘录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应该能够some-service通过 kubernetes 服务发现进行对话,但是我收到了这个错误。

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 访问。

4

2 回答 2

1

如果您没有为某些服务设置名称,并且它是第 3 方服务,我认为更好的方法是通过 RestTemplate 或其他方式调用它。

Feign 客户端需要配置并知道服务名称,才能使用服务发现调用网络中的特定服务。

于 2019-03-08T20:23:09.687 回答
1

好吧,我发现差异在于some-service更新了有效负载而my-serviceFeignClient 没有更新。因此导致 HTTP 404 错误。但是,它现在可以FeignClient正确使用并且能够正确使用服务名称进行服务发现。

于 2019-03-12T15:43:26.897 回答