Kubernetes
Distribuer FoxIDs i Kubernetes (K8s) klusteret ditt eller Docker Desktop med Kubernetes aktivert.
Dette er en beskrivelse av hvordan du gjør en standard distribusjon og logger inn for første gang samt noen betraktninger. Det forventes at du må tilpasse yaml filene til dine behov, preferanser og miljø.
En FoxIDs installasjon er som en bøtte, det finnes ingen eksterne avhengigheter og det er enkelt å oppnå svært høy oppetid med liten innsats.
FoxIDs oppdateres ved å oppdatere de to docker image www.foxids.com/foxids:x.x.x og www.foxids.com/foxidscontrol:x.x.x
til en ny versjon. Nye FoxIDs utgivelser er backward compatible. Se release notes før oppdatering. Du finner også gjeldende Docker image versjon der.
En gyldig lisens kreves for å få tilgang til FoxIDs utgivelser. Derfra kan du generere en secret for å autentisere mot Docker image registeret på www.foxids.com, som bruker Basic authentication.
Forutsetninger:
- Du har et Kubernetes kluster eller Docker Desktop med Kubernetes aktivert.
- Du har grunnleggende kunnskap om Kubernetes.
- Du har
kubectlinstallert.
Dette er en liste med nyttige kommandoer på slutten av denne beskrivelsen.
Denne distribusjonen inkluderer:
- To nettsteder, ett for FoxIDs og ett for FoxIDs Control (admin Client og API) i to docker image
www.foxids.com/foxids:x.x.xogwww.foxids.com/foxidscontrol:x.x.x. - De to nettstedene eksponeres på to forskjellige domener sikret med automatisk genererte Let's Encrypt sertifikater.
- MongoDB er en NoSQL database og inneholder alle data inkludert tenants, miljøer og brukere. Distribuert med den offisielle MongoDB Docker image. Du kan valgfritt bruke din egen PostgreSQL instans i stedet for MongoDB.
- Som standard holdes cachen i databasen. Valgfritt bruk en Redis cache hvis du installerer et FoxIDs kluster med høy gjennomstrømming. Cachen holder sekvenser (f.eks. innlogging og utlogging) og håndterer tellere for å sikre autentisering mot ulike angrep og datacache (kun Redis) for å forbedre ytelsen. Redis distribueres med den offisielle Redis Docker image.
- Logger skrives til
stdoutder loggene kan plukkes opp av Kubernetes.
Distribusjon
Distribusjonen utføres i den beskrevne rekkefølgen.
Gjør klar
Last ned Kubernetes yaml konfigurasjonsfiler her og plasser dem i en mappe på maskinen din, for eksempel C:\FoxIDs\Kubernetes.
Åpne en konsoll og naviger til mappen Kubernetes.
Persistente volumer
Du trenger persistente volumer for MongoDB og eventuelt Redis.
I et Kubernetes kluster bruk eller opprett passende persistente volumer og opprett en persistent volume claim med navnet mongo-data-pvc for MongoDB og eventuelt en for Redis med navnet redis-data-pvc.
Du kan bruke dynamisk lagringsprovisjonering med StorageClass.
Opprett persistent volume claim for Mongo
kubectl apply -f k8s-mongo-pvc-dynamic.yaml
Valgfritt opprett persistent volume claim for Redis
kubectl apply -f k8s-redis-pvc-dynamic.yaml
Kubernetes i Docker Desktop
Hvis du bruker Kubernetes i Docker Desktop kan du opprette persistente volumer på vertens filsystem - ikke anbefalt for produksjon.
Opprett persistent volume for MongoDB
kubectl apply -f k8s-mongo-pv-dockerdesktop.yaml
Opprett persistent volume claim for MongoDB
kubectl apply -f k8s-mongo-pvc-dockerdesktop.yaml
Valgfritt opprett persistent volume for Redis
kubectl apply -f k8s-redis-pv-dockerdesktop.yaml
Valgfritt opprett persistent volume claim for Redis
kubectl apply -f k8s-redis-pvc-dockerdesktop.yaml
Namespace
Denne veiledningen bruker vanligvis namespace foxids, vurder å endre namespace for å passe Kubernetes miljøet ditt.
Opprett namespace
kubectl create namespace foxids
MongoDB
Endre brukernavn og passord for MongoDB i k8s-mongo-secret.yaml. Brukernavn og passord er base64 kodet.
Du base64 koder "the text" i en kommandolinje avhengig av plattform:
Windows
powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"the text\"))"
Linux / Mac
echo -n "the text" | base64
Legg til MongoDB secret
kubectl apply -f k8s-mongo-secret.yaml -n foxids
Opprett MongoDB
Valgfritt eksponer MongoDB på port 27017 ved å fjerne kommentar på LoadBalancer
kubectl apply -f k8s-mongo-deployment.yaml -n foxids
Legg til en ConfigMap for MongoDB tjenesten
kubectl apply -f k8s-mongo-configmap.yaml -n foxids
Valgfritt bruk PostgreSQL i stedet for MongoDB
Endre brukernavn i postgres-username og passord i postgres-password for å matche PostgreSQL instansen din i k8s-postgres-secret.yaml. Brukernavn og passord er base64 kodet.
Legg til PostgreSQL secret
kubectl apply -f k8s-postgres-secret.yaml -n foxids
Endre PostgreSQL database endepunktet i postgres-db slik at det matcher PostgreSQL instansen din i k8s-postgres-configmap.yaml
Legg til en ConfigMap for PostgreSQL tjenesten
kubectl apply -f k8s-postgres-configmap.yaml -n foxids
Valgfritt bruk Redis
Valgfritt opprett Redis
kubectl apply -f k8s-redis-deployment.yaml -n foxids
Valgfritt legg til en ConfigMap for Redis tjenesten
kubectl apply -f k8s-redis-configmap.yaml -n foxids
FoxIDs nettsteder
Domener
De to FoxIDs nettstedene er konfigurert til å bruke to domener som du oppretter og administrerer i DNS. Konfigurer k8s-foxids-deployment.yaml filen med dine valgte domener:
- FoxIDs nettstedets domene
https://id.itfoxtec.com(to steder i filen) endres til ditt domene -id.my-domain.com - FoxIDs Control nettstedets domene
https://control.itfoxtec.comendres til ditt domene -control.my-domain.com
E-postleverandør
Du kan valgfritt konfigurere en global e-postleverandør eller senere konfigurere e-postleverandører per miljø. FoxIDs støtter sending av e-post med SendGrid og SMTP.
Den globale e-postleverandøren konfigureres i k8s-foxids-deployment.yaml filen på foxids container/pod i env: seksjonen.
Dette eksempelet viser hvordan du legger til Outlook / Microsoft 365 med SMTP:
- name: "Settings__Smtp__FromEmail"
value: "my@email-address.org"
- name: "Settings__Smtp__FromName" # Valgfritt avsendernavn tilknyttet e-postadressen
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"
Viktig hvis du bruker PostgreSQL
Endre database og cache konfigurasjonen i k8s-foxids-deployment.yaml (to steder i filen).
Velg PostgreSQL som database i stedet for MongoDb
- name: "Settings__Options__DataStorage"
# value: "MongoDb"
value: "PostgreSql" # PostgreSql database
Velg PostgreSQL som cache i stedet for MongoDb med mindre du bruker Redis
- name: "Settings__Options__Cache"
# value: "MongoDb"
value: "PostgreSql" # Cache i PostgreSql database
# value: "Redis" # Cache i Redis
Fjern kommentar på PostgreSQL tilgangskonfigurasjonen
- 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"
Viktig hvis du bruker Redis
Endre cache konfigurasjonen i k8s-foxids-deployment.yaml (to steder i filen).
Velg Redis som cache i stedet for MongoDb
- name: "Settings__Options__Cache"
# value: "MongoDb"
# value: "PostgreSql" # Cache i PostgreSql database
value: "Redis" # Cache i Redis
Fjern kommentar på Redis tilgangskonfigurasjonen
- name: REDIS_SERVER
valueFrom:
configMapKeyRef:
name: redis-configmap
key: database_url
- name: "Settings__RedisCache__ConnectionString"
value: "$(REDIS_SERVER):6379"
Distribuer
Sett brukernavnet til kunde-ID-en din og passordet til pull secreten din for FoxIDs Docker registeret. Opprett deretter 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
Opprett de to FoxIDs nettstedene
kubectl apply -f k8s-foxids-deployment.yaml -n foxids
Konfigurasjonen krever en Nginx controller. Du kan valgfritt endre konfigurasjonen til å bruke en annen controller.
Forutsetninger:
- Du har Helm installert.
Installer Helm på windows med denne CMD kommandoenwinget 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
Valgfritt verifiser Ingress-Nginx installasjon
kubectl get pod -n ingress-nginx
Hvis du prøver igjen om noen minutter skal du få en EXTERNAL-IP
kubectl get svc -n ingress-nginx ingress-nginx-controller
DNS oppføringer for de to domenene må peke til installasjonens IP adresse for å aktivere Let's Encrypt online validering.
Brannmuren må akseptere forespørsler på port 80 og 443. Let's encrypt validerer domeneeierskap på port 80.
Valgfritt skaler 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
Valgfritt verifiser Cert-manager installasjon
kubectl get pods -n cert-manager
Legg til e-posten din 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 konfigurert med domenene:
- FoxIDs nettstedets domene
id.itfoxtec.com(to steder i filen) endres til ditt domene -id.my-domain.com - FoxIDs Control nettstedets domene
control.itfoxtec.com(to steder i filen) endres til ditt domene -control.my-domain.com
Vurder å starte med Let's Encrypt i staging for å unngå å treffe Let's Encrypt produksjons rate limit (staging sertifikater er ikke betrodd av nettleseren).
Velg eventuelt å bruke staging eller produksjon ik8s-foxids-ingress-deployment.yamlfilen, standard konfigurert for produksjon.
Legg til ingress med sertifikat bundne domener
kubectl apply -f k8s-foxids-ingress-deployment.yaml -n foxids
Viktig! Ingress er installert med annotasjonene
nginx.ingress.kubernetes.io/proxy-buffers-number: "4"ognginx.ingress.kubernetes.io/proxy-buffer-size: "32k"for å støtte SAML 2.0 der HTTP responser kan være ganske store.
Valgfritt verifiser Ingress
kubectl get ingress -n foxids
Valgfritt verifiser certificate issuer
kubectl describe ClusterIssuer letsencrypt-production -n foxids
#staging
# kubectl describe ClusterIssuer letsencrypt-staging -n foxids
Valgfritt sjekk om sertifikatet er klart (READY skal være True)
kubectl get certificate -n foxids
Og valgfritt verifiser sertifikatet
kubectl describe certificate letsencrypt-production -n foxids
#staging
# kubectl describe certificate letsencrypt-staging -n foxids
Første innlogging
Åpne FoxIDs Control nettstedets domene i en nettleser.
Det bør omdirigere til FoxIDs nettstedet der du logger inn med standard admin bruker admin@foxids.com og passord FirstAccess! (du må endre passord ved første innlogging).
Du blir deretter omdirigert tilbake til FoxIDs Control nettstedet i master tenant. Du kan legge til flere admin brukere i master tenant.
Klikk deretter på main tenant og autentiser igjen med samme standard admin bruker admin@foxids.com og passord FirstAccess! (igjen, du må endre passordet).
Standard admin bruker og passord er det samme for både
mastertenant ogmaintenant, men det er to forskjellige brukere.
Du er nå logget inn i main tenant og kan begynne å konfigurere applikasjoner og autentiseringsmetoder.
Seed data
Databasen seedes automatisk basert på de konfigurerte domenene. Derfor må du slette databasen hvis domenene endres.
For å slette dataene; du kan enten stoppe database podden og slette den fysiske database mappen eller filene.
Eller eksponere database endepunktet og åpne databasen i MongoDB Compress (last ned MongoDB Compass (GUI)) og slette databasen.
Deretter må FoxIDs Control podden restartes for å initiere en ny seed prosess.
Avansert alternativ: Domenene kan også endres manuelt i databasen.
Betraktninger
Denne seksjonen lister noen distribusjons og sikkerhetsbetraktninger.
Kubernetes Service Mesh
Det anbefales å bruke en Kubernetes Service Mesh for å oppnå en zero-trust arkitektur. Der intern trafikk sikres med mutual TLS (mTLS) og kryptering.
Intern PKI / rot CA
Hvis intern trafikk termineres og krypteres på nytt av en proxy eller service mesh med en intern rot CA, konfigurer FoxIDs containerne til å stole på den CAen. Se Kubernetes intern CA.
Namespace
Denne veiledningen bruker vanligvis namespace foxids, vurder å endre namespace for å passe Kubernetes miljøet ditt.
Opprett namespace
kubectl create namespace test
List namespaces
kubectl get namespaces
Bruk namespace ved pod opprettelse
kubectl apply -f xxx.yaml --namespace=test
Logg
Alle logger fra FoxIDs inkludert feil, trace og hendelser skrives til stdout. Vurder hvordan du håndterer applikasjonslogger og samler logger fra containerne.
Rate Limiting
Konfigurer begrensninger på tilkoblinger og overføringshastigheter i k8s-foxids-ingress-deployment.yaml.
MongoDB Operator
Vurder MongoDB Operator hvis du trenger flere instanser av MongoDB.
Redis flere pods / kluster
Vurder en skalert Redis oppsett hvis du trenger flere instanser av Redis.
- Redis master/replica oppsett i Kubernetes
- Redis på Kubernetes
- Redis Enterprise cluster på Kubernetes og arkitektur
Backup
Vurder om MongoDB data må sikkerhetskopieres og på hvilket nivå, her er tre mulige løsninger. Det anses som mindre viktig å sikkerhetskopiere Redis.
- Sikkerhetskopier persistent volume fysiske datalager.
- Backup med en Kubernetes Cron Job.
- Backup støttes i MongoDB Enterprise Kubernetes Operator.
Oppdatering
FoxIDs oppdateres ved å oppdatere hvert FoxIDs image til en ny versjon, de to FoxIDs image er bakoverkompatible. Oppdater først foxids/foxids image og deretter foxids/foxids-control image.
Det bør også være mulig å oppdatere MongoDB image og Redis image med data i persistente volumer.
Nyttige kommandoer
Dette er en liste med kommandoer som kan være nyttige under distribusjon for å se detaljer og gjøre endringer i distribusjonen.
Opprett pod
kubectl apply -f ks8-xxx.yaml
Steng pod
kubectl delete -f ks8-xxx.yaml
List pods
kubectl get pods
Hent pod beskrivelse
kubectl describe pod xxx
Hent pod logger
kubectl logs xxx
List deployments
kubectl get deployments
List services
kubectl get services
List secrets
kubectl get secrets
List persistent volumes
kubectl get pv
List persistent volume claims
kubectl get pvc
List ingress
kubectl get ingress
Beskriv ingress
kubectl describe ingress xxx