Securing an ingress with basic auth

Securing an ingress with basic auth

This article describes how to use basic auth to protect an ingress in Kuberentes. It it based on this page.

To protect an ingress using basic auth, a secret must be created. The data of this secret can be generated using htpasswd:

htpasswd -c auth myUsername

Where myUsername is to be replaced by whatever you want. This creates a filed called auth in the working directory

Kubectl provides a convenient command to automatically turn the content of the auth file into a secret:

kubectl create secret generic my-app-secret --from-file=auth

Then, the ingress can be adapted as so

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-app
  annotations:
    # type of authentication
    nginx.ingress.kubernetes.io/auth-type: basic
    # name of the secret that contains the user/password definitions
    nginx.ingress.kubernetes.io/auth-secret: my-app-secret 
    # message to display with an appropriate context why the authentication is required
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-app
          servicePort: 80