A V
A V

Reputation: 261

Spring boot Kubernetes Service Discovery

I am running into issues with Kubernetes Service Discovery on Spring Boot applications.

I should be able to discover the services whether my spring boot application is running within or out of Kubernetes cluster. Our local development won't be on k8s cluster.

I am using Service Discovery via DNS. I tried using spring-cloud-starter-kubernetes

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

As per documentation you should be able to autowire DiscoveryClient and good to go

@Autowire
private DiscoveryClient discoveryClient;

DiscoveryClient is part of spring-cloud-commons. spring-cloud-starter-kuberenetes doesn't have it.

Anyone solved similar problem using the same library or a different one? Please share the solution

Thanks!

Upvotes: 4

Views: 5082

Answers (1)

Michael
Michael

Reputation: 113

I have solved this issue using the 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>

What was very important for me was the ribbon dependency as it makes use of a load balanced rest template in order to substitute service names for the correct pod IP's that are found in your kubernetes cluster.

I have created a git repo as part of answering a larger set of questions but it should be more than sufficient if someone is looking a way to implement Kubernetes service discovery in place of Eureka or Consul.

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

Upvotes: 2

Related Questions