Hur man lägger till grundläggande HTTP -autentisering till en Kubernetes NGINX Ingress

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

NGINX Ingress är en populär Kubernetes ingångskontroller för att dirigera trafik till ditt kluster. En standard Ingress -resurs låter dig mappa HTTP -förfrågningar till dina Kubernetes -tjänster. Så här skyddar du dina rutter med grundläggande HTTP-autentisering.

Skapa en HTPasswd-fil

Se till att du ’ ve har en htpasswd -fil tillgänglig innan du tacklar Kubernetes -konfigurationen. Du kan skapa en ny enda användare htpasswd i din terminal:

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

Du kommer att uppmanas att ange lösenordet. En ny fil som kallas auth kommer att skapas i din arbetskatalog.

Därefter måste du bas64-koda din referenssträng så att den kan användas som ett värde i en Kubernetes-hemlighet:

cat auth | base64

Kopiera bas64-kodade strängen till ditt urklipp. Vi kommer att använda det i nästa avsnitt för att skapa en Kubernetes-hemlighet som innehåller dina uppgifter.

Lägga till en Kubernetes-hemlighet

NGINX Ingress refererar till htpasswd -filer som Kubernetes -hemligheter. Filens innehåll måste lagras i behörighetsnyckeln för en ogenomskinlig hemlighet. Kubernetes har också en inbyggd grundläggande-autentisk hemlig typ men den här är inte lämplig för NGINX Ingress.

Annonsering

Skapa ett nytt hemligt manifest och tillämpa det på ditt kluster med Kubectl: < /p> apiVersion: v1 kind: Secret type: Opaque metadata: name: htpasswd data: auth: & lt; base64-encoded htpasswd file & gt;

Lägg till din base64-kodade htpasswd-fil som värdet på autentiseringsnyckeln.

Ändra din Ingress

NGINX Ingress stöder flera anpassade kommentarer som låter dig fästa extra beteende till dina Ingress -resurser. För att kunna använda HTTP Basic Authentication måste du ange autotypskommentaren och ange en referens till din hemlighet.

apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: htpasswd nginx.ingress .kubernetes.io/auth-realm: & quot; Ange dina referenser & quot; spec: rules: – host: example.com http: path: – path:/backend: serviceName: example -service servicePort: 80

De tre annoteringarna konfigurerar NGINX för att kräva autentisering på varje begäran som matchas av din Ingressresurs. Den grundläggande autentiseringstypen används med autentiseringsuppgifterna från htpasswd -hemligheten som skapades tidigare. Auth-realm-anteckningen definierar meddelandet som visas för användare när de uppmanas att ange sina autentiseringsuppgifter.

Förfrågningar som matchas av denna Ingress kommer nu att kräva att användaren loggar in innan de fortsätter. Autentiseringsutmaningen visas som en popup -dialog i de flesta webbläsare. Ange användarnamnet och lösenordet för kommandot htpasswd för att autentisera dig själv.

Alternativt hemligt formulär

Hemligheten som visas ovan använder auth-filformatet . Det betyder att den har ett autentiseringsfält som innehåller base64-kodad utdata från kommandot htpasswd.

Annonsering

NGINX Ingress stöder också en annan form som kallas auth-map. I denna variant ersätts autofältet med en uppsättning nycklar som var och en ger lösenordet för en enskild användare.

apiVersion: v1 kind: Secret type: Opaque metadata: name: htpasswd data: user1: & lt; base64- kodat lösenordshash från htpasswd & gt; user2: & lt; base64-kodat lösenordshash från htpasswd & gt;

Lägg till dina användarnamn i filen och använd sedan htpasswd för att generera hash -referenser. Kontrollera htpasswd -utmatningen; det kommer att ha följande format:

användarnamn: & lt; hashed password & gt;

Ta lösenordsdelen, koda den med kommandot base64, lägg sedan till resultatet i din Kubernetes -hemlighet.

NGINX accepterar inloggningar från alla giltiga användarnamn och lösenordskombinationer som definieras i hemligheten. Detta tillvägagångssätt kan göra det enklare att skapa flera användarkonton och hjälper dig att se exakt vem som har åtkomst.

Mer avancerad autentisering

NGINX Ingress kan integreras med externa autentiseringsleverantörer om du behöver mer kontroll men vill ha en lika enkel upplevelse. Om du använder en extern auktoriseringsleverantör omdirigeras användare till webbplatsen innan de kan komma åt tjänsten bakom din ingress. Detta låter dig genomdriva en fullständig autentiseringsrutin utan att röra din backend -kod.

Annonsering

Annonsen nginx.ingress.kubernetes.io/auth-url definierar webbadressen till en extern autentiseringstjänst som ska användas. Kubernetes vidarebefordrar varje inkommande begäran till tjänsten. Användaren får endast åtkomst när tjänsten returnerar en 200 OK statuskod. Det normala flödet fortsätter sedan med att begäran fortsätter till din Kubernetes-tjänst.

När verifieringstjänsten indikerar ett fel omdirigeras användarna till sidan som anges av nginx.ingress.kubernetes.io/auth-signin URL. Detta kommer att få den ursprungliga webbadressen att omdirigera tillbaka till efter ett framgångsrikt autentiseringsförsök som en URL-parameter definierad med auth-signin-redirect-param-anteckningen.

Flera andra kommentarer gör att du kan anpassa NGINX beteende när du kommunicerar med autentiseringsplattformen. Du kan ändra HTTP -metoden som används för att göra autentiseringsförfrågningar, lägga till ytterligare rubriker och konfigurera cachning för autentiseringssvar. Det senare säkerställer att du inte ständigt träffar den externa plattformen om en användare gör flera förfrågningar till din tjänst på kort tid.

Sammanfattning

Grundläggande HTTP -autentisering är det enklaste sättet att skydda en webbplats. Det är idealiskt för interna system och iscensättningsplatser där du arbetar med en liten lista med användare och inte behöver centraliserad legitimationshantering.

Använd Basic Auth med NGINX Ingress av tillhandahålla referenser i en Kubernetes -hemlighet och ange anteckningar på dina Ingress -resurser. I ett verkligt användningsfall bör du inte ange inloggningsuppgifter i dina Kubernetes-manifest. Använd antingen Helm eller ett CI/CD -system för att på ett säkert sätt leverera värden när du använder resurserna i ditt kluster.