Just tried switching from NGINX Ingress to Azure Application Gateway (AGIC) in AKS, and it didn't go well.
Warning to anyone considering AGIC (or even AGC) for anything beyond basic HTTP/HTTPS setups: AGIC assumes full ownership of the Application Gateway it's pointed to. Anything you manually add or customize outside of Kubernetes Ingress resources, like custom 307 temporary redirects, extra TCP listeners/ports, specific rewrite rules, or non-standard backend configs, gets silently deleted or overwritten within seconds to minutes during reconciliation.
I experienced this firsthand: custom rules vanished repeatedly, even after restarts or resyncs.
Tried the common workaround: created an AzureIngressProhibitedTargets CRD to exclude my hostname/path, but it still got wiped (ProhibitedTargets works better in shared/multi-cluster scenarios with careful config, but for truly custom/manual additions that don't map to Ingress annotations, it often falls short or requires very precise targeting that doesn't cover everything.)
These kinds of configs also can't easily be expressed via standard Ingress annotations (unlike NGINX, where you have rewrite/return directives, server-snippets, or TransportServer CRDs for TCP).
AGC (Application Gateway for Containers), the "next-gen" replacement, doesn't fully solve this either. It sticks to ports 80/443 only (no native custom TCP support), and while it has better routing/redirect flexibility via Gateway API, it still follows a declarative Kubernetes-driven model that can conflict with manual tweaks.
Bottom line tip:
If your workload needs custom/non-standard config (redirect logic, TCP ports beyond 80/443, etc.), skip AG/AGIC/AGC and stick with a flexible ingress controller like NGINX OSS (F5's maintained version, especially relevant now that community ingress-nginx is heading to EOL next month). It lets you define exactly what you need without an overzealous reconciler eating your changes.
Anyone else hit this wall migrating away from NGINX community edition? What did you end up using?