Wie du Ingress in Minikube in 5 Minuten aufsetzt

Wenn du diesen Blogartikel liest, bist du vermutlich schon gut informiert, wie Kubernetes (K8s) funktioniert und hast dieses zusammen mit Minikube auch schon auf deinem Rechner laufen.

Ich gehe davon aus, dass du Linux im Einsatz hast, unter Mac oder Windows sollte das Tutorial allerdings analog funktionieren.

Welchen Job erfüllt Ingress in einem Cluster?

Ingress ist ein Reverse Proxy. Die Aufgabe eines Reverse Proxy besteht darin bestimmte Resourcen von einem Server zu holen. Siehe auch https://de.wikipedia.org/wiki/Reverse_Proxy.

Manch einer mag jetzt denken: Das kann doch auch unser NodePort-Service (welcher die entsprechenden Ports unserer Services außerhalb der Cluster-Nodes verfügbar macht. Das ist prinzipiell auch richtig. Aber leider können wir mit NodePort die Ports nur direkt nach außen mappen. Das kann man gerne in einer geschützten Umgebung tun, wer allerdings seine Services im Netz bereitstellen will, der sollte diese besser hinter einem einzigen Port schützen. Dies klappt mit Ingress.

Z.B. stellt Ingress (zu deutsch: der Eingang/der Zugang) nach außen den Port 80 zur Verfügung. Über diesen empfangen wir alle REST-Anfragen und mappen sie auf unsere entsprechenden Services, die dann wieder über Ingress nach außen antworten. Ganz ähnlich wie auch AWS API-Gateway dies tut. Auch AWS Api-Gateway ist im Grunde ein Reverse-Proxy.

Minikube für Ingress vorbereiten

Nachdem du Kubernetes und Minikube auf deinem Rechner installiert hast, muss Ingress in Minikube (welches by default deaktiviert ist) aktiviert werden. Durch die Aktivierung erhalten wir einen Ingress-Controller als einen neuen Pod in unserem Cluster.

Los geht‘s

$ minikube addons list

Wir sehen, dass Ingress disabled ist.

$ minikube addons enable ingress

gibt uns einen entsprechenden Pod.

Wir kontrollieren das Vorhandensein von Ingress durch ein

$ kubectl get pods --all-namespaces

Ohne Ingress-Resource keine Weiterleitung

Nun, nachdem unser Controller läuft, müssen wir die Regeln für die Weiterleitung festlegen.

Dies geschieht durch ein durch das Schreiben eines YAML-Manifests für Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: beispiel-ingress
spec:
  rules:
  - host: service.beispiel.de
    http:  
     paths:
      - path: /
        backend:
          serviceName: beispiel-nodeport
          servicePort: 80

Mit

kubectl create -f beispiel.yml

oder

kubectl apply -f beispiel.yml

lässt sich das Manifest in den Cluster übertragen.

Die Domain auf die IP des Ingress-Controllers setzen

Noch ist unser Service nicht unter der neuen Domain erreichbar, denn diese wird noch nicht nach der IP des Ingress-Controllers aufgelöst. Da wir mit Minikube ja nur lokal arbeiten, benutzen wir anstatt eines richtigen DNS‘ nur die lokale Hosts-Datei, welche für uns die Namensauflösung macht.

Um diese IP in /etc/hosts (Linux) oder C:\windows\system32\drivers\etc\hosts (für Windows) eintragen zu können finden wir selbige mit

$ kubectl get ingresses

heraus.

Achtung: In der Cloud kann es einige Zeit dauern, bis die IP tatsächlich zur Verfügung steht.

Ingress Kubernetes Minikube

Unseren Service im Webbrowser aufrufen

Nach Eintrag der IP in der /etc/hosts ist unser Service nun im Webbrowser verfügbar und lässt sich im Browser aufrufen.

Weiterführende Informationen zu Ingress

https://kubernetes.io/docs/concepts/services-networking/ingress/

Kommentar schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.