Kubernetes Ingress: Zugriff auf bestimmte Ressourcen konfigurieren
Tipp zur Loadbalancer Config in der Cloud
Das Problem
Adhoc Ressourcen Location Konfiguration

Manchmal ist es nötig, den Zugriff auf bestimmte URI Ressourcen eines oder mehrere Container in einen Kubernetes Ecosystem zu verhindern. Entsprechend war es in meinem Fall nötig, dass für einen bestimmten Zeitraum Requests auf eine Ressource nicht durchgestellt werden sollten.

Statt umständlich das oder die Deployment(s) zu ändern die daran beteiligt sind (NGINX/Traeffik Ingress oder dahinter stehende App Container) möchte ich das gerne an einer zentralen Stellen tun, und das möglichst wenig Invasiv.

Die Lösung
On-the-fly Ingress Änderung

Als Abstraktionsschicht bietet Kubernetes auch hier eine sehr schöne Möglichkeit, das zu tun. Man erweitert einfach die Annotation im Ingress des NGinx. Das ganz geht auch mit einem Traeffic Ingress, die Lösung sieht dann evt. anders aus.
Im Wesentlichen beeinflusst man die Konfiguration des nginx Deployments auf diese Weise – oder anders ausgedrückt, man könnte die entsprechende Konfiguration auch in einem Nativen NGinx direkt in der nginx.conf vornehmen im server – location Bereich.

Aber zurück zum Thema. Um (vorrübergehenden) Zugriff auf bestimmte URI Ressourcen zu verweigern, bietet sich eine server-snippet Annotation im Ingress an, in etwa so:

Dieses Beispiel findet Anwendung in einem IBM Cluster.

ingress.bluemix.net/server-snippets: |
      location = /vqueue/api/queuein {
      return 302 'Wartung';
      add_header Content-Type text/plain;
      }

Wie gesagt, das ist die IBM Cloud Variante – es wäre ja zu einfach wenn Kubernetes = Kubernetes wäre.

Die etwas allgemeinere Variante schaut dann so aus:

nginx.org/server-snippets: |
      location / {
        return 302 /coffee;
      }

Das ist dann auch direkt der NGINX Doku entnommen.

Dieses Beispiel zeigt sehr schön, wie Kubernetes es erlaubt, Einfluss auf die Container bzw zugrunde liegende Software zu nehmen, ohne die wirklich kennen zu müssen und vor allem ohne etwas neu bauen zu müssen. Natürlich ist es von Vorteil NGINX zu kennen, aber auch nicht wirklich nötig. Als Kubernetes Admin reicht es, seine Annotations zu kennen und natürlich den Strukturellen Aufbau des Domänen Spezifischen virtuellen Kubernetes Rechenzentrum.