HTTP-basisverificatie toevoegen aan een Kubernetes NGINX Ingress

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

NGINX Ingress is een populaire Kubernetes ingress-controller voor het routeren van verkeer naar uw cluster. Met een standaard Ingress-resource kunt u HTTP-verzoeken toewijzen aan uw Kubernetes-services. Hier leest u hoe u uw routes kunt beschermen met HTTP Basic Authentication.

Een HTPasswd-bestand maken

Zorg ervoor dat u’ heb een htpasswd-bestand beschikbaar voordat u de Kubernetes-configuratie aanpakt. U kunt een nieuwe single user htpasswd in uw terminal aanmaken:

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

U wordt gevraagd het wachtwoord in te voeren. Er wordt een nieuw bestand met de naam auth in uw werkmap gemaakt.

Vervolgens moet u uw referentiereeks base64-encoderen zodat deze kan worden gebruikt als een waarde in een Kubernetes-geheim:

cat auth | base64

Kopieer de met base64 gecodeerde tekenreeks naar uw klembord. We zullen het in de volgende sectie gebruiken om een ​​Kubernetes-geheim te maken met uw inloggegevens.

Een Kubernetes-geheim toevoegen

NGINX Ingress verwijst naar htpasswd-bestanden als Kubernetes-geheimen. De inhoud van het bestand moet worden opgeslagen in de auth-sleutel van een ondoorzichtig geheim. Kubernetes heeft ook een ingebouwd geheim type basisverificatie, maar dit is niet geschikt voor NGINX Ingress.

Advertentie

Maak een nieuw geheim manifest en pas dit toe op uw cluster met Kubectl:< /p> apiVersion: v1 soort: Geheim type: Ondoorzichtige metadata: naam: htpasswd data: auth: <base64-gecodeerd htpasswd-bestand>

Voeg je base64-gecodeerde htpasswd-bestand toe als de waarde van de auth-sleutel.

Uw Ingress aanpassen

NGINX Ingress ondersteunt verschillende aangepaste annotaties waarmee u extra gedrag aan uw Ingress-bronnen kunt koppelen. Om HTTP Basic Authentication te gebruiken, moet je de annotatie van het auth-type instellen en een verwijzing naar je geheim opgeven.

apiVersion: networking.k8s.io/v1beta1 soort: Ingress-metadata: naam: voorbeeld-ingress annotaties: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: htpasswd nginx.ingress .kubernetes.io/auth-realm: "Voer uw gegevens in" spec: rules: – host: example.com http: paths: – path:/backend: serviceName: example-service servicePort: 80

De drie annotaties configureren NGINX om authenticatie te vereisen bij elk verzoek dat door uw Ingress-bron. Het basisverificatietype wordt gebruikt met de referenties van het htpasswd-geheim dat eerder is gemaakt. De auth-realm-annotatie definieert het bericht dat wordt weergegeven aan gebruikers wanneer ze worden gevraagd hun inloggegevens in te voeren.

Verzoeken die door deze Ingress worden gematcht, vereisen nu dat de gebruiker inlogt voordat ze verder gaan. De authenticatie-uitdaging wordt in de meeste webbrowsers weergegeven als een pop-upvenster. Voer de gebruikersnaam en het wachtwoord in die bij het htpasswd-commando zijn geleverd om uzelf te authenticeren.

Alternatieve geheime vorm

Het hierboven getoonde geheim gebruikt het auth-bestandsformaat . Dit betekent dat het een auth-veld heeft met base64-gecodeerde uitvoer van het htpasswd-commando.

Advertentie

NGINX Ingress ondersteunt ook een andere vorm genaamd auth-map. In deze variant wordt het auth-veld vervangen door een set sleutels die elk het wachtwoord voor een individuele gebruiker verschaffen.

apiVersion: v1 soort: Secret type: Ondoorzichtige metadata: naam: htpasswd data: user1: <base64- gecodeerde wachtwoordhash van htpasswd> user2: <base64-gecodeerde wachtwoordhash van htpasswd>

Voeg uw gebruikersnamen toe aan het bestand en gebruik vervolgens htpasswd om gehashte inloggegevens te genereren. Inspecteer de htpasswd-uitvoer; het zal het volgende formaat hebben:

gebruikersnaam:<gehasht wachtwoord>

Neem het wachtwoordgedeelte, codeer het met het base64-commando en voeg het resultaat toe aan uw Kubernetes-geheim.

NGINX accepteert aanmeldingen van elke geldige gebruikersnaam en wachtwoordcombinatie die in het geheim is gedefinieerd. Deze aanpak kan het gemakkelijker maken om meerdere gebruikersaccounts in te stellen en helpt u precies te zien wie toegang heeft.

Meer geavanceerde authenticatie

NGINX Ingress kan worden geïntegreerd met externe authenticatieproviders als je meer controle nodig hebt, maar een vergelijkbare eenvoudige installatie-ervaring wilt. Als u een externe auth-provider gebruikt, worden gebruikers naar die site omgeleid voordat ze toegang hebben tot de Service achter uw Ingress. Hiermee kunt u een volledige authenticatieroutine afdwingen zonder uw backend-code aan te raken.

Advertentie

De annotatie nginx.ingress.kubernetes.io/auth-url definieert de URL van een externe authenticatieservice die moet worden gebruikt. Kubernetes stuurt elk binnenkomend verzoek door naar de service. Toegang wordt alleen verleend aan de gebruiker wanneer de service een 200 OK-statuscode retourneert. De normale stroom gaat dan verder met het verzoek dat doorgaat naar uw Kubernetes-service.

Als de auth-service een fout aangeeft, worden gebruikers omgeleid naar de pagina die wordt aangegeven door de nginx.ingress.kubernetes.io/auth-signin URL. Dit ontvangt de oorspronkelijke URL waarnaar moet worden omgeleid na een succesvolle authenticatiepoging als een URL-parameter die is gedefinieerd met de annotatie auth-signin-redirect-param.

Met verschillende andere annotaties kunt u het gedrag van NGINX aanpassen bij de communicatie met het authenticatieplatform. U kunt de HTTP-methode wijzigen die wordt gebruikt om verificatieverzoeken te doen, extra headers toevoegen en caching instellen voor verificatiereacties. Dit laatste zorgt ervoor dat u niet voortdurend het externe platform bereikt als een gebruiker in korte tijd meerdere verzoeken aan uw service doet.

Samenvatting

HTTP Basic Authentication is de eenvoudigste manier om een ​​website te beschermen. Het is ideaal voor interne systemen en staging-sites waar u met een kleine lijst met gebruikers werkt en geen gecentraliseerd referentiebeheer nodig hebt.

Gebruik Basic Auth met NGINX Ingress door het verstrekken van referenties in een Kubernetes-geheim en het instellen van annotaties op uw Ingress-resources. In een praktijksituatie moet u inloggegevens niet hardcoderen in uw Kubernetes-manifesten. Gebruik Helm of een CI/CD-systeem om veilig waarden te leveren op het moment dat u de resources op uw cluster toepast.