Dual-region AKS platform for a fintech loan tendering client based in Finland, with active-passive failover, automated cross-region database sync, and full-stack observability.
Environment Type
Complexity Level
Performance Impact
Ador is a loan tendering platform built for a Finland-based fintech client on Azure. I designed and run an active-passive dual-region setup β Prod1 in West Europe and Prod2 in North Europe β sitting behind Azure Front Door with priority-based routing, so traffic fails over to the secondary region if the primary goes down. Each region runs its own AKS cluster with AGIC for ingress, hosting 11 microservices deployed from three GitLab branches (new-prod-1, new-prod-2, new-stage) through CI/CD pipelines with manual approval gates and runtime secret injection. A nightly job keeps the two regions' PostgreSQL databases in sync (West Europe β North Europe) using Managed Identity auth, containerized pg_dump/pg_restore, and a Private Endpoint for secure cross-region connectivity. Blue/green releases are handled two ways β Azure Front Door Rule Engine with custom header routing, and origin-weight based traffic shifting β depending on the rollout. On the observability side, both production clusters run kube-prometheus-stack plus Loki/Promtail, with close to 50 custom PrometheusRule alerts tuned across nodes, pods, deployments, PVCs, Redis, Keycloak, and the ingress controller, and false-positive suppression for AKS-managed control-plane components. I'm currently rolling out OpenTelemetry tracing (Tempo + an OTel Collector DaemonSet), starting with the service most affected by an incident where a silent failure slipped past log-based alerting entirely β and separately building out a new staging environment (AKS 1.34, CNI Overlay) and a fresh active-passive production environment ahead of a planned traffic cutover.
Root-caused the specific failure, then kicked off an OpenTelemetry tracing initiative (Tempo + OTel Collector) to get request-level visibility that log scraping alone couldn't provide.
Remapped the collation setting and restored using --no-owner --no-privileges to work cleanly within Azure's permission constraints.
Tuned suppression rules for components like KubeSchedulerDown, KubeControllerManagerDown, and KubeProxyDown to cut noise while keeping genuine alerts visible.