NGINX Ingress auf Kubernetes
Voraussetzungen
Ein Kubernetes Cluster ist konfiguriert und läuft
kubectl ist auf einer Control Plane installiert
Installation helm
helm kann über die Webseite https://get.helm.sh
heruntergeladen und installiert werden.
Die folgende Kommandozeile führt dies automatisch durch. Die Versionsnummer
sollte entsprechend angepasst sein.
dnf install -y tar
curl -L https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz| \
sudo tar xvz -C /usr/local/bin/ --strip-components= 1 --wildcards '*/helm'
Installation ingress-nginx
Einrichtung des repositories
Über das Repository stehen die verschiedenen Charts für die Installation zur
Verfügung und können auch darüber upgedated werden.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
Erstellen eines Namespaces
Die Installation erfolgt in einem eigenen Namespace. Dieser kann vorab
oder beim helm install über den Parameter --create-namespace während der
Installation angelegt werden.
kubectl create namespace ingress-nginx
Installation des ingress-nginx
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-nginx --set controller.service.type= NodePort \
--set controller.kind= DaemonSet --set controller.hostNetwork= true
Prüfen des der Installation
Test des DaemonSet
kubectl get daemonset --namespace ingress-nginx
Test Installation eines nginx
Im folgenden wird ein nginx Webserver installiert und mit einem Ingress
versehen.
kubectl create deployment nginx --image= docker.io/nginx:alpine
kubectl expose deployment nginx --type= ClusterIP --port= 80
kubectl apply -f - <<MANIFEST
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
annotations: {}
spec:
ingressClassName: nginx
rules:
- host: <node dns name>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
MANIFEST
Ingress mit Basic Authentication versehen
Durch die Basic Authentication wird sichergestellt, dass nur Benutzer mit
entsprechenden Berechtigungen Zugriff auf die Website bekommen.
htpasswd Datei erzeugen
podman run --rm -ti docker.io/library/httpd htpasswd -bn \
username passwort >htpasswd
htpasswd in Secret ablegen
kubectl create secret generic basic-auth --from-file= auth = htpasswd
Im Ingress müssen nun nur noch die folgenden Annotations hinterlegt werden:
# type of authentication
nginx.ingress.kubernetes.io/auth-type: basic
# name of the secret that contains the user/password definitions
nginx.ingress.kubernetes.io/auth-secret: basic-auth
# message to display with an appropriate context why the authentication is required
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'