So fügen Sie einem Kubernetes NGINX-Ingress eine HTTP-Basisauthentifizierung hinzu

0
189
Piotr Swat/Shutterstock.com< /figure>

NGINX Ingress ist ein beliebter Kubernetes-Ingress-Controller zum Weiterleiten von Datenverkehr in Ihren Cluster. Mit einer standardmäßigen Ingress-Ressource können Sie Ihren Kubernetes-Diensten HTTP-Anfragen zuordnen. So schützen Sie Ihre Routen mit HTTP Basic Authentication.

Erstellen einer HTPasswd-Datei

Stellen Sie sicher, dass Sie’ Haben Sie eine htpasswd-Datei zur Verfügung, bevor Sie die Kubernetes-Konfiguration in Angriff nehmen. Sie können in Ihrem Terminal einen neuen Einzelbenutzer htpasswd erstellen:

apt install apache2-utils htpasswd -c auth example-user

Sie werden aufgefordert, das Passwort einzugeben. In Ihrem Arbeitsverzeichnis wird eine neue Datei namens auth erstellt.

Als Nächstes müssen Sie Ihre Anmeldedaten-Zeichenfolge base64-kodieren, damit sie als Wert in einem Kubernetes-Geheimnis verwendet werden kann:

cat auth | base64

Kopieren Sie den base64-codierten String in Ihre Zwischenablage. Wir verwenden es im nächsten Abschnitt, um ein Kubernetes-Secret mit Ihren Anmeldeinformationen zu erstellen.

Hinzufügen eines Kubernetes-Secrets

NGINX Ingress verweist auf htpasswd-Dateien als Kubernetes-Geheimnisse. Der Inhalt der Datei muss im Authentifizierungsschlüssel eines Opaque-Secrets gespeichert werden. Kubernetes verfügt auch über einen integrierten Basic-Auth-Secret-Typ, der jedoch nicht für NGINX Ingress geeignet ist.

Werbung

Erstellen Sie ein neues Secret-Manifest und wenden Sie es mit Kubectl auf Ihren Cluster an:< /p> apiVersion: v1 Art: Geheimtyp: Undurchsichtige Metadaten: Name: htpasswd data: auth: <base64-encoded htpasswd file>

Fügen Sie Ihre base64-codierte htpasswd-Datei als Wert des Authentifizierungsschlüssels hinzu.

Ändern Ihres Ingress

NGINX Ingress unterstützt mehrere benutzerdefinierte Anmerkungen, mit denen Sie Ihren Ingress-Ressourcen zusätzliches Verhalten hinzufügen können. Um die HTTP Basic Authentication zu verwenden, müssen Sie die Authentifizierungstyp-Anmerkung festlegen und einen Verweis auf Ihr Geheimnis angeben.

apiVersion: networking.k8s.io/v1beta1 Art: Ingress-Metadaten: Name: Beispiel-Ingress-Anmerkungen: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: htpasswd nginx.ingress .kubernetes.io/auth-realm: "Geben Sie Ihre Zugangsdaten ein" spec: rules: – host: example.com http: path: – path:/backend: serviceName: example-service servicePort: 80

Die drei Annotationen konfigurieren NGINX so, dass eine Authentifizierung bei jeder Anfrage erforderlich ist, die von Ihnen erfüllt wird Ingress-Ressource. Der Basisauthentifizierungstyp wird mit den Anmeldeinformationen aus dem zuvor erstellten htpasswd-Geheimnis verwendet. Die Auth-Realm-Anmerkung definiert die Nachricht, die Benutzern angezeigt wird, wenn sie aufgefordert werden, ihre Anmeldeinformationen einzugeben.

Anfragen, die von diesem Ingress abgeglichen werden, erfordern nun eine Anmeldung des Benutzers, bevor er fortfahren kann. Die Authentifizierungsherausforderung wird in den meisten Webbrowsern als Popup-Dialogfeld angezeigt. Geben Sie den Benutzernamen und das Passwort ein, die dem htpasswd-Befehl zugewiesen wurden, um sich zu authentifizieren.

Alternatives geheimes Formular

Das oben gezeigte Geheimnis verwendet das Auth-Dateiformat . Dies bedeutet, dass es ein Auth-Feld mit base64-codierten Ausgaben des Befehls htpasswd hat.

Werbung

NGINX Ingress unterstützt auch eine andere Form namens Auth-Map. In dieser Variante wird das Auth-Feld durch eine Reihe von Schlüsseln ersetzt, die jeweils das Passwort für einen einzelnen Benutzer bereitstellen.

apiVersion: v1 Art: Geheimtyp: Undurchsichtige Metadaten: Name: htpasswd data: user1: <base64- verschlüsselter Passwort-Hash von htpasswd> user2: <base64-codierter Passwort-Hash von htpasswd>

Fügen Sie der Datei Ihre Benutzernamen hinzu und verwenden Sie dann htpasswd, um gehashte Anmeldeinformationen zu generieren. Überprüfen Sie die htpasswd-Ausgabe; es hat das folgende Format:

Benutzername:<gehashtes Passwort>

Nehmen Sie den Passwortteil, codieren Sie ihn mit dem base64-Befehl und fügen Sie dann das Ergebnis zu Ihrem Kubernetes-Geheimnis hinzu.

NGINX akzeptiert Anmeldungen von jeder gültigen Kombination aus Benutzername und Passwort, die im Geheimnis definiert ist. Dieser Ansatz kann das Einrichten mehrerer Benutzerkonten erleichtern und hilft Ihnen dabei, genau zu sehen, wer Zugriff hat.

Erweiterte Authentifizierung

NGINX Ingress kann in externe Authentifizierungsanbieter integriert werden, wenn Sie mehr Kontrolle benötigen, aber eine ähnlich einfache Einrichtung wünschen. Durch die Verwendung eines externen Authentifizierungsanbieters werden Benutzer auf diese Website umgeleitet, bevor sie auf den Dienst hinter Ihrem Ingress zugreifen können. Auf diese Weise können Sie eine vollständige Authentifizierungsroutine erzwingen, ohne Ihren Back-End-Code zu berühren.

Werbung

Die Annotation nginx.ingress.kubernetes.io/auth-url definiert die URL eines zu verwendenden externen Authentifizierungsdienstes. Kubernetes leitet jede eingehende Anfrage an den Dienst weiter. Der Zugriff wird dem Benutzer nur gewährt, wenn der Dienst einen 200 OK-Statuscode zurückgibt. Der normale Ablauf wird dann mit der Weiterleitung der Anfrage an Ihren Kubernetes-Dienst fortgesetzt.

Wenn der Authentifizierungsdienst einen Fehler anzeigt, werden Benutzer auf die von nginx.ingress.kubernetes.io/auth-signin . angegebene Seite weitergeleitet URL. Dies erhält die ursprüngliche URL, auf die nach einem erfolgreichen Authentifizierungsversuch zurückgeleitet werden soll, als URL-Parameter, der mit der Annotation auth-signin-redirect-param definiert ist.

Mit mehreren anderen Anmerkungen können Sie das Verhalten von NGINX bei der Kommunikation mit der Authentifizierungsplattform optimieren. Sie können die HTTP-Methode ändern, die zum Erstellen von Authentifizierungsanforderungen verwendet wird, zusätzliche Header hinzufügen und das Caching für Authentifizierungsantworten einrichten. Letzteres stellt sicher, dass Sie nicht ständig auf die externe Plattform gelangen, wenn ein Benutzer in kurzer Zeit mehrere Anfragen an Ihren Dienst stellt.

Zusammenfassung

HTTP Basic Authentication ist die einfachste Methode zum Schutz einer Website. Es ist ideal für interne Systeme und Staging-Sites, bei denen Sie mit einer kleinen Liste von Benutzern arbeiten und keine zentrale Verwaltung von Anmeldeinformationen benötigen.

Verwenden Sie die einfache Authentifizierung mit NGINX Ingress by Angeben von Anmeldeinformationen in einem Kubernetes-Secret und Festlegen von Anmerkungen zu Ihren Ingress-Ressourcen. In einem realen Anwendungsfall sollten Sie keine Anmeldeinformationen fest in Ihre Kubernetes-Manifeste codieren. Verwenden Sie entweder Helm oder ein CI/CD-System, um sicher Werte bereitzustellen, wenn Sie die Ressourcen auf Ihren Cluster anwenden.