Kubernetes

Déployez FoxIDs dans votre cluster Kubernetes (K8s) ou Docker Desktop avec Kubernetes activé.

Ceci décrit un déploiement par défaut et une première connexion, ainsi que quelques considérations. Il est attendu que vous deviez personnaliser les fichiers yaml pour répondre à vos besoins, préférences et environnement.

Une installation FoxIDs est comme un seau, il n’y a pas de dépendances externes et il est facile d’atteindre une très haute disponibilité avec peu d’effort. FoxIDs se met à jour en mettant à jour les deux images Docker www.foxids.com/foxids:x.x.x et www.foxids.com/foxidscontrol:x.x.x vers une nouvelle version. Les nouvelles versions de FoxIDs sont backward compatible. Veuillez consulter les notes de version avant de mettre à jour. Vous y trouverez également la version actuelle de l’image Docker.

Une licence valide est requise pour accéder aux versions de FoxIDs. À partir de là, vous pouvez générer un secret pour vous authentifier auprès du registre d’images Docker sur www.foxids.com, qui utilise l’authentification Basic.

Prérequis :

  • Vous disposez d’un cluster Kubernetes ou de Docker Desktop avec Kubernetes activé.
  • Vous avez des connaissances de base sur Kubernetes.
  • Vous avez installé kubectl.

Voici une liste de commandes utiles à la fin de cette description.

Ce déploiement inclut :

  • Deux sites web, un pour FoxIDs et un pour FoxIDs Control (le client d’administration et l’API) dans deux images Docker www.foxids.com/foxids:x.x.x et www.foxids.com/foxidscontrol:x.x.x.
  • Les deux sites web sont exposés sur deux domaines différents sécurisés par des certificats Let’s Encrypt générés automatiquement.
  • MongoDB est une base de données NoSQL qui contient toutes les données, y compris les tenants, environnements et utilisateurs. Déployée avec l’image Docker officielle MongoDB. Vous pouvez éventuellement utiliser votre propre instance PostgreSQL au lieu de MongoDB.
  • Par défaut, le cache est stocké dans la base de données. Vous pouvez utiliser un cache Redis si vous installez un cluster FoxIDs à haut débit. Le cache conserve les séquences (par exemple, connexion et déconnexion) et gère des compteurs pour sécuriser l’authentification contre diverses attaques, ainsi qu’un cache de données (Redis uniquement) pour améliorer les performances. Redis est déployé avec l’image Docker officielle Redis.
  • Les journaux sont écrits sur stdout où ils peuvent être collectés par Kubernetes.

Deployment

Le déploiement est réalisé dans l’ordre décrit.

Préparer

Téléchargez les fichiers de configuration Kubernetes yaml ici et placez-les dans un dossier sur votre machine, par exemple C:\FoxIDs\Kubernetes.

Ouvrez une console et accédez au dossier Kubernetes.

Volumes persistants

Vous avez besoin de volumes persistants pour MongoDB et, éventuellement, pour Redis.

Dans un cluster Kubernetes, utilisez ou créez des volumes persistants adaptés et créez une persistent volume claim nommée mongo-data-pvc pour MongoDB et, éventuellement, une autre pour Redis nommée redis-data-pvc.

Vous pouvez utiliser le provisionnement dynamique du stockage avec une StorageClass.

Créer une persistent volume claim pour Mongo

kubectl apply -f k8s-mongo-pvc-dynamic.yaml

Créer éventuellement une persistent volume claim pour Redis

kubectl apply -f k8s-redis-pvc-dynamic.yaml

Kubernetes dans Docker Desktop

Si vous utilisez Kubernetes dans Docker Desktop, vous pouvez créer des volumes persistants sur le système de fichiers hôte - déconseillé pour la production.

Créer un persistent volume pour MongoDB

kubectl apply -f k8s-mongo-pv-dockerdesktop.yaml

Créer une persistent volume claim pour MongoDB

kubectl apply -f k8s-mongo-pvc-dockerdesktop.yaml

Créer éventuellement un persistent volume pour Redis

kubectl apply -f k8s-redis-pv-dockerdesktop.yaml

Créer éventuellement une persistent volume claim pour Redis

kubectl apply -f k8s-redis-pvc-dockerdesktop.yaml

Espace de noms

Ce guide utilise généralement l’espace de noms foxids, envisagez de le modifier en fonction de votre environnement Kubernetes.

Créer un espace de noms

kubectl create namespace foxids

MongoDB

Modifiez le nom d’utilisateur et le mot de passe de MongoDB dans k8s-mongo-secret.yaml. Le nom d’utilisateur et le mot de passe sont encodés en base64.

Vous encodez « the text » en base64 dans un invite de commandes selon votre plateforme :

Windows

powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"the text\"))"

Linux / Mac

echo -n "the text" | base64

Ajouter le secret MongoDB

kubectl apply -f k8s-mongo-secret.yaml -n foxids

Créer MongoDB Exposez éventuellement MongoDB sur le port 27017 en décommentant LoadBalancer

kubectl apply -f k8s-mongo-deployment.yaml -n foxids

Ajouter un ConfigMap pour le service MongoDB

kubectl apply -f k8s-mongo-configmap.yaml -n foxids

Utiliser éventuellement PostgreSQL au lieu de MongoDB

Modifiez la valeur du nom d’utilisateur dans postgres-username et la valeur du mot de passe dans postgres-password pour correspondre à votre instance PostgreSQL dans k8s-postgres-secret.yaml. Le nom d’utilisateur et le mot de passe sont encodés en base64.

Ajouter le secret PostgreSQL

kubectl apply -f k8s-postgres-secret.yaml -n foxids

Modifier le point de terminaison de la base PostgreSQL dans postgres-db pour correspondre à votre instance PostgreSQL dans k8s-postgres-configmap.yaml

Ajouter un ConfigMap pour le service PostgreSQL

kubectl apply -f k8s-postgres-configmap.yaml -n foxids

Utiliser éventuellement Redis

Créer éventuellement Redis

kubectl apply -f k8s-redis-deployment.yaml -n foxids

Ajouter éventuellement un ConfigMap pour le service Redis

kubectl apply -f k8s-redis-configmap.yaml -n foxids

Sites web FoxIDs

Domaines Les deux sites FoxIDs sont configurés pour utiliser deux domaines que vous créez et gérez dans votre DNS. Configurez le fichier k8s-foxids-deployment.yaml avec vos domaines :

  • Le domaine du site FoxIDs https://id.itfoxtec.com (deux endroits dans le fichier) doit être remplacé par votre domaine - id.my-domain.com
  • Le domaine du site FoxIDs Control https://control.itfoxtec.com doit être remplacé par votre domaine - control.my-domain.com

Fournisseur d’email Vous pouvez configurer un fournisseur d’email global ou configurer ultérieurement des fournisseurs d’email par environnement. FoxIDs prend en charge l’envoi d’emails avec SendGrid et SMTP.

Le fournisseur d’email global est configuré dans le fichier k8s-foxids-deployment.yaml sur le conteneur/pod foxids dans la section env:. Cet exemple montre comment ajouter Outlook / Microsoft 365 avec SMTP :

- name: "Settings__Smtp__FromEmail"
    value: "my@email-address.org"
- name: "Settings__Smtp__FromName" # Optional from name associated to the email address
    value: "e.g, my company name"
- name: "Settings__Smtp__Host"
    value: "smtp.office365.com"
- name: "Settings__Smtp__Port"
    value: "587"
- name: "Settings__Smtp__Username"
    value: "my@email-address.com"
- name: "Settings__Smtp__Password"
    value: "xxxxxxx"

Important si vous utilisez PostgreSQL Modifiez la configuration de la base de données et du cache dans k8s-foxids-deployment.yaml (deux endroits dans le fichier).

Sélectionnez PostgreSQL comme base de données au lieu de MongoDb

- name: "Settings__Options__DataStorage"
   # value: "MongoDb"
   value: "PostgreSql"  # PostgreSql database

Sélectionnez PostgreSQL comme cache au lieu de MongoDb, sauf si vous utilisez Redis

- name: "Settings__Options__Cache"
   # value: "MongoDb"
   value: "PostgreSql"  # Cache in PostgreSql database
   # value: "Redis"  # Cache in Redis

Décommentez la configuration d’accès PostgreSQL

- name: POSTGRES_USERNAME
    valueFrom:
    secretKeyRef:
        name: postgres-secret
        key: postgres-username
- name: POSTGRES_PASSWORD
    valueFrom:
    secretKeyRef:
        name: postgres-secret
        key: postgres-password
- name: POSTGRES_SERVER
    valueFrom:
    configMapKeyRef:
        name: postgres-configmap
        key: database_url
- name: "Settings__PostgreSql__ConnectionString"
    value: "Host=$(POSTGRES_SERVER);Username=$(POSTGRES_USERNAME);Password=$(POSTGRES_PASSWORD);Database=FoxIDs"

Important si vous utilisez Redis Modifiez la configuration du cache dans k8s-foxids-deployment.yaml (deux endroits dans le fichier).

Sélectionnez Redis comme cache au lieu de MongoDb

- name: "Settings__Options__Cache"
   # value: "MongoDb"
   # value: "PostgreSql"  # Cache in PostgreSql database
   value: "Redis"  # Cache in Redis

Décommentez la configuration d’accès Redis

- name: REDIS_SERVER
    valueFrom:
    configMapKeyRef:
        name: redis-configmap
        key: database_url
- name: "Settings__RedisCache__ConnectionString"
    value: "$(REDIS_SERVER):6379"

Déployer Définissez le nom d’utilisateur sur votre ID client et le mot de passe sur votre pull secret pour le registre Docker de FoxIDs. Créez ensuite le secret de registre.

kubectl create secret docker-registry foxids-registry-secret --docker-server=www.foxids.com --docker-username=<customer-id> --docker-password=<pull-secret> -n foxids

Créer les deux sites web FoxIDs

kubectl apply -f k8s-foxids-deployment.yaml -n foxids

La configuration nécessite un contrôleur Nginx. Vous pouvez éventuellement modifier la configuration pour utiliser un autre contrôleur.

Prérequis :

  • Vous avez l’installateur Helm. Installer Helm sur Windows avec cette commande CMD winget install Helm.Helm

Installer le contrôleur Ingress-Nginx avec deux commandes

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx --force-update
helm -n ingress-nginx install ingress-nginx ingress-nginx/ingress-nginx --create-namespace

Vérifier éventuellement l’installation d’Ingress-Nginx

kubectl get pod -n ingress-nginx

Si vous réessayez dans quelques minutes, vous devriez obtenir un EXTERNAL-IP

kubectl get svc -n ingress-nginx ingress-nginx-controller

Les enregistrements DNS des deux domaines doivent pointer vers l’adresse IP de l’installation pour permettre la validation en ligne de Let’s Encrypt. Le pare-feu doit accepter les requêtes sur les ports 80 et 443. Let’s Encrypt valide la propriété du domaine sur le port 80.

Mettre éventuellement à l’échelle le contrôleur Ingress-Nginx

kubectl scale deployment ingress-nginx-controller -n ingress-nginx --replicas=2

Installer Cert-manager avec deux commandes

helm repo add jetstack https://charts.jetstack.io --force-update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set crds.enabled=true

Vérifier éventuellement l’installation de Cert-manager

kubectl get pods -n cert-manager

Ajoutez votre email dans le fichier k8s-letsencrypt-issuer.yaml (deux endroits).

Configurer Let’s Encrypt

kubectl apply -f k8s-letsencrypt-issuer.yaml -n foxids

Le fichier k8s-foxids-ingress-deployment.yaml est configuré avec les domaines :

  • Le domaine du site FoxIDs id.itfoxtec.com (deux endroits dans le fichier) doit être remplacé par votre domaine - id.my-domain.com
  • Le domaine du site FoxIDs Control control.itfoxtec.com (deux endroits dans le fichier) doit être remplacé par votre domaine - control.my-domain.com

Pensez à commencer avec Let’s Encrypt en staging pour éviter de dépasser la limite de débit en production (les certificats de staging ne sont pas approuvés par le navigateur). Vous pouvez sélectionner staging ou production dans le fichier k8s-foxids-ingress-deployment.yaml, configuré par défaut pour la production.

Ajouter l’ingress avec les domaines liés aux certificats

kubectl apply -f k8s-foxids-ingress-deployment.yaml -n foxids

Important ! L’ingress est installé avec les annotations nginx.ingress.kubernetes.io/proxy-buffers-number: "4" et nginx.ingress.kubernetes.io/proxy-buffer-size: "32k" pour prendre en charge SAML 2.0 où les réponses HTTP peuvent être assez volumineuses.

Vérifier éventuellement l’ingress

kubectl get ingress -n foxids

Vérifier éventuellement l’émetteur de certificats

kubectl describe ClusterIssuer letsencrypt-production -n foxids
#staging
# kubectl describe ClusterIssuer letsencrypt-staging -n foxids

Vérifier éventuellement si le certificat est prêt (READY doit être True)

kubectl get certificate -n foxids

Et vérifier éventuellement le certificat

kubectl describe certificate letsencrypt-production -n foxids
#staging
# kubectl describe certificate letsencrypt-staging -n foxids

First login

Ouvrez le domaine de votre site FoxIDs Control dans un navigateur. Il doit rediriger vers le site FoxIDs où vous vous connectez avec l’utilisateur administrateur par défaut admin@foxids.com et le mot de passe FirstAccess! (vous devez changer le mot de passe lors de la première connexion). Vous êtes ensuite redirigé vers le site FoxIDs Control dans le tenant master. Vous pouvez ajouter d’autres utilisateurs administrateurs dans le tenant master.

Ensuite, cliquez sur le tenant main et authentifiez-vous à nouveau avec le même utilisateur administrateur par défaut admin@foxids.com et le mot de passe FirstAccess! (vous devez à nouveau changer le mot de passe).

L’utilisateur administrateur par défaut et le mot de passe sont identiques pour le tenant master et le tenant main, mais ce sont deux utilisateurs différents.

Vous êtes maintenant connecté au tenant main et pouvez commencer à configurer vos applications et méthodes d’authentification.

Données de démarrage

La base de données est automatiquement amorcée en fonction des domaines configurés. Par conséquent, vous devez supprimer la base de données si les domaines changent. Pour supprimer les données, vous pouvez soit arrêter le pod de base de données et supprimer le dossier ou les fichiers physiques de la base de données. Ou exposer le point de terminaison de la base et ouvrir la base dans MongoDB Compass (télécharger MongoDB Compass (GUI)) et supprimer la base de données. Ensuite, le pod FoxIDs Control doit être redémarré pour initier un nouveau processus d’amorçage.

Option avancée : les domaines peuvent également être modifiés manuellement dans la base de données.

Considerations

Cette section répertorie certaines considérations de déploiement et de sécurité.

Kubernetes Service Mesh Il est recommandé d’utiliser un Kubernetes Service Mesh pour obtenir une architecture zero-trust, où le trafic interne est sécurisé par mTLS (mutual TLS) et le chiffrement.

PKI interne / CA racine Si le trafic interne est terminé et ré-chiffré par un proxy ou un service mesh avec une CA racine interne, configurez les conteneurs FoxIDs pour faire confiance à cette CA. Voir Kubernetes internal CA.

Espace de noms Ce guide utilise généralement l’espace de noms foxids, envisagez de le modifier en fonction de votre environnement Kubernetes.

Créer un espace de noms

kubectl create namespace test

Lister les espaces de noms

kubectl get namespaces

Appliquer l’espace de noms lors de la création d’un pod

kubectl apply -f xxx.yaml --namespace=test

Journalisation Tous les journaux FoxIDs, y compris les erreurs, traces et événements, sont écrits sur stdout. Considérez comment gérer les journaux d’application et collecter les journaux des conteneurs.

Limitation de débit Configurez des limites de connexions et de débits de transmission dans k8s-foxids-ingress-deployment.yaml.

MongoDB Operator Envisagez MongoDB Operator si vous avez besoin de plusieurs instances de MongoDB.

  1. MongoDB Community Kubernetes Operator (free)
  2. MongoDB Enterprise Kubernetes Operator

Redis multiple pods / cluster Envisagez une configuration Redis mise à l’échelle si vous avez besoin de plusieurs instances de Redis.

Sauvegarde Déterminez si les données MongoDB doivent être sauvegardées et à quel niveau, voici trois solutions possibles. Il est considéré comme moins important de sauvegarder Redis.

  1. Sauvegarder le stockage physique du volume persistant.
  2. Sauvegarde avec un Cron Job Kubernetes.
  3. La sauvegarde est prise en charge dans MongoDB Enterprise Kubernetes Operator.

Update

FoxIDs se met à jour en mettant à jour chaque image FoxIDs vers une nouvelle version, les deux images FoxIDs sont rétrocompatibles. Mettez d’abord à jour l’image foxids/foxids puis l’image foxids/foxids-control.

Il devrait également être possible de mettre à jour les images MongoDB et Redis avec les données dans les volumes persistants.

Useful commands

Voici une liste de commandes qui peuvent être utiles pendant le déploiement pour consulter des détails et apporter des modifications.

Créer un pod

kubectl apply -f ks8-xxx.yaml

Supprimer un pod

kubectl delete -f ks8-xxx.yaml

Lister les pods

kubectl get pods

Obtenir la description d’un pod

kubectl describe pod xxx

Obtenir les journaux d’un pod

kubectl logs xxx

Lister les déploiements

kubectl get deployments

Lister les services

kubectl get services

Lister les secrets

kubectl get secrets

Lister les volumes persistants

kubectl get pv

Lister les persistent volume claims

kubectl get pvc

Lister l’ingress

kubectl get ingress

Décrire l’ingress

kubectl describe ingress xxx

Votre confidentialité

Nous utilisons des cookies pour améliorer votre expérience sur nos sites. Cliquez sur « Accepter tous les cookies » pour accepter l'utilisation des cookies. Pour refuser les cookies non essentiels, cliquez sur « Cookies nécessaires uniquement ».

Consultez notre politique de confidentialité pour en savoir plus