Come aggiungere l'autenticazione di base HTTP a un ingresso Kubernetes NGINX

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

NGINX Ingress è un popolare controller di ingresso Kubernetes per il routing del traffico nel tuo cluster. Una risorsa Ingress standard ti consente di mappare le richieste HTTP ai tuoi servizi Kubernetes. Ecco come proteggere i tuoi percorsi con l'autenticazione di base HTTP.

Creazione di un file HTPasswd

Assicurati di’ ho un file htpasswd disponibile prima di affrontare la configurazione di Kubernetes. Puoi creare un nuovo utente singolo htpasswd nel tuo terminale:

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

Ti verrà chiesto di inserire la password. Verrà creato un nuovo file chiamato auth nella directory di lavoro.

Dopodiché devi codificare in base64 la stringa delle credenziali in modo che possa essere utilizzata come valore in un segreto Kubernetes:

cat auth | base64

Copia la stringa codificata in base64 negli appunti. Lo useremo nella prossima sezione per creare un segreto Kubernetes contenente le tue credenziali.

Aggiunta di un segreto Kubernetes

NGINX Ingress fa riferimento ai file htpasswd come segreti Kubernetes. Il contenuto del file deve essere archiviato nella chiave di autenticazione di un segreto opaco. Kubernetes ha anche un tipo di segreto di autenticazione di base integrato, ma questo non è adatto per NGINX Ingress.

Pubblicità

Crea un nuovo manifest segreto e applicalo al tuo cluster con Kubectl:< /p> apiVersion: v1 tipo: tipo segreto: metadati opachi: nome: dati htpasswd: auth: file htpasswd con codifica base64>

Aggiungi il tuo file htpasswd con codifica base64 come valore della chiave di autenticazione.

Modifica del tuo Ingress

NGINX Ingress supporta diverse annotazioni personalizzate che ti consentono di associare comportamenti extra alle tue risorse Ingress. Per utilizzare l'autenticazione di base HTTP è necessario impostare l'annotazione del tipo di autenticazione e fornire un riferimento al proprio segreto.

apiVersion: networking.k8s.io/v1beta1 tipo: metadati in ingresso: nome: esempio-ingress annotazioni: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: htpasswd nginx.ingress .kubernetes.io/auth-realm: "Inserisci le tue credenziali" spec: regole: – host: example.com http: percorsi: – percorso:/backend: serviceName: example-service servicePort: 80

Le tre annotazioni configurano NGINX per richiedere l'autenticazione su ogni richiesta che corrisponde al tuo Risorsa in ingresso. Il tipo di autenticazione di base viene utilizzato con le credenziali del segreto htpasswd creato in precedenza. L'annotazione auth-realm definisce il messaggio visualizzato dagli utenti quando viene richiesto loro di inserire le proprie credenziali.

Le richieste abbinate a questo Ingress ora richiederanno all'utente di accedere prima di continuare. La verifica dell'autenticazione viene visualizzata come finestra di dialogo popup nella maggior parte dei browser Web. Inserisci il nome utente e la password forniti al comando htpasswd per autenticarti.

Modulo segreto alternativo

Il segreto mostrato sopra utilizza il formato auth-file . Ciò significa che ha un campo di autenticazione contenente l'output codificato in base64 dal comando htpasswd.

Annuncio

NGINX Ingress supporta anche un'altra forma denominata auth-map. In questa variante, il campo auth è sostituito da un insieme di chiavi che forniscono ciascuna la password per un singolo utente.

apiVersion: v1 kind: Secret type: Opaque metadata: name: htpasswd data: user1: <base64- hash della password codificata da htpasswd> user2: <hash della password con codifica base64 da htpasswd>

Aggiungi i tuoi nomi utente al file, quindi usa htpasswd per generare credenziali con hash. Ispeziona l'output di htpasswd; avrà il seguente formato:

nome utente:<password con hash>

Prendi la parte relativa alla password, codificala con il comando base64, quindi aggiungi il risultato al tuo segreto Kubernetes.

NGINX accetterà accessi da qualsiasi combinazione di nome utente e password valida definita nel segreto. Questo approccio può semplificare la configurazione di più account utente e ti aiuta a vedere esattamente chi ha accesso.

Aut. più avanzata

NGINX Ingress può integrarsi con provider di autenticazione esterni se hai bisogno di maggiore controllo ma desideri un'esperienza di configurazione altrettanto semplice. L'utilizzo di un provider di autenticazione esterno reindirizzerà gli utenti a quel sito prima che possano accedere al servizio dietro il tuo Ingress. Ciò ti consente di applicare una routine di autenticazione completa senza toccare il codice di backend.

Pubblicità

L'annotazione nginx.ingress.kubernetes.io/auth-url definisce l'URL di un servizio di autenticazione esterno da utilizzare. Kubernetes inoltrerà ogni richiesta in arrivo al servizio. L'accesso sarà concesso all'utente solo quando il servizio restituisce un codice di stato 200 OK. Il flusso normale continua quindi con la richiesta che procede nel tuo servizio Kubernetes.

Quando il servizio di autenticazione indica un errore, gli utenti verranno reindirizzati alla pagina indicata da nginx.ingress.kubernetes.io/auth-signin URL. Questo riceverà l'URL originale a cui reindirizzare dopo un tentativo di autenticazione riuscito come parametro URL definito con l'annotazione auth-signin-redirect-param.

Diverse altre annotazioni consentono di modificare il comportamento di NGINX durante la comunicazione con la piattaforma di autenticazione. È possibile modificare il metodo HTTP utilizzato per effettuare richieste di autenticazione, aggiungere intestazioni aggiuntive e impostare la memorizzazione nella cache per le risposte di autenticazione. Quest'ultimo ti assicura di non colpire continuamente la piattaforma esterna se un utente effettua diverse richieste al tuo servizio in un breve periodo di tempo.

Riepilogo

L'autenticazione di base HTTP è il modo più semplice per proteggere un sito web. È l'ideale per i sistemi interni e i siti di staging in cui si lavora con un piccolo elenco di utenti e non è necessaria la gestione centralizzata delle credenziali.

Utilizzare l'autenticazione di base con NGINX Ingress di fornendo credenziali in un segreto Kubernetes e impostando annotazioni sulle tue risorse Ingress. In un caso d'uso reale, non dovresti codificare le credenziali nei manifesti di Kubernetes. Utilizza Helm o un sistema CI/CD per fornire valori in modo sicuro nel momento in cui applichi le risorse al tuo cluster.