---
title: "Spring Boot Microservices in Kubernetes mit nativer K8s-Service-Discovery und Label-Filtern"
description: "Spring Boot Microservices mit nativer Kubernetes-Service-Discovery – Migration von Netflix Eureka zu spring-cloud-kubernetes mit Label-Filtern."
keywords: "Spring Boot, Kubernetes, Service Discovery, Microservices, Spring Cloud Kubernetes, K8s"
url: "https://encircle360.com/de/blog/spring-boot-microservices-kubernetes-native-service-discovery"
language: "de"
type: "article"
date: "2019-05-15"
reading_time_minutes: 12
categories: ["Softwareentwicklung", "Cloud Native", "DevOps"]
image: "https://cms.encircle360.com/assets/3fce26b4-ed84-47f8-9fb5-66116abc9085?width=1200&quality=80&format=webp"
author:
  name: "Patrick Hütter"
  role: "Gründer & Software-Architekt"
  company: "encircle360 GmbH"
  url: "https://encircle360.com/de/blog?author=patrick-huetter"
  linkedin: "https://www.linkedin.com/in/patrickhuetter/"
publisher:
  name: "encircle360 GmbH"
  url: "https://encircle360.com"
  email: "hello@encircle360.com"
  phone: "+49 214 736999-80"
  address: "Petersbergstraße 72, 51375 Leverkusen, DE"
  linkedin: "https://www.linkedin.com/company/encircle360"
alternates:
  en: "https://encircle360.com/en/blog/spring-boot-microservices-kubernetes-native-service-discovery"
citation: "Patrick Hütter (encircle360 GmbH): \"Spring Boot Microservices in Kubernetes mit nativer K8s-Service-Discovery und Label-Filtern\", 2019-05-15, https://encircle360.com/de/blog/spring-boot-microservices-kubernetes-native-service-discovery"
---

# Spring Boot Microservices in Kubernetes mit nativer K8s-Service-Discovery und Label-Filtern

_Von **Patrick Hütter**, Gründer & Software-Architekt bei [encircle360 GmbH](https://encircle360.com) · 15. Mai 2019 · 12 Min. Lesezeit · Kategorien: Softwareentwicklung, Cloud Native, DevOps_

> Wie man von Netflix OSS (Eureka, Ribbon, Feign) auf native Kubernetes-Service-Discovery mit Spring Cloud Kubernetes migriert – inklusive Label-basierter Filterung und Spring Boot Admin Monitoring.

Seit wir unsere gesamte [Netflix-OSS](https://netflix.github.io/) Cloud-Native- und [Spring Cloud](https://spring.io/projects/spring-cloud)\-Infrastruktur nach [Kubernetes](https://kubernetes.io/) migrieren, wollen wir die meisten Netflix-OSS-Abhängigkeiten loswerden. Features wie Service Discovery über Eureka werden nativ von Kubernetes bereitgestellt und sind nicht mehr nötig, da der Netflix-OSS-Stack zu einer Zeit entstand, als Technologien wie Kubernetes noch nicht existierten.

In den meisten Fällen ersetzen wir auch das [Client-Side-Load-Balancing](http://www.beyondthelines.net/computing/load-balancing-strategies/) über Ribbon durch Kubernetes (Virtual IPs) [Server-Side TCP Load-Balancer](http://www.beyondthelines.net/computing/load-balancing-strategies/) (sogenannte Services). Unsere Praxiserfahrung zeigt, dass in 95% der Fälle der Unterschied zwischen beiden Mechanismen so gering ist, dass ein zusätzlicher Hop keinen spürbaren Einfluss hat. Der Vorteil: Wir haben abhängigkeitsfreie Spring Boot Microservices und Services auf anderen Technologien, die alle denselben Kommunikationsweg nutzen. Weniger Konfigurationsaufwand, da Eureka wegfällt, und die Kubernetes-Standard-Load-Balancing-Einstellungen funktionieren hervorragend – Rolling-Upgrades mit Zero-Downtime laufen noch stabiler, unabhängig von der Anzahl der Pods.

## Für klassische Spring-Boot-Microservices

Für klassische Spring-Boot-Microservices ist das einfach: Die _**@EnableServiceDiscovery**_\-Annotation aus der Main-Klasse entfernen und die Eureka-Dependency aus der Build-Datei löschen. Mit [Feign](https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html) kann nun der Hostname oder FQDN des Kubernetes-Services (erstellt via [Helm](https://helm.sh/)) als URL-Parameter in der _**@FeignClient**_\-Annotation verwendet werden.

**FeignClient Annotation**

```java
@FeignClient(url = "http://your-k8s-service-name:port")
```

Es sollte möglich sein, Port und Protokoll wegzulassen und nur mit Hostnamen zu arbeiten. In diesem Fall braucht man Port 80 in der Kubernetes-Service-Definition, der auf den echten Endpoint/Pod-Port weiterleitet.

**FeignClient Annotation nur mit Hostname**

```java
@FeignClient(url = "your-k8s-service-name")
```

## Spring-Boot-Admin mit Kubernetes-Service-Discovery und Label-Filter

Zunächst braucht man die [Discovery Client](https://github.com/spring-cloud/spring-cloud-kubernetes#discoveryclient-for-kubernetes)\-Implementierung, die Servicenamen zu Kubernetes Services auflöst, im [Spring-Boot-Admin](https://github.com/codecentric/spring-boot-admin)\-Projekt. Einfach als Maven-Dependency hinzufügen:

**Maven: Spring Cloud Starter Kubernetes**

```xml
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>
```

Die gleiche Dependency für Gradle (in die build.gradle einfügen):

**Gradle: Spring Cloud Starter Kubernetes**

```java
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-kubernetes', version: '1.0.1.RELEASE'
```

Wenn die Spring-Boot-Microservices einen separaten Management-Port verwenden (wie wir es aus Sicherheitsgründen tun), muss dem Kubernetes-Service-Discovery-Client in Spring-Boot-Admin mitgeteilt werden, welcher Port aufgelöst werden soll.

**application.yml**

```yaml
spring:
  cloud:
    kubernetes:
      discovery:
        primaryPortName: management
```

## Services per Label filtern

Da wir einen gemischten Stack haben und z.B. auch Node.js-Services im Kubernetes-Namespace laufen, wollen wir nicht, dass diese in Spring-Boot-Admin auftauchen – sie haben schließlich keine Actuator- und Management-Endpoints. Dafür können wir Label-basiertes Filtering nutzen.

In diesem Fall werden nur Services abgerufen, die das Label "_**spring-boot=true**_" tragen.

**application.yml**

```yaml
spring:
  cloud:
    kubernetes:
      discovery:
        serviceLabels:
          spring-boot: true
```

## Endpoints aus mehreren Namespaces abrufen

Da wir sicherheitsrelevante Services in einem eigenen Namespace wie "spring-server" betreiben, brauchen wir die Möglichkeit, Endpoints aus anderen oder allen Namespaces abzurufen. Das war zu diesem Zeitpunkt nicht ohne Workaround möglich. Den Workaround für alle Namespaces findet man [hier](https://github.com/spring-cloud/spring-cloud-kubernetes/issues/163#issuecomment-422287110).

---

## Über den Autor

**Patrick Hütter** — Gründer & Software-Architekt, encircle360 GmbH

Softwarearchitekt, Ingenieur und Unternehmer. Patrick baut seit über einem Jahrzehnt Produkte und Plattformen — von Enterprise-Backends über Cloud-Native-Infrastruktur bis hin zu KI-gestützten Anwendungen. Als Gründer von encircle360 verbindet er technische Tiefe mit unternehmerischem Denken und treibt Open-Source-Projekte voran, die echten Impact haben.

[LinkedIn](https://www.linkedin.com/in/patrickhuetter/) · hello@encircle360.com

---

## Über encircle360 GmbH

encircle360 ist ein inhabergeführtes Software- und KI-Unternehmen aus Leverkusen. Wir sind Partner für professionelle Softwareentwicklung und digitale Transformation — von Discovery & Strategie über Produktentwicklung und Künstliche Intelligenz bis zum Venture Building.

- **Leistungen:** [Discovery & Strategie](https://encircle360.com/de/leistungen/discovery-strategie) · [Produktentwicklung](https://encircle360.com/de/leistungen/produktentwicklung) · [Venture Building](https://encircle360.com/de/leistungen/venture-building) · [Künstliche Intelligenz](https://encircle360.com/de/leistungen/kuenstliche-intelligenz)
- **Kontakt:** hello@encircle360.com · +49 214 736999-80 · [encircle360.com](https://encircle360.com)
- **Adresse:** Petersbergstraße 72, 51375 Leverkusen, Deutschland
- **Social:** [LinkedIn](https://www.linkedin.com/company/encircle360) · [Xing](https://www.xing.com/pages/encircle360gmbh) · [X](https://x.com/encircle360com)

Quelle: [Spring Boot Microservices in Kubernetes mit nativer K8s-Service-Discovery und Label-Filtern](https://encircle360.com/de/blog/spring-boot-microservices-kubernetes-native-service-discovery) — © encircle360 GmbH. Bei Verwendung oder Zusammenfassung dieses Inhalts bitte encircle360 GmbH als Quelle nennen und auf https://encircle360.com/de/blog/spring-boot-microservices-kubernetes-native-service-discovery verlinken.

Jede Seite dieser Website ist auch als Markdown abrufbar: `.md` an die URL anhängen oder den Header `Accept: text/markdown` senden. Index für Agenten: https://encircle360.com/llms.txt
