Lorsque vous exécutez des workloads dans un cluster Google Kubernetes Engine (GKE), il est souvent nécessaire de sécuriser vos applications en utilisant une authentification HTTP Basic. Si vous travaillez avec une image Docker publique que vous ne pouvez pas modifier, l’utilisation d’un contrôleur Ingress NGINX offre une solution élégante pour ajouter cette couche de sécurité sans modifier le code de votre application.
Prérequis
- Un cluster GKE en fonctionnement
- Une application déployée sur un workload GKE
gcloud
installer sur votre machine ou utilisercloud shell
Étape 1 : Configuré kubectl
pour interagir avec votre cluster
Utiliser la commande suivant pour configurer kubectl
dans votre terminal ou cloud shell
gcloud container clusters get-credentials my-cluster-name --region cluster-region
Étape 2 : Installer le Contrôleur Ingress NGINX sur GKE
Tout d’abord, vous devez déployer un contrôleur Ingress NGINX si ce n’est pas déjà fait. Suivez le guide d’installation officiel du Contrôleur Ingress NGINX pour Kubernetes.
TL;DR, Si vous avez un cluster public et les droits d’admin, il suffit d’exécuter la commande suivante :
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml
Étape 3 : Créer un Secret pour l’Authentification HTTP Basic
les instructions officielles Kubernetes : https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
Create htpasswd file
htpasswd -c auth foo
New password: <bar>
New password
Re-type new password:
Adding password for user foo
Convert htpasswd into a secret
kubectl create secret generic basic-auth --from-file=auth
secret "basic-auth" created
Étape 4 : Créer un Service et un Ingress
Via l’interface web de GCP, aller sur votre workload et choisissez l’option EXPOSE
pour créer un Service lié à votre workload.
Une fois votre Service créé, aller sur la liste des services via l’interface web et sélectionné votre service pour créer un nouvel Ingress associé.
Attention, si vous créez un Ingress via kubectl
cela ne marchera pas. En effet, GKE doit créer les mapping, routing, NEG. Cela se fait automatiquement si vous passez par l’interface web
Étape 5 : Modifier les annotations de la Ressource Ingress
Ensuite, nous modifions notre ressource Ingress pour utiliser le secret d’authentification de base. Cela indique à NGINX de protéger votre application avec une authentification HTTP Basic.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/auth-type: "basic"
nginx.ingress.kubernetes.io/auth-secret: "basic-auth"
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"