Kubernetes

Deploy FoxIDs i din Kubernetes (K8s) klynge eller Docker Desktop med Kubernetes aktiveret.

Dette er en beskrivelse af hvordan du laver en standard deployment og logger ind første gang samt nogle overvejelser. Det forventes at du skal tilpasse yaml filer efter dine behov, præferencer og miljø.

En FoxIDs installation er som en bucket, der er ingen eksterne dependencies og det er let at opnå meget høj oppetid med lille indsats. FoxIDs opdateres ved at opdatere de to docker images www.foxids.com/foxids:x.x.x og www.foxids.com/foxidscontrol:x.x.x til en ny version. Nye FoxIDs releases er backward compatible. Gennemgå release notes før du opdaterer. Du kan også finde den aktuelle Docker image version der.

En gyldig licens kræves for at få adgang til FoxIDs releases. Herfra kan du generere en secret til at autentificere mod Docker image registriet på www.foxids.com, som bruger Basic authentication.

Forudsætninger:

  • Du har en Kubernetes klynge eller Docker Desktop med Kubernetes aktiveret.
  • Du har grundlæggende viden om Kubernetes.
  • Du har kubectl installeret.

Dette er en liste over nyttige kommandoer i slutningen af denne beskrivelse.

Denne deployment omfatter:

  • To websites en til FoxIDs og en til FoxIDs Control (admin Client og API) i to docker images www.foxids.com/foxids:x.x.x og www.foxids.com/foxidscontrol:x.x.x.
  • De to websites eksponeres på to forskellige domæner sikret med automatisk genererede Let's Encrypt certifikater.
  • MongoDB er en NoSQL database og indeholder alle data inklusive tenants, miljøer og brugere. Deployet med det officielle MongoDB Docker image. Du kan valgfrit bruge din egen PostgreSQL instance i stedet for MongoDB.
  • Standard gemmer cache i databasen. Brug valgfrit en Redis cache hvis du installerer en FoxIDs klynge med høj throughput. Cache indeholder sekvenser (fx login og logout) og håndterer tællere til at sikre autentifikation mod forskellige angreb og data cache (kun Redis) for at forbedre performance. Redis deployes med det officielle Redis Docker image.
  • Logs skrives til stdout hvor Kubernetes kan opsamle dem.

Deployment

Deploymenten udføres i den beskrevne rækkefølge.

Gør klar

Download Kubernetes yaml konfigurationsfiler her og placer dem i en mappe på din maskine, f.eks. C:\FoxIDs\Kubernetes.

Åbn en konsol og naviger til mappen Kubernetes.

Persistente volumes

Du har brug for persistente volumes til MongoDB og valgfrit Redis.

I en Kubernetes klynge brug eller opret passende persistente volumes og opret en persistent volume claim med navnet mongo-data-pvc til MongoDB og valgfrit en til Redis med navnet redis-data-pvc.

Du kan muligvis bruge dynamisk storage provisioning med StorageClass.

Opret persistent volume claim til Mongo

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

Opret valgfrit persistent volume claim til Redis

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

Kubernetes i Docker Desktop

Hvis du bruger Kubernetes i Docker Desktop kan du oprette persistente volumes på host file systemet - ikke anbefalet til produktion.

Opret persistent volume til MongoDB

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

Opret persistent volume claim til MongoDB

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

Opret valgfrit persistent volume til Redis

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

Opret valgfrit persistent volume claim til Redis

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

Namespace

Denne guide bruger generelt namespace foxids, overvej at ændre namespace til at passe til dit Kubernetes miljø.

Opret namespace

kubectl create namespace foxids

MongoDB

Ændr brugernavn og adgangskode til MongoDB i k8s-mongo-secret.yaml. Brugernavn og adgangskode er base64 kodet.

Du base64 koder "teksten" i en command prompt afhængigt af din platform:

Windows

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

Linux / Mac

echo -n "the text" | base64

Tilføj MongoDB secret

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

Opret MongoDB
Eksponér valgfrit MongoDB på port 27017 ved at uncomment LoadBalancer

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

Tilføj en ConfigMap til MongoDB servicen

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

Brug valgfrit PostgreSQL i stedet for MongoDB

Ændr brugernavn værdien i postgres-username og adgangskode værdien i postgres-password så de matcher din PostgreSQL instance i k8s-postgres-secret.yaml. Brugernavn og adgangskode er base64 kodet.

Tilføj PostgreSQL secret

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

Ændr PostgreSQL database endpoint i postgres-db så det matcher din PostgreSQL instance i k8s-postgres-configmap.yaml

Tilføj en ConfigMap til PostgreSQL servicen

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

Brug valgfrit Redis

Opret valgfrit Redis

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

Tilføj valgfrit en ConfigMap til Redis servicen

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

FoxIDs websites

Domæner
De to FoxIDs websites er konfigureret til at bruge to domæner som du opretter og administrerer i din DNS. Konfigurer k8s-foxids-deployment.yaml filen med dine valgte domæner:

  • FoxIDs site domænet https://id.itfoxtec.com (to steder i filen) ændres til dit domæne - id.my-domain.com
  • FoxIDs Control site domænet https://control.itfoxtec.com ændres til dit domæne - control.my-domain.com

Email provider
Du kan valgfrit konfigurere en global email provider eller senere konfigurere email providers per miljø. FoxIDs understøtter at sende e-mails med SendGrid og SMTP.

Den globale email provider konfigureres i k8s-foxids-deployment.yaml filen på foxids container/pod i env: sektionen.
Dette eksempel viser hvordan du tilføjer Outlook / Microsoft 365 med SMTP:

- name: "Settings__Smtp__FromEmail"
    value: "my@email-address.org"
- name: "Settings__Smtp__FromName" # Valgfrit afsendernavn knyttet til e-mailadressen 
    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"

Vigtigt hvis du bruger PostgreSQL
Ændr database og cache konfigurationen i k8s-foxids-deployment.yaml (to steder i filen).

Vælg PostgreSQL som database i stedet for MongoDb

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

Vælg PostgreSQL som cache i stedet for MongoDb medmindre du bruger Redis

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

Uncomment PostgreSQL access konfigurationen

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

Vigtigt hvis du bruger Redis
Ændr cache konfigurationen i k8s-foxids-deployment.yaml (to steder i filen).

Vælg Redis som cache i stedet for MongoDb

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

Uncomment Redis access konfigurationen

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

Deploy
Sæt brugernavnet til dit kunde-ID og adgangskoden til din pull secret for FoxIDs Docker registriet. Opret derefter registry secret.

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

Opret de to FoxIDs websites

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

Konfigurationen kræver en Nginx controller. Du kan valgfrit ændre konfigurationen til at bruge en anden controller.

Forudsætninger:

  • Du har Helm installeret.
    Installer Helm på Windows med denne CMD kommando winget install Helm.Helm

Installer Ingress-Nginx controller med to kommandoer

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

Valgfrit verificér Ingress-Nginx installation

kubectl get pod -n ingress-nginx

Hvis du prøver igen efter et par minutter bør du få en EXTERNAL-IP

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

DNS records til de to domæner skal pege på installationens IP adresse for at aktivere Let's Encrypt online validering.
Firewallen skal acceptere requests på port 80 og 443. Let's Encrypt validerer domæneejerskab på port 80.

Valgfrit skalér Ingress-Nginx controller

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

Installer Cert-manager med to kommandoer

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

Valgfrit verificér Cert-manager installation

kubectl get pods -n cert-manager

Tilføj din e-mail i k8s-letsencrypt-issuer.yaml (to steder) filen.

Konfigurer Let's Encrypt

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

k8s-foxids-ingress-deployment.yaml filen er konfigureret med domænerne:

  • FoxIDs site domænet id.itfoxtec.com (to steder i filen) ændres til dit domæne - id.my-domain.com
  • FoxIDs Control site domænet control.itfoxtec.com (to steder i filen) ændres til dit domæne - control.my-domain.com

Overvej at starte med Let's Encrypt i staging for at undgå at ramme Let's Encrypt production rate limit (staging certifikater er ikke betroet af browseren).
Du kan valgfrit vælge staging eller production i k8s-foxids-ingress-deployment.yaml filen, standard er production.

Tilføj ingress med certificate bound domæner

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

Vigtigt! Ingress er installeret med annoteringerne nginx.ingress.kubernetes.io/proxy-buffers-number: "4" og nginx.ingress.kubernetes.io/proxy-buffer-size: "32k" for at understøtte SAML 2.0 hvor HTTP svar kan være ret store.

Valgfrit verificér Ingress

kubectl get ingress -n foxids

Valgfrit verificér certificate issuer

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

Valgfrit tjek om certifikatet er klar (READY bør være True)

kubectl get certificate -n foxids

Og valgfrit verificér certifikatet

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

Første login

Åbn dit FoxIDs Control site domæne i en browser. Det bør videresende til FoxIDs site hvor du logger ind med standard admin brugeren admin@foxids.com og adgangskoden FirstAccess! (du skal ændre adgangskoden ved første login).
Du bliver derefter videresendt tilbage til FoxIDs Control site i master tenant. Du kan tilføje flere admin brugere i master tenant.

Klik derefter på main tenant og autentificér igen med samme standard admin bruger admin@foxids.com og adgangskoden FirstAccess! (igen, du skal ændre adgangskoden).

Standard admin bruger og adgangskode er den samme for både master tenant og main tenant, men det er to forskellige brugere.

Du er nu logget ind på main tenant og kan begynde at konfigurere dine applikationer og autentifikationsmetoder.

Seed data

Databasen seedes automatisk baseret på de konfigurerede domæner. Derfor skal du slette databasen hvis domænerne ændres.
For at slette data; du kan enten stoppe database pod og slette den fysiske database mappe eller filer. Eller eksponér database endpointet og åbn databasen i MongoDB Compass (download MongoDB Compass Download (GUI)) og slet databasen.
Derefter skal FoxIDs Control pod genstartes for at starte en ny seed proces.

Avanceret mulighed: domænerne kan også ændres manuelt i databasen.

Overvejelser

Denne sektion lister nogle deployment- og sikkerhedsovervejelser.

Kubernetes Service Mesh
Det anbefales at bruge et Kubernetes Service Mesh for at opnå en zero-trust arkitektur, hvor intern trafik er sikret med mutual TLS (mTLS) og kryptering.

Intern PKI / root CA
Hvis intern trafik termineres og genkrypteres af en proxy eller service mesh med en intern root CA, konfigurer FoxIDs containere til at stole på den CA. Se Kubernetes internal CA.

Namespace
Denne guide bruger generelt namespace foxids, overvej at ændre namespace til at passe til dit Kubernetes miljø.

Opret namespace

kubectl create namespace test

List namespaces

kubectl get namespaces

Anvend namespace ved pod oprettelse

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

Log
Alle logs fra FoxIDs inklusiv fejl, trace og events skrives til stdout. Overvej hvordan du håndterer application logs og indsamler logs fra containerne.

Rate Limiting
Konfigurer begrænsninger på forbindelser og transmissionshastigheder i k8s-foxids-ingress-deployment.yaml.

MongoDB Operator
Overvej MongoDB Operator hvis du har brug for flere instanser af MongoDB.

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

Redis multiple pods / cluster
Overvej en skaleret Redis opsætning hvis du har brug for flere instanser af Redis.

Backup
Overvej om MongoDB data skal sikkerhedskopieres og på hvilket niveau, her er tre mulige løsninger. Det anses som mindre vigtigt at backuppe Redis.

  1. Backup den fysiske data store for det persistente volume.
  2. Backup med en Kubernetes Cron Job.
  3. Backup understøttes i MongoDB Enterprise Kubernetes Operator.

Update

FoxIDs opdateres ved at opdatere hvert FoxIDs image til en ny version, de to FoxIDs images er backwards compatible. Opdater først foxids/foxids image og derefter foxids/foxids-control image.

Det bør ligeledes være muligt at opdatere MongoDB image og Redis images med data i persistente volumes.

Nyttige kommandoer

Dette er en liste over kommandoer som kan være nyttige under deployment for at se detaljer og lave deployment ændringer.

Opret pod

kubectl apply -f ks8-xxx.yaml

Nedtag pod

kubectl delete -f ks8-xxx.yaml

List pods

kubectl get pods

Hent pod beskrivelse

kubectl describe pod xxx

Hent pod logs

kubectl logs xxx

List deployments

kubectl get deployments

List services

kubectl get services

List secrets

kubectl get secrets

List persistente volumes

kubectl get pv

List persistente volume claims

kubectl get pvc

List ingress

kubectl get ingress

Beskriv ingress

kubectl describe ingress xxx

Dit privatliv

Vi bruger cookies til at gøre din oplevelse på vores websites bedre. Klik på 'Acceptér alle cookies' for at acceptere brugen af cookies. For at fravælge ikke-nødvendige cookies, klik på 'Kun nødvendige cookies'.

Besøg vores privatlivspolitik for mere