Spring Boot Kubernetes 服务发现

标签 spring spring-boot kubernetes microservices

我在 Spring Boot 应用程序上遇到了 Kubernetes 服务发现问题。

无论我的 Spring Boot 应用程序是在 Kubernetes 集群内部还是外部运行,我都应该能够发现这些服务。我们的本地开发不会在 k8s 集群上。

我正在通过 DNS 使用服务发现。我尝试使用 spring-cloud-starter-kubernetes

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes</artifactId>
        <version>0.2.0.RELEASE</version>
    </dependency>

根据文档,您应该能够 Autowiring DiscoveryClient 并且一切顺利
@Autowire
private DiscoveryClient discoveryClient;

DiscoveryClient 是 spring-cloud-commons 的一部分。 spring-cloud-starter-kuberenetes 没有。

有人使用相同的库或不同的库解决了类似的问题吗?请分享解决方案

谢谢!

最佳答案

我已经使用 Spring Cloud Kubernetes Dependencies 解决了这个问题
<spring.cloud.kubernetes>0.2.0.RELEASE</spring.cloud.kubernetes>

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-kubernetes-ribbon</artifactId>
        <version>${spring.cloud.kubernetes}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-kubernetes-config</artifactId>
        <version>${spring.cloud.kubernetes}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-kubernetes-core</artifactId>
        <version>${spring.cloud.kubernetes}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-kubernetes-discovery</artifactId>
        <version>${spring.cloud.kubernetes}</version>
    </dependency>

对我来说非常重要的是功能区依赖项,因为它使用负载平衡的其余模板来替换服务名称以替换在您的 kubernetes 集群中找到的正确 pod IP。

我创建了一个 git repo 作为回答更多问题的一部分,但如果有人正在寻找一种方法来实现 Kubernetes 服务发现来代替 Eureka 或 Consul,这应该就足够了。

https://github.com/foundery-rmb/kubernetes-service-discovery

关于Spring Boot Kubernetes 服务发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47178056/

相关文章:

email - 由 : javax.net.ssl.SSLException : Unrecognized SSL message, 明文连接引起?

docker - Pod "mysql"被禁止 : no API token found for service account default/default

Spring 应用程序 Jenkins 部署 - 环境

docker - Kubernetes flannel 网络无法按预期工作

kubernetes - 'kubectl获取 namespace '命令 “namespaces is forbidden”错误

spring - 如何通过 GELF 将 spring boot 访问日志发送到远程服务器?

json - Jersey 在添加 jersey-* 依赖项时不存在 WebApplication 提供程序

java - JPA 与 Spring JdbcTemplate

java - 创建名称为 'locationController' : Unsatisfied dependency expressed through field 'service' ; nested exception 的 bean 时出错

java - 如何从 Redis 缓存中获取自定义值?