Kubernetes

Deploy FoxIDs in je Kubernetes (K8s) cluster of Docker Desktop met Kubernetes ingeschakeld.

Dit is een beschrijving van hoe je een standaard deployment uitvoert en voor het eerst inlogt, evenals enkele overwegingen. Er wordt verwacht dat je de yaml bestanden aanpast aan je behoeften, voorkeuren en omgeving.

Een FoxIDs installatie is als een bucket, er zijn geen externe dependencies en het is eenvoudig om met weinig moeite een zeer hoge uptime te bereiken. FoxIDs wordt geüpdatet door de twee Docker images www.foxids.com/foxids:x.x.x en www.foxids.com/foxidscontrol:x.x.x naar een nieuwe versie te updaten. Nieuwe FoxIDs releases zijn backward compatible. Bekijk de release notes voordat je update. Daar vind je ook de huidige Docker image versie.

Een geldige licentie is vereist om toegang te krijgen tot de FoxIDs releases. Van daaruit kun je een secret genereren om te authenticeren bij het Docker image register op www.foxids.com, dat Basic authentication gebruikt.

Voorwaarden:

  • Je hebt een Kubernetes cluster of Docker Desktop met Kubernetes ingeschakeld.
  • Je hebt basiskennis van Kubernetes.
  • Je hebt kubectl geïnstalleerd.

Dit is een lijst met handige commando's aan het einde van deze beschrijving.

Deze deployment omvat:

  • Twee websites: één voor FoxIDs en één voor FoxIDs Control (de admin Client en API) in twee Docker images www.foxids.com/foxids:x.x.x en www.foxids.com/foxidscontrol:x.x.x.
  • De twee websites worden op twee verschillende domeinen blootgesteld en beveiligd met automatisch gegenereerde Let's Encrypt certificaten.
  • MongoDB is een NoSQL database en bevat alle data inclusief tenants, omgevingen en gebruikers. Gedeployed met het officiële MongoDB Docker image. Je kunt optioneel je eigen PostgreSQL instance gebruiken in plaats van MongoDB.
  • Standaard wordt de cache in de database bewaard. Gebruik optioneel een Redis cache als je een FoxIDs cluster met hoge throughput installeert. De cache bevat sequenties (bijv. login en logout) en counters om authenticatie te beveiligen tegen verschillende aanvallen en data cache (alleen Redis) om performance te verbeteren. Redis wordt gedeployed met het officiële Redis Docker image.
  • Logs worden naar stdout geschreven waar Kubernetes ze kan oppakken.

Deployment

De deployment wordt in de beschreven volgorde uitgevoerd.

Voorbereiden

Download de Kubernetes yaml configuratiebestanden hier en plaats ze in een map op je machine, bijvoorbeeld C:\FoxIDs\Kubernetes.

Open een console en navigeer naar de map Kubernetes.

Persistente volumes

Je hebt persistente volumes nodig voor MongoDB en optioneel Redis.

Gebruik of maak geschikte persistente volumes in een Kubernetes cluster en maak een persistent volume claim met de naam mongo-data-pvc voor MongoDB en optioneel één voor Redis met de naam redis-data-pvc.

Je kunt mogelijk dynamische storage provisioning gebruiken met StorageClass.

Maak persistent volume claim voor Mongo

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

Maak optioneel persistent volume claim voor Redis

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

Kubernetes in Docker Desktop

Als je Kubernetes in Docker Desktop gebruikt, kun je persistente volumes op het host file system maken - niet aanbevolen voor productie.

Maak persistent volume voor MongoDB

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

Maak persistent volume claim voor MongoDB

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

Maak optioneel persistent volume voor Redis

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

Maak optioneel persistent volume claim voor Redis

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

Namespace

Deze gids gebruikt doorgaans de namespace foxids, overweeg om de namespace te wijzigen zodat deze past bij je Kubernetes omgeving.

Maak namespace

kubectl create namespace foxids

MongoDB

Wijzig de gebruikersnaam en het wachtwoord voor MongoDB in k8s-mongo-secret.yaml. De gebruikersnaam en het wachtwoord zijn base64 gecodeerd.

Je base64 encodeert "de tekst" in een command prompt afhankelijk van je platform:

Windows

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

Linux / Mac

echo -n "the text" | base64

Voeg de MongoDB secret toe

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

Maak MongoDB
Exposeer optioneel MongoDB op poort 27017 door de LoadBalancer te uncommenten

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

Voeg een ConfigMap toe voor de MongoDB service

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

Optioneel PostgreSQL gebruiken in plaats van MongoDB

Wijzig de username waarde in postgres-username en de password waarde in postgres-password zodat deze overeenkomen met je PostgreSQL instance in k8s-postgres-secret.yaml. De gebruikersnaam en het wachtwoord zijn base64 gecodeerd.

Voeg de PostgreSQL secret toe

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

Wijzig het PostgreSQL database endpoint in postgres-db zodat dit overeenkomt met je PostgreSQL instance in k8s-postgres-configmap.yaml

Voeg een ConfigMap toe voor de PostgreSQL service

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

Optioneel Redis gebruiken

Maak optioneel Redis

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

Voeg optioneel een ConfigMap toe voor de Redis service

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

FoxIDs websites

Domeinen
De twee FoxIDs websites zijn geconfigureerd om twee domeinen te gebruiken die je in je DNS beheert. Configureer het k8s-foxids-deployment.yaml bestand met je gekozen domeinen:

  • Het FoxIDs site domein https://id.itfoxtec.com (twee plekken in het bestand) wordt aangepast naar je domein - id.my-domain.com
  • Het FoxIDs Control site domein https://control.itfoxtec.com wordt aangepast naar je domein - control.my-domain.com

Email provider
Je kunt optioneel een globale email provider configureren of later per omgeving email providers configureren. FoxIDs ondersteunt het verzenden van e-mails met SendGrid en SMTP.

De globale email provider wordt geconfigureerd in het k8s-foxids-deployment.yaml bestand op de foxids container/pod in de env: sectie.
Dit voorbeeld laat zien hoe je Outlook / Microsoft 365 met SMTP toevoegt:

- name: "Settings__Smtp__FromEmail"
    value: "my@email-address.org"
- name: "Settings__Smtp__FromName" # Optionele afzendernaam geassocieerd met het e-mailadres 
    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"

Belangrijk als je PostgreSQL gebruikt
Wijzig de database- en cacheconfiguratie in k8s-foxids-deployment.yaml (twee plekken in het bestand).

Selecteer PostgreSQL als database in plaats van MongoDb

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

Selecteer PostgreSQL als cache in plaats van MongoDb tenzij je Redis gebruikt

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

Uncomment de PostgreSQL access configuratie

- 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"

Belangrijk als je Redis gebruikt
Wijzig de cacheconfiguratie in k8s-foxids-deployment.yaml (twee plekken in het bestand).

Selecteer Redis als cache in plaats van MongoDb

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

Uncomment de Redis access configuratie

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

Deploy
Stel de gebruikersnaam in op je klant-ID en het wachtwoord op je pull secret voor het FoxIDs Docker register. Maak daarna de registry secret aan.

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

Maak de twee FoxIDs websites aan

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

De configuratie vereist een Nginx controller. Je kunt de configuratie optioneel aanpassen om een andere controller te gebruiken.

Voorwaarden:

  • Je hebt Helm geïnstalleerd.
    Installeer Helm op Windows met dit CMD commando winget install Helm.Helm

Installeer Ingress-Nginx controller met twee commando's

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

Optioneel de Ingress-Nginx installatie verifiëren

kubectl get pod -n ingress-nginx

Als je het na enkele minuten opnieuw probeert, krijg je een EXTERNAL-IP

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

DNS records naar de twee domeinen moeten verwijzen naar het IP adres van de installatie om Let's Encrypt online validatie te kunnen uitvoeren.
De firewall moet requests op poort 80 en 443 accepteren. Let's Encrypt valideert het domeineigendom op poort 80.

Optioneel de Ingress-Nginx controller schalen

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

Installeer Cert-manager met twee commando's

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

Optioneel de Cert-manager installatie verifiëren

kubectl get pods -n cert-manager

Voeg je e-mailadres toe in het k8s-letsencrypt-issuer.yaml (twee plekken) bestand.

Configureer Let's Encrypt

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

Het k8s-foxids-ingress-deployment.yaml bestand is geconfigureerd met de domeinen:

  • Het FoxIDs site domein id.itfoxtec.com (twee plekken in het bestand) wordt aangepast naar je domein - id.my-domain.com
  • Het FoxIDs Control site domein control.itfoxtec.com (twee plekken in het bestand) wordt aangepast naar je domein - control.my-domain.com

Overweeg om te starten met Let's Encrypt in staging om de Let's Encrypt productie rate limit niet te raken (staging certificaten worden door de browser niet vertrouwd).
Je kunt optioneel staging of productie kiezen in het k8s-foxids-ingress-deployment.yaml bestand, standaard geconfigureerd voor productie.

Voeg ingress toe met certificate bound domeinen

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

Belangrijk! Ingress is geïnstalleerd met de annotaties nginx.ingress.kubernetes.io/proxy-buffers-number: "4" en nginx.ingress.kubernetes.io/proxy-buffer-size: "32k" om SAML 2.0 te ondersteunen waar HTTP responses behoorlijk groot kunnen zijn.

Optioneel Ingress verifiëren

kubectl get ingress -n foxids

Optioneel certificate issuer verifiëren

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

Optioneel controleren of het certificaat klaar is (READY moet True zijn)

kubectl get certificate -n foxids

En optioneel het certificaat verifiëren

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

First login

Open je FoxIDs Control site domein in een browser. Deze zou moeten doorsturen naar de FoxIDs site waar je inlogt met de standaard admin gebruiker admin@foxids.com en wachtwoord FirstAccess! (je moet het wachtwoord wijzigen bij de eerste login).
Je wordt daarna teruggeleid naar de FoxIDs Control site in de master tenant. Je kunt meer admin users toevoegen in de master tenant.

Klik vervolgens op de main tenant en authenticeer opnieuw met dezelfde standaard admin gebruiker admin@foxids.com en wachtwoord FirstAccess! (ook hier moet je het wachtwoord wijzigen).

De standaard admin gebruiker en het wachtwoord zijn hetzelfde voor zowel de master tenant als de main tenant, maar het zijn twee verschillende gebruikers.

Je bent nu ingelogd op de main tenant en kunt starten met het configureren van je applicaties en authenticatiemethoden.

Seed data

De database wordt automatisch geseed op basis van de geconfigureerde domeinen. Daarom moet je de database verwijderen als de domeinen wijzigen.
Om de data te verwijderen; je kunt de database pod stoppen en de fysieke database map of bestanden verwijderen. Of het database endpoint exposen en de database openen in MongoDB Compass (download MongoDB Compass Download (GUI)) en de database verwijderen.
Daarna moet de FoxIDs Control pod worden herstart om een nieuw seed proces te starten.

Geavanceerde optie: de domeinen kunnen ook handmatig in de database worden gewijzigd.

Overwegingen

Deze sectie bevat enkele deployment- en securityoverwegingen.

Kubernetes Service Mesh
Het wordt aanbevolen om een Kubernetes Service Mesh te gebruiken om een zero-trust architectuur te bereiken, waarbij intern verkeer met mutual TLS (mTLS) en encryptie is beveiligd.

Interne PKI / root CA
Als intern verkeer wordt beëindigd en opnieuw versleuteld door een proxy of service mesh met een interne root CA, configureer dan de FoxIDs containers om die CA te vertrouwen. Zie Kubernetes internal CA.

Namespace
Deze gids gebruikt doorgaans de namespace foxids, overweeg om de namespace te wijzigen zodat deze past bij je Kubernetes omgeving.

Maak namespace

kubectl create namespace test

Lijst namespaces

kubectl get namespaces

Namespace toepassen bij pod creation

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

Log
Alle logs van FoxIDs inclusief errors, trace en events worden naar stdout geschreven. Overweeg hoe je application logs afhandelt en logs van de containers verzamelt.

Rate Limiting
Configureer limieten op verbindingen en transmissiesnelheden in k8s-foxids-ingress-deployment.yaml.

MongoDB Operator
Overweeg MongoDB Operator als je meerdere instances van MongoDB nodig hebt.

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

Redis meerdere pods / cluster
Overweeg een geschaalde Redis setup als je meerdere instances van Redis nodig hebt.

Backup
Overweeg of MongoDB data geback-upt moet worden en op welk niveau, hier zijn drie mogelijke oplossingen. Het is minder belangrijk om Redis te back-uppen.

  1. Backup de fysieke data store van het persistente volume.
  2. Backup met een Kubernetes Cron Job.
  3. Backup wordt ondersteund in MongoDB Enterprise Kubernetes Operator.

Update

FoxIDs wordt geüpdatet door elk FoxIDs image naar een nieuwe versie te updaten, de twee FoxIDs images zijn backwards compatible. Update eerst het foxids/foxids image en daarna het foxids/foxids-control image.

Het zou ook mogelijk moeten zijn om het MongoDB image en Redis images te updaten met data in persistente volumes.

Handige commando's

Dit is een lijst met commando's die handig kunnen zijn tijdens de deployment om details te bekijken en wijzigingen door te voeren.

Pod maken

kubectl apply -f ks8-xxx.yaml

Pod verwijderen

kubectl delete -f ks8-xxx.yaml

Pods tonen

kubectl get pods

Pod beschrijving ophalen

kubectl describe pod xxx

Pod logs ophalen

kubectl logs xxx

Deployments tonen

kubectl get deployments

Services tonen

kubectl get services

Secrets tonen

kubectl get secrets

Persistente volumes tonen

kubectl get pv

Persistente volume claims tonen

kubectl get pvc

Ingress tonen

kubectl get ingress

Ingress beschrijven

kubectl describe ingress xxx

Uw privacy

We gebruiken cookies om uw ervaring op onze websites te verbeteren. Klik op de knop 'Alle cookies accepteren' om akkoord te gaan met het gebruik van cookies. Om niet-noodzakelijke cookies te weigeren, klikt u op 'Alleen noodzakelijke cookies'.

Bezoek onze privacyverklaring voor meer informatie