Wonder how to add basic authentication to Ingress? I am going to show you how to add basic authentication to Kubernetes Ingress nginx in this post.
Article Contents
Step 1: Generate user and password
First thing to do is to generate user and password for the basic authentication, we will use the htpasswd
. Let say we want to generate user admin
and password verysecret
, we will issue this command:
$ htpasswd -nb 'admin' 'verysecret' | base64
YWRtaW46JGFwcjEkUVU1cTdUMFAkRVk3M1QxNE1tdEZwdDEyU2d6VE9ILgoK
Step 2: Create the secret
Copy the generated password from previous step and use this in following secret template:
# mysecret.yaml
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: basic-auth
data:
auth: "YWRtaW46JGFwcjEkUVU1cTdUMFAkRVk3M1QxNE1tdEZwdDEyU2d6VE9ILgoK"
Apply the template:
$ kubectl apply -f mysecret.yaml
Step 3: Update Ingress
To add basic authentication to the Ingress controller, we only need to update these two annotation:
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
auth-type
: to determine the type of authentication, in this case, it isbasic
.auth-secret
: to specify the name of the secret that contains the authentication credentials. In this case, we created in previous step, its name isbasic-auth
.
This is a sample Ingress template:
# ingress.yaml
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: blog.petehouston.com
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-production"
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
spec:
tls:
- hosts:
- blog.petehouston.com
secretName: tls-blog
rules:
- host: blog.petehouston.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
Apply the Ingress and test your site on the browser.
Conclusion
That’s it, I’ve shown you how to add basic authentication to Kubernetes Ingress nginx.
For more information, please take a look at Ingress controller basic authentication documentation.
Have fun!