{"cicd_path":[{"detail":"Jobs run inside private VNet","name":"Azure DevOps \u2192 Self-hosted agent","step":"A"},{"detail":"Docker image built and pushed to Azure ACR","name":"Build & push","step":"B"},{"detail":"Helm applies chart to private AKS API","name":"Helm deploy","step":"C"}],"request_path":[{"detail":"Resolve public hostname to Azure Load Balancer IP","name":"Client \u2192 DNS","step":1},{"detail":"Forward HTTPS to Traefik on the node pool","name":"Azure Load Balancer","step":2},{"detail":"Match Ingress, terminate TLS (cert-manager / Let's Encrypt), route to Flask Service","name":"Traefik + TLS","step":3},{"detail":"ClusterIP load-balances to healthy Gunicorn pods","name":"Flask Service \u2192 Pod","step":4},{"detail":"App connects to in-cluster postgres service (StatefulSet)","name":"Optional DB hop","step":5},{"detail":"Pod \u2192 Service \u2192 Traefik \u2192 LB \u2192 Client","name":"Response","step":6}]}
