<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: zakaria zermani</title>
    <description>The latest articles on DEV Community by zakaria zermani (@zaki_zermani_57ff49f53acf).</description>
    <link>https://dev.to/zaki_zermani_57ff49f53acf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3117149%2F7c2368c0-a159-45d7-8994-535540d9d4fb.webp</url>
      <title>DEV Community: zakaria zermani</title>
      <link>https://dev.to/zaki_zermani_57ff49f53acf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zaki_zermani_57ff49f53acf"/>
    <language>en</language>
    <item>
      <title>Von Ingress API zu Gateway API: Warum sich der Wechsel lohnt</title>
      <dc:creator>zakaria zermani</dc:creator>
      <pubDate>Sun, 26 Jul 2026 17:29:55 +0000</pubDate>
      <link>https://dev.to/zaki_zermani_57ff49f53acf/von-ingress-api-zu-gateway-api-warum-sich-der-wechsel-lohnt-5am6</link>
      <guid>https://dev.to/zaki_zermani_57ff49f53acf/von-ingress-api-zu-gateway-api-warum-sich-der-wechsel-lohnt-5am6</guid>
      <description>&lt;p&gt;Kubernetes-Nutzer kennen die Ingress API seit Jahren als Standardweg, um HTTP(S)-Traffic ins Cluster zu routen. Aber die Ingress API zeigt inzwischen deutliche Grenzen – und genau deshalb hat sich die &lt;strong&gt;Gateway API&lt;/strong&gt; als moderner, flexiblerer Nachfolger etabliert. In diesem Artikel schauen wir uns an, warum sich der Umstieg lohnt, was sich konzeptionell ändert und wie sich konkrete Ingress-Features auf die Gateway API übertragen lassen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5qw0c9g624oata003h4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5qw0c9g624oata003h4e.png" alt="Migration von Ingress API zu Gateway API" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Warum überhaupt wechseln?
&lt;/h2&gt;

&lt;p&gt;Die Ingress API hat drei grundlegende Schwachstellen, die im Alltag schnell spürbar werden:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Eingeschränkte Funktionalität
&lt;/h3&gt;

&lt;p&gt;Die Ingress API unterstützt nur TLS-Terminierung und einfaches, inhaltsbasiertes Routing von HTTP-Traffic. TCP, UDP oder gRPC-Routing? Fehlanzeige. Um trotzdem erweiterte Funktionen anzubieten, greifen Ingress-Controller auf &lt;strong&gt;Annotationen&lt;/strong&gt; zurück – proprietäre Erweiterungen, die außerhalb des eigentlichen Standards liegen.&lt;/p&gt;

&lt;p&gt;Das Problem dabei: Jede Implementierung (NGINX, Traefik, Envoy, …) bringt ihre eigenen Annotationen mit, die nicht zwangsläufig zu anderen Controllern kompatibel sind. Wer den Ingress-Controller wechselt, muss:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Alle verwendeten Annotationen identifizieren,&lt;/li&gt;
&lt;li&gt;die entsprechenden Funktionen im neuen Controller suchen,&lt;/li&gt;
&lt;li&gt;und die Konfiguration manuell nachbauen.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Das macht den Wechsel zwischen Implementierungen mühsam bis unmöglich.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Fehlendes Berechtigungsmodell
&lt;/h3&gt;

&lt;p&gt;Das klassische Ingress-Modell wurde um eine einzige zentrale Ressource herum entworfen. Dadurch gibt es faktisch nur eine Hauptrolle: die Person, die die Ingress-Ressource erstellt. Diese kann gleichzeitig Routing-Regeln definieren, TLS konfigurieren und teilweise sogar Einfluss auf die zugrunde liegende Load-Balancing-Infrastruktur nehmen.&lt;/p&gt;

&lt;p&gt;In kleinen Clustern mit einem Team ist das kein Problem. Aber stell dir folgendes Szenario vor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Team A betreibt einen Shop&lt;/li&gt;
&lt;li&gt;Team B betreibt eine API&lt;/li&gt;
&lt;li&gt;Team C betreibt ein Kundenportal&lt;/li&gt;
&lt;li&gt;Alle teilen sich denselben Load Balancer bzw. Ingress Controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mit dem Ingress-Modell fehlt eine saubere Trennung zwischen Infrastruktur-Verantwortlichen, Applikations-Administratoren und Entwicklern. Entwickler können dadurch potenziell Konfigurationen erstellen, die sich auf die gemeinsam genutzte Infrastruktur auswirken – ohne dass es dafür ein standardisiertes Rollenmodell gibt.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Unhandliches API-Design
&lt;/h3&gt;

&lt;p&gt;Annotationen sind einfache Key-Value-Strings und werden pauschal im Metadata-Block gesetzt statt strukturiert im relevanten Teil der Spec. Sobald viele Annotationen zusammenkommen, wird eine Ingress-Ressource schnell unübersichtlich.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Kernunterschiede:
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Personas
&lt;/h2&gt;

&lt;p&gt;Einer der größten konzeptionellen Sprünge der Gateway API ist ein sauber definiertes Rollenmodell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bei der Ingress API&lt;/strong&gt; gibt es im Kern nur eine explizite Persona:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Der User&lt;/strong&gt;: Besitzer der Ingress-Ressourcen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implizit kommen dazu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Provider&lt;/strong&gt;: verwaltet einen providerseitig bereitgestellten Ingress-Controller&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Operator/Admin&lt;/strong&gt;: verwaltet selbst gehostete Ingress-Controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beide wurden erst mit der späten Einführung der &lt;code&gt;IngressClass&lt;/code&gt;-Ressource zu offiziellen Personas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bei der Gateway API&lt;/strong&gt; ist die Rollenverteilung von Anfang an klar strukturiert:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Application Developer&lt;/strong&gt;: definiert Routing-Regeln für seine Anwendungen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Admin&lt;/strong&gt;: definiert Entry Points für externen Client-Traffic inkl. TLS-Terminierung&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Operator&lt;/strong&gt;: definiert ebenfalls Entry Points und TLS-Konfiguration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Provider&lt;/strong&gt;: stellt GatewayClass/Controller bereit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diese Aufteilung passt zu Organisationen, in denen mehrere Teams sich dieselbe Load-Balancing-Infrastruktur teilen. Wichtig: Das Self-Service-Modell muss dadurch nicht aufgegeben werden – es lässt sich weiterhin eine einzelne RBAC-Rolle definieren, die alle drei Verantwortlichkeiten (Developer, Admin, Operator) übernimmt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Funktionsumfang und Erweiterbarkeit
&lt;/h2&gt;

&lt;p&gt;Die Gateway API deckt sämtliche Ingress-Features ab – plus viele Funktionen, die bei Ingress nur über Annotationen erreichbar waren. Dadurch ist sie deutlich portabler.&lt;/p&gt;

&lt;p&gt;Für Features, die nicht standardisiert werden können (z. B. Authentifizierung, Connection Timeouts, Health Checks), bietet die Gateway API drei definierte Extension Points:&lt;/p&gt;

&lt;h3&gt;
  
  
  External References
&lt;/h3&gt;

&lt;p&gt;Ein Feld einer Gateway-API-Ressource kann auf eine implementierungsspezifische Custom Resource verweisen. So bleibt der Standard schlank, während Hersteller wie Envoy Gateway oder Istio eigene Spezialfunktionen anbieten können:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTPRoute
   |
   +--&amp;gt; Standardisierte Gateway API Felder
   |
   +--&amp;gt; Hersteller-spezifische Erweiterungsfelder (Custom Resource)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beispiel: Ein &lt;code&gt;HTTPRouteFilter&lt;/code&gt; kann über &lt;code&gt;extensionRef&lt;/code&gt; auf eine herstellerspezifische Ressource verweisen, etwa eine JWT-Authentifizierung, die kein Standardfilter ist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ExtensionRef&lt;/span&gt;
  &lt;span class="na"&gt;extensionRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gateway.envoyproxy.io&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;JwtAuthentication&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;company-auth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Custom Implementations
&lt;/h3&gt;

&lt;p&gt;Manche Features werden bewusst der jeweiligen Implementierung überlassen – etwa der &lt;code&gt;RegularExpression&lt;/code&gt;-Typ von &lt;code&gt;HTTPPathMatch&lt;/code&gt;. Diese gelten als „implementation-specific" bzw. „custom" im Konformitätslevel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Policies
&lt;/h3&gt;

&lt;p&gt;Für Data-Plane-Funktionen wie Authentifizierung, Autorisierung, Rate Limiting, WAF-Regeln oder Caching können Hersteller eigene Policy-Ressourcen definieren. Die Gateway API schreibt dabei nicht vor, wie diese Ressourcen aussehen – aber sie schreibt vor, &lt;strong&gt;wie eine Policy an eine Gateway-Ressource angebunden wird&lt;/strong&gt;. Das sorgt für eine einheitliche UX über verschiedene Hersteller hinweg.&lt;/p&gt;

&lt;p&gt;Der entscheidende Unterschied zu External References: Bei Policies referenziert &lt;strong&gt;die Policy die Route&lt;/strong&gt;, nicht umgekehrt.&lt;/p&gt;

&lt;p&gt;Statt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTPRoute&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sieht das bei Gateway API so aus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTPRoute&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;webshop&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AuthenticationPolicy&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;targetRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTPRoute&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;webshop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Annotationen als Extension Point sind bei der Gateway API übrigens explizit &lt;strong&gt;nicht&lt;/strong&gt; vorgesehen und werden für Implementierungen stark abgeraten.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature-Mapping: Von Ingress zu Gateway API
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ingress-Konzept&lt;/th&gt;
&lt;th&gt;Gateway-API-Äquivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry Points&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Müssen explizit als Listener in einer &lt;code&gt;Gateway&lt;/code&gt;-Ressource definiert werden&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TLS-Terminierung&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Eigenschaft des Gateway-Listeners; Zertifikat weiterhin im Secret&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Routing-Regeln&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Path-Matching wandert 1:1 in die &lt;code&gt;HTTPRoute&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kein direktes Äquivalent – muss explizit als Routing-Regel (&lt;code&gt;/&lt;/code&gt;-Prefix) definiert werden&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IngressClass&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;parentRef&lt;/code&gt; in der &lt;code&gt;HTTPRoute&lt;/code&gt; verweist auf das jeweilige &lt;code&gt;Gateway&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Routing im Detail: hostnamespezifisch vs. global
&lt;/h3&gt;

&lt;p&gt;Ein wichtiger Unterschied: Bei Ingress besitzt &lt;strong&gt;jeder Hostname seinen eigenen Regelblock&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shop.example.com&lt;/span&gt;
    &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
        &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shop-service&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api.example.com&lt;/span&gt;
    &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
        &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api-service&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bei der &lt;code&gt;HTTPRoute&lt;/code&gt; gelten die Regeln automatisch für &lt;strong&gt;alle&lt;/strong&gt; angegebenen Hostnamen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hostnames&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;shop.example.com&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;api.example.com&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;matches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
    &lt;span class="na"&gt;backendRefs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Merging &amp;amp; Conflict Resolution
&lt;/h3&gt;

&lt;p&gt;Bei Ingress ist weder das Zusammenführen von Regeln noch die Konfliktauflösung standardisiert – jeder Controller kann das anders handhaben. Die Gateway API hingegen legt genau fest, wie Regeln gemergt und Konflikte aufgelöst werden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ist mit Annotationen?
&lt;/h2&gt;

&lt;p&gt;Annotationen sind naturgemäß implementierungsspezifisch, deshalb hängt ihre Migration sowohl vom alten Ingress-Controller als auch vom neuen Gateway-Implementation ab.&lt;/p&gt;

&lt;p&gt;Nehmen wir NGINX als Beispiel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;nginx.ingress.kubernetes.io/rewrite-target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
    &lt;span class="na"&gt;nginx.ingress.kubernetes.io/ssl-redirect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Diese Annotationen versteht ausschließlich der NGINX Ingress Controller – andere Controller ignorieren sie oder nutzen eigene Pendants.&lt;/p&gt;

&lt;p&gt;Die gute Nachricht: Viele früher annotationsbasierte Funktionen sind heute Teil des offiziellen Standards. Aus&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;nginx.ingress.kubernetes.io/ssl-redirect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;wird bei Gateway API ein offizieller Filter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RequestRedirect&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Für alles, was implementierungsspezifisch bleibt (JWT-Auth, WAF-Regeln, spezielle Envoy-Features), gilt: Ab in die Doku der jeweiligen Gateway-Implementierung, um den passenden Extension Point zu finden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementierungen und Konformität
&lt;/h2&gt;

&lt;p&gt;Die Gateway API unterscheidet zwei Implementierungsprofile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gateway&lt;/strong&gt;: für North-South-Traffic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mesh&lt;/strong&gt;: für East-West-Traffic innerhalb eines Clusters oder Cluster-Sets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jedes Profil hat eigene Konformitätstests. Aktuell gibt es drei Konformitätsstufen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conformant&lt;/strong&gt;: z. B. Traefik (Controller), Cilium (Controller &amp;amp; Mesh)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partially Conformant&lt;/strong&gt;: z. B. Envoy Gateway (u. a. im Einsatz bei Giant Swarm)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale&lt;/strong&gt;: z. B. Azure Application Gateway for Containers (Controller)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automatisierte Migration
&lt;/h2&gt;

&lt;p&gt;Für die tatsächliche Migration muss man nicht bei null anfangen: Das &lt;a href="https://github.com/kubernetes-sigs/ingress2gateway" rel="noopener noreferrer"&gt;ingress2gateway-Projekt&lt;/a&gt; von Kubernetes SIGs konvertiert bestehende Ingress-Ressourcen automatisiert in Gateway-API-Ressourcen und nimmt einem damit einen guten Teil der manuellen Arbeit ab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;Die Gateway API löst die drei größten Schwachstellen der Ingress API auf einmal: mehr Features out-of-the-box, ein klares Rollenmodell für Multi-Team-Cluster und ein sauberes, strukturiertes API-Design statt eines Annotations-Wildwuchses. Wer aktuell mit vielen implementierungsspezifischen Annotationen kämpft oder mehrere Teams über dieselbe Ingress-Infrastruktur koordinieren muss, sollte sich die Migration ernsthaft anschauen – idealerweise mit Unterstützung durch ingress2gateway als Ausgangspunkt.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>infrastructure</category>
      <category>kubernetes</category>
      <category>networking</category>
    </item>
    <item>
      <title>Entwicklung auf SAP BTP: Struktur, Tools &amp; Deployment im Überblick</title>
      <dc:creator>zakaria zermani</dc:creator>
      <pubDate>Sun, 04 May 2025 20:24:27 +0000</pubDate>
      <link>https://dev.to/zaki_zermani_57ff49f53acf/entwicklung-auf-sap-btp-struktur-tools-deployment-im-uberblick-23l9</link>
      <guid>https://dev.to/zaki_zermani_57ff49f53acf/entwicklung-auf-sap-btp-struktur-tools-deployment-im-uberblick-23l9</guid>
      <description>&lt;h2&gt;Einführung in SAP BTP&lt;/h2&gt;

&lt;h3&gt;Was ist SAP Business Technology Platform?&lt;/h3&gt;

&lt;p&gt;Die SAP Business Technology Platform (SAP BTP) ist eine integrierte Plattform-as-a-Service (PaaS), die es Unternehmen ermöglicht, Anwendungen und Erweiterungen effizient zu entwickeln, zu integrieren und bereitzustellen. SAP BTP kombiniert Datenbankdienste, Analytik, Integrationsfunktionen sowie Anwendungsentwicklungstools in einer zentralen Umgebung. Sie unterstützt verschiedene Laufzeitumgebungen, darunter Cloud Foundry, Kyma und ABAP.&lt;/p&gt;

&lt;h3&gt;Warum auf SAP BTP entwickeln?&lt;/h3&gt;

&lt;p&gt;Die Entwicklung auf SAP BTP bietet zahlreiche Vorteile: Entwickler:innen können Anwendungen schnell in der Cloud erstellen, bestehende SAP-Lösungen erweitern und gleichzeitig moderne Technologien wie Machine Learning oder Event-driven Architecture nutzen. Durch die nahtlose Integration mit SAP S/4HANA, SAP SuccessFactors und anderen Systemen wird die BTP zur idealen Plattform für unternehmensweite Innovationen.&lt;/p&gt;



&lt;h2&gt;Die SAP BTP Account-Struktur verstehen&lt;/h2&gt;

&lt;h3&gt;Global Account, Subaccount &amp;amp; Directories&lt;/h3&gt;

&lt;p&gt;Die Account-Struktur von SAP BTP ist hierarchisch aufgebaut. An oberster Stelle steht der &lt;strong&gt;Global Account&lt;/strong&gt;, dem &lt;strong&gt;Subaccounts&lt;/strong&gt; untergeordnet sind. Innerhalb des global accounts oder der Subaccounts können sogenannte &lt;strong&gt;Directories&lt;/strong&gt; erstellt werden, um eine strukturierte Organisation zu ermöglichen – etwa nach Teams, Projekten oder Regionen.&lt;/p&gt;

&lt;h3&gt;Cloud Foundry Subaccount: Aufbau und Organisation&lt;/h3&gt;

&lt;p&gt;Ein Subaccount in der Cloud Foundry (CF) Umgebung entspricht einer eigenen Entwicklungs- und Laufzeitumgebung. Innerhalb eines CF-Subaccounts wird automatisch eine &lt;strong&gt;Organisation (Org)&lt;/strong&gt; erstellt, zu der mehrere &lt;strong&gt;Spaces&lt;/strong&gt; gehören können. Diese Spaces ermöglichen die Aufteilung von Ressourcen, Rollen und Deployments, z. B. für Entwicklung, Test und Produktion.&lt;/p&gt;

&lt;h3&gt;Orgs und Spaces: Hierarchie und Struktur&lt;/h3&gt;

&lt;p&gt;In der CF-Umgebung gilt eine 1:1-Beziehung zwischen Subaccount und Org. Eine Org kann jedoch beliebig viele Spaces beinhalten. Diese Trennung erlaubt eine granulare Zuweisung von Ressourcen (z. B. Quota, Memory) und fördert die Kollaboration in Projektteams. Spaces sind also essenziell für eine strukturierte und skalierbare Entwicklungslandschaft auf BTP.&lt;/p&gt;



&lt;h2&gt;Beispielhafte Struktur: Eine Skizze zur Visualisierung&lt;/h2&gt;

&lt;h3&gt;Visuelle Darstellung der Account-Hierarchie&lt;/h3&gt;

&lt;p&gt;Zur besseren Verständlichkeit bietet sich eine grafische Skizze an, die die Hierarchie von Global Account → Subaccount → Directory → Org → Space darstellt. Diese Struktur bildet das Fundament für die technische Umsetzung von Berechtigungen, Ressourcenmanagement und Anwendungsbereitstellung auf SAP BTP.&lt;/p&gt;  

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fllhu1lvt3ziku0tijy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fllhu1lvt3ziku0tijy.png" alt="Image description" width="565" height="438"&gt;&lt;/a&gt;&lt;br&gt;
Quelle: &lt;a href="https://developers.sap.com/tutorials/cp-trial-quick-onboarding.html" rel="noopener noreferrer"&gt;https://developers.sap.com/tutorials/cp-trial-quick-onboarding.html&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Empfohlene Aufteilung nach Use Case&lt;/h3&gt;

&lt;p&gt;Ein bewährtes Modell ist die Aufteilung der Subaccounts nach &lt;em&gt;Region&lt;/em&gt; oder &lt;em&gt;Business Unit&lt;/em&gt;, kombiniert mit einer projektbezogenen Nutzung der Directories und Spaces. So lassen sich verschiedene Anwendungsfälle – von ABAP-Entwicklung bis zu UI5-Webapps – klar trennen und effizient verwalten.&lt;/p&gt;



&lt;h2&gt;Entitlements vs. Quotas&lt;/h2&gt;

&lt;h3&gt;Was sind Entitlements?&lt;/h3&gt;

&lt;p&gt;In SAP BTP bezeichnen &lt;strong&gt;Entitlements&lt;/strong&gt; die Zuweisung von Diensten und Ressourcen an Subaccounts. Sie legen fest, welche Services überhaupt genutzt werden dürfen – zum Beispiel SAP HANA Cloud, Business Application Studio oder die ABAP Environment. Diese Berechtigungen werden auf der Ebene des Global Accounts verwaltet.&lt;/p&gt;

&lt;h3&gt;Quota Management im globalen Account&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Quotas&lt;/strong&gt; bestimmen, in welchem Umfang ein Dienst innerhalb eines Subaccounts verwendet werden darf. Während ein Entitlement lediglich die grundsätzliche Nutzung erlaubt, limitiert die Quota die konkrete Ressourcennutzung (z. B. Anzahl der Serviceinstanzen oder Speichermenge). Ein gutes Quota-Management ist entscheidend, um Performance und Kosten im Griff zu behalten.&lt;/p&gt;

&lt;h3&gt;Regionale Bindung eines Subaccounts&lt;/h3&gt;

&lt;p&gt;Jeder Subaccount ist genau &lt;strong&gt;einer Region&lt;/strong&gt; zugeordnet. Diese Region beeinflusst unter anderem die Verfügbarkeit von Diensten, Latenzzeiten und die rechtliche Rahmenbedingungen bezüglich Datenhaltung. Daher ist es sinnvoll, Subaccounts strategisch nach geografischer Nähe zu Nutzern oder regulatorischen Anforderungen auszuwählen.&lt;/p&gt;



&lt;h2&gt;Tools für Entwickler:innen auf SAP BTP&lt;/h2&gt;

&lt;h3&gt;Was ist die BTP CLI?&lt;/h3&gt;

&lt;p&gt;Die &lt;strong&gt;BTP Command Line Interface (BTP CLI)&lt;/strong&gt; ist ein zentrales Tool zur Verwaltung von globalen Accounts, Subaccounts, Directories und Diensten. Im Gegensatz zur CF CLI, die ausschließlich für die Cloud Foundry Umgebung zuständig ist, adressiert die BTP CLI die gesamte Plattformstruktur und erlaubt unter anderem die Aktivierung von Diensten, Zuweisung von Entitlements und das Konfigurieren von Directories.&lt;/p&gt;

&lt;h3&gt;Unterschiede zur CF CLI&lt;/h3&gt;

&lt;p&gt;Die &lt;strong&gt;CF CLI&lt;/strong&gt; ist spezialisiert auf die Interaktion mit der Cloud Foundry Umgebung – also auf das Deployment, die Verwaltung von Apps, Services, Orgs und Spaces. Die BTP CLI hingegen deckt übergeordnete Plattformebenen ab, wie die Einrichtung von Subaccounts, Service-Plänen und globalen Rollen. Für ein vollständiges Management der BTP-Struktur ist die Nutzung beider CLIs oft notwendig.&lt;/p&gt;

&lt;h3&gt;BTP CLI: Kontextbasiertes Arbeiten (global, subaccount, directory)&lt;/h3&gt;

&lt;p&gt;Ein zentraler Aspekt der BTP CLI ist das Arbeiten im &lt;strong&gt;kontextbasierten Modus&lt;/strong&gt;. Dabei kann ein spezifischer Kontext (z. B. ein bestimmter Subaccount oder ein Directory) als Ziel gesetzt werden. Wenn Sie also den Kontext, in dem Befehle ausgeführt werden, auf ein Directory oder ein Subaccount ändern wollen, können Sie dies mit dem Befehl **btp target** tun.&lt;/p&gt;



&lt;h2&gt;Arbeiten mit dem SAP Business Application Studio&lt;/h2&gt;

&lt;h3&gt;Dev Spaces erstellen und nutzen&lt;/h3&gt;

&lt;p&gt;Das &lt;strong&gt;SAP Business Application Studio (BAS)&lt;/strong&gt; ist eine moderne, webbasierte Entwicklungsumgebung auf der SAP BTP. Entwickler:innen können darin sogenannte &lt;strong&gt;Dev Spaces&lt;/strong&gt; erstellen – vorinstallierte, isolierte Entwicklungsumgebungen, die sofort einsatzbereit sind. Je nach gewähltem Szenario (z. B. SAP Fiori, CAP, ABAP) sind die entsprechenden Tools, Extensions und Laufzeitumgebungen bereits integriert.&lt;/p&gt;

&lt;h3&gt;Voraussetzungen und Subscription&lt;/h3&gt;

&lt;p&gt;Um mit dem BAS arbeiten zu können, muss der Dienst zunächst über den Subaccount &lt;strong&gt;abonniert&lt;/strong&gt; werden. Dies setzt voraus, dass im Global Account entsprechende Entitlements vergeben wurden. Die Nutzung ist sowohl im kostenlosen &lt;em&gt;Trial&lt;/em&gt; als auch im &lt;em&gt;Enterprise Account&lt;/em&gt; möglich. Nach der Aktivierung kann direkt mit der Erstellung und Verwaltung von Dev Spaces begonnen werden.&lt;/p&gt;

&lt;h3&gt;Entwicklungsumgebungen nach Szenarien&lt;/h3&gt;

&lt;p&gt;Jede Dev Space Type ist auf ein bestimmtes Anwendungsszenario optimiert. Zum Beispiel beinhaltet ein „SAP Fiori“-Space UI5-Toolkit, OData-Editoren und Deployment-Tools, während ein „CAP“-Space Node.js-basierte CAP-Runtime, SQLite und CDS-Kommandos enthält. Diese maßgeschneiderte Bereitstellung spart Zeit, reduziert manuelle Konfiguration und verbessert die Produktivität erheblich.&lt;/p&gt;



&lt;h2&gt;Deployment in der Cloud Foundry Umgebung&lt;/h2&gt;

&lt;h3&gt;Was ist das Manifest.yml?&lt;/h3&gt;

&lt;p&gt;Beim Deployment von Anwendungen in der Cloud Foundry Umgebung spielt die Datei &lt;strong&gt;manifest.yml&lt;/strong&gt; eine zentrale Rolle. Sie beschreibt die App-Konfiguration, darunter Name, Speicherbedarf, Instanzanzahl, Buildpack, Hostname und Services. Das Manifest automatisiert und standardisiert den Deployment-Prozess, wodurch Fehlerquellen minimiert werden.&lt;/p&gt;

&lt;h3&gt;App-URL und Hostname-Regeln im SAP BTP Umfeld&lt;/h3&gt;

&lt;p&gt;Der Hostname einer App muss innerhalb einer Region eindeutig sein. Eine beispielhafte URL für eine App mit dem Hostnamen &lt;code&gt;myapp&lt;/code&gt; in der Region EU10 lautet: &lt;code&gt;myapp.cfapps.eu10.hana.ondemand.com&lt;/code&gt;. Entwickler:innen sollten bei der Namensgebung daher auf Kollisionen achten oder alternativ mit zufälligen Routen arbeiten.&lt;/p&gt;

&lt;h3&gt;Automatisch generierte Routen mit random-route&lt;/h3&gt;

&lt;p&gt;Ein praktisches Attribut  in der &lt;code&gt;manifest.yml&lt;/code&gt; ist die &lt;code&gt;random-route: true&lt;/code&gt;,  um eine eindeutige Routen-URL generieren zu lassen. Dadurch wird der App-Hostname automatisch um eine zufällige Zeichenfolge erweitert, was die eindeutige Adressierung vereinfacht. Diese Option ist besonders nützlich in Test- und Entwicklungsszenarien, in denen die exakte URL zweitrangig ist.&lt;/p&gt;

&lt;h3&gt;Routing zur Dev Space und Mapping zur App&lt;/h3&gt;

&lt;p&gt;Für den externen Zugriff auf die Anwendung muss eine Route zur entsprechenden Dev Space eingerichtet und mit der App verknüpft werden. Dies erfolgt in der Regel automatisch beim Deployment, kann aber auch manuell angepasst werden. Eine korrekt konfigurierte Route stellt sicher, dass Benutzer:innen und externe Systeme zuverlässig auf die Anwendung zugreifen können.&lt;/p&gt;



&lt;h2&gt;Fazit: Effiziente Entwicklung auf SAP BTP&lt;/h2&gt;

&lt;h3&gt;Zusammenfassung der wichtigsten Punkte&lt;/h3&gt;

&lt;p&gt;SAP BTP bietet eine leistungsstarke und flexible Plattform für die moderne Anwendungsentwicklung in der Cloud. Durch die klare Account-Hierarchie – von Global Account über Subaccount bis zu Spaces – wird eine strukturierte Ressourcennutzung ermöglicht. Mit Tools wie der BTP CLI und dem SAP Business Application Studio lassen sich Entwicklungsprojekte effizient umsetzen, erweitern und verwalten.&lt;/p&gt;

&lt;p&gt;Besonderes Augenmerk sollte auf die korrekte Konfiguration von Entitlements, Quotas und Deployment-Prozessen gelegt werden. Gerade für ABAP-Entwickler:innen eröffnet SAP BTP mit der Steampunk-Umgebung neue Perspektiven für zukunftssichere Cloud-Lösungen.&lt;/p&gt;

&lt;h3&gt;Best Practices für den Einstieg&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Plane die Account-Struktur frühzeitig und regionsbezogen&lt;/li&gt;
  &lt;li&gt;Nutze Dev Spaces passend zum jeweiligen Anwendungsszenario&lt;/li&gt;
  &lt;li&gt;Verwalte Entitlements zentral über den Global Account&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;Häufig gestellte Fragen (FAQ)&lt;/h2&gt;

&lt;h3&gt;Was ist der Unterschied zwischen einem Subaccount und einer Org in SAP BTP?&lt;/h3&gt;

&lt;p&gt;Ein Subaccount ist Teil der globalen Accountstruktur von SAP BTP und stellt eine Umgebung für Projekte bereit. Innerhalb eines Subaccounts wird automatisch eine Organisation (Org) für die Cloud Foundry Umgebung erstellt, die wiederum in Spaces unterteilt werden kann.&lt;/p&gt;

&lt;h3&gt;Wie kann ich ABAP-Anwendungen auf SAP BTP entwickeln?&lt;/h3&gt;

&lt;p&gt;Dazu wird ein Subaccount mit Cloud Foundry Umgebung benötigt, in dem ein Space für die ABAP Environment angelegt wird. Über das SAP Business Application Studio oder Eclipse ADT können Anwendungen mit dem RAP-Modell entwickelt und bereitgestellt werden.&lt;/p&gt;

&lt;h3&gt;Welche Vorteile bietet die Nutzung von Dev Spaces im Business Application Studio?&lt;/h3&gt;

&lt;p&gt;Dev Spaces sind sofort einsatzbereite, isolierte Entwicklungsumgebungen in der Cloud, die alle nötigen Tools für spezifische Szenarien enthalten – z. B. Fiori, CAP oder ABAP. Das spart Konfigurationszeit und verbessert die Produktivität.&lt;/p&gt;

&lt;h3&gt;Wie funktioniert das Deployment einer App in SAP BTP Cloud Foundry?&lt;/h3&gt;

&lt;p&gt;Das Deployment erfolgt meist über ein &lt;code&gt;manifest.yml&lt;/code&gt;, das die Konfiguration der App beschreibt. Mittels CF CLI kann die App dann in einem bestimmten Space deployed und mit Services wie Logging oder Datenbanken verbunden werden.&lt;/p&gt;

&lt;h3&gt;Was sind Entitlements und warum sind sie wichtig?&lt;/h3&gt;

&lt;p&gt;Entitlements sind Dienst-Berechtigungen, die im Global Account verwaltet und an Subaccounts vergeben werden. Ohne Entitlement kann ein Dienst nicht aktiviert oder genutzt werden – sie sind also essenziell für die Ressourcenplanung.&lt;/p&gt;

</description>
      <category>sap</category>
      <category>cloudnative</category>
      <category>cloudcomputing</category>
      <category>cloudfoundry</category>
    </item>
  </channel>
</rss>
