๐Ÿ”€ Traffic Flow

How a request moves from the internet into the private cluster
1

Client โ†’ DNS

Browser or API client resolves the public hostname (Azure DNS / external DNS) to the public IP of the Azure Load Balancer.

โ†“
2

Azure Load Balancer

Public frontend receives HTTPS traffic and forwards it to Traefik pods (node ports / internal endpoints) inside the AKS node pool.

โ†“
3

Traefik + TLS termination

Traefik matches the Ingress rule, terminates TLS using a cert-manager managed certificate (Let's Encrypt), and routes to the Flask Service.

โ†“
4

Flask Service โ†’ Pod

ClusterIP Service load-balances to healthy Flask/Gunicorn pods. Request hits the app (e.g. /, /api/status).

โ†“
5

Optional: App โ†’ PostgreSQL

If the handler needs data, the app opens a connection to the in-cluster postgres service (StatefulSet). No traffic leaves the cluster for DB access.

โ†“
6

Response path

Response flows back: Pod โ†’ Service โ†’ Traefik (re-encrypts or already TLS at edge) โ†’ Load Balancer โ†’ Client.

CI/CD traffic (separate path)

A

Azure DevOps โ†’ Self-hosted agent

Pipeline jobs run on an agent inside the private VNet so it can reach the private AKS API server and ACR as needed.

โ†“
B

Build & push

Agent builds the Docker image and pushes it to Azure Container Registry.

โ†“
C

Helm deploy

Agent runs Helm against the private cluster API, rolling out the new Deployment / StatefulSet revisions. No public control-plane exposure.

[Client] โ”‚ HTTPS โ–ผ [DNS] โ”€โ”€โ–บ [Azure Public LB] โ”‚ โ–ผ [Traefik Ingress] (TLS + routing) โ”‚ โ–ผ [Flask Service] โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ” โ–ผ โ–ผ [Pod A] [Pod B] ... โ”‚ โ–ผ (if needed) [postgres:5432] (StatefulSet)
← Back to home