Ingress-NGINX v AKS končí v listopadu 2026: migrace na Gateway API krok za krokem
Ingress-NGINX v AKS končí v listopadu 2026: migrace na Gateway API krok za krokem
Většina nucených migrací v Azure je nuda — přepíšete API verzi, změníte SKU, jedete dál. Tahle není. Ingress-NGINX má v AKS obrovskou instalovanou bázi, deadline je tvrdý a náhrada není stejná věc s jiným jménem. Je to jiná datová rovina, jiný objektový model a jiné rozdělení odpovědnosti mezi platformní a aplikační tým.
Tenhle článek je mapa: co přesně končí, co to nahrazuje, jak přeložit anotace, a hlavně co ekvivalent nemá — protože právě ty tři anotace vám migraci prodlouží z týdne na měsíc.
Dvě data, která platí
| Datum | Co se stalo / stane |
|---|---|
| březen 2026 | Upstream projekt ingress-nginx skončil s údržbou |
| listopad 2026 | AKS dodá poslední kritický bezpečnostní patch pro managed NGINX |
Po listopadu 2026 vám nic nespadne. Controller poběží dál. Ale nová CVE v NGINX už nikdo neopraví, a to je rozdíl mezi „funguje to" a „projde to auditem". Pokud provozujete cokoliv pod NIS2, PCI DSS nebo interním bezpečnostním standardem banky, je prosinec 2026 datum, kdy máte v clusteru nepodporovanou komponentu na hraně sítě.
Plánujte tedy na říjen 2026 jako reálný cutover, ne na listopad.
Co to nahrazuje
Náhrada je App Routing add-on s implementací Gateway API. Šla GA v AKS release 20260428 a přinesla tři věci:
GatewayClassjménemapprouting-istio— datovou rovinou je Envoy řízený Istiem, spravuje ho Microsoft- managed instalace Gateway API CRD a controlleru — už si je neinstalujete sami a neřešíte, jestli vám je někdo přepíše
- release
20260529navíc přidal integraci Azure DNS a Key Vaultu plus strukturované JSON Envoy access logy na stdout jako default
Ta poslední položka je tišší, než si zaslouží. Pokud dnes na každý cluster instalujete cert-manager a external-dns, aby vám ingress uměl TLS a DNS, po migraci je můžete odinstalovat. Certifikát referencujete rovnou z Key Vaultu bez SecretProviderClass a DNS záznam v Azure DNS zóně vznikne sám.
Změna, kterou musíte pochopit dřív než syntax
Ingress byl jeden objekt. Gateway API jsou dva, a dělí se podle toho, kdo je vlastní:
Ingress (1 objekt, vlastní ho ... někdo)
│
├─→ Gateway ← platformní tým: listenery, porty, TLS, IP adresa
│ jeden na cluster nebo na prostředí
│
└─→ HTTPRoute ← aplikační tým: hostname, cesty, backendy, filtry
jeden na aplikaci, žije v namespace aplikaceTohle není kosmetika. Znamená to, že aplikační tým už nemůže sáhnout na TLS konfiguraci ani na sdílenou IP adresu — a naopak, platformní tým už nemusí schvalovat každou změnu cesty. Pokud jste dosud měli jeden Ingress na aplikaci a v něm všechno, migrace vám tenhle rozdíl vnutí, ať chcete nebo ne.
Gateway drží platformní tým:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gw-prod
namespace: platform
spec:
gatewayClassName: approuting-istio
listeners:
- name: https
protocol: HTTPS
port: 443
hostname: '*.priklad.cz'
tls:
mode: Terminate
certificateRefs:
# Key Vault přímo, bez SecretProviderClass
- kind: Secret
name: kv-wildcard-priklad-cz
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
gateway-access: 'true'HTTPRoute drží aplikační tým, ve svém namespace:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api
namespace: prod
spec:
parentRefs:
- name: gw-prod
namespace: platform
hostnames:
- api.priklad.cz
rules:
- matches:
- path:
type: PathPrefix
value: /v1
backendRefs:
- name: svc-api
port: 8080Všimněte si allowedRoutes na Gateway. To je bezpečnostní hranice, kterou Ingress neměl vůbec — bez ní si kterýkoliv namespace může připnout route na vaši produkční IP.
Mapování anotací
Tohle je jádro práce. Projděte si svoje Ingress objekty anotaci po anotaci:
Anotace nginx.ingress.kubernetes.io/ | Ekvivalent v Gateway API |
|---|---|
rewrite-target | filtr URLRewrite, path.replacePrefixMatch |
ssl-redirect / force-ssl-redirect | filtr RequestRedirect, scheme: https, statusCode: 301 |
permanent-redirect | filtr RequestRedirect s hostname a path |
backend-protocol: GRPC | samostatný objekt GRPCRoute |
canary + canary-weight | více backendRefs s polem weight |
canary-by-header | matches.headers — nativní, čitelnější než anotace |
cors-allow-* | částečně ResponseHeaderModifier, jinak Istio |
proxy-body-size | žádný v Gateway API — Istio ProxyConfig |
rate-limit-* | žádný — Envoy rate limit přes Istio |
auth-url / auth-signin | žádný — Istio AuthorizationPolicy (ext_authz) |
configuration-snippet | žádný a nikdy nebude |
server-snippet | žádný a nikdy nebude |
Poslední dva řádky jsou ten rozdíl mezi týdnem a měsícem. configuration-snippet je úniková klapka, do které týmy roky lepily všechno, co anotace neuměly — a Gateway API je záměrně typované, takže ekvivalent nebude nikdy existovat. Každý snippet musíte přeložit ručně do Istio konfigurace, nebo ho zrušit.
Audit: zjistěte rozsah dřív, než něco slíbíte
Než dáte odhad, spusťte tohle. Vypíše každou nginx.ingress anotaci v clusteru s počtem výskytů:
kubectl get ingress -A -o json \
| jq -r '.items[]
| . as $i
| (.metadata.annotations // {})
| to_entries[]
| select(.key | startswith("nginx.ingress.kubernetes.io/"))
| "\(.key)"' \
| sort | uniq -c | sort -rnTypický výstup ze středně velkého clusteru vypadá takhle:
34 nginx.ingress.kubernetes.io/rewrite-target
28 nginx.ingress.kubernetes.io/ssl-redirect
19 nginx.ingress.kubernetes.io/proxy-body-size
7 nginx.ingress.kubernetes.io/configuration-snippet
4 nginx.ingress.kubernetes.io/auth-url
2 nginx.ingress.kubernetes.io/canaryPrvních dvou se nebojte, ty jsou mechanické. Vaše práce jsou ty spodní tři řádky — a configuration-snippet si musíte přečíst všech sedm, protože v každém je něco jiného.
Druhý dotaz, který chcete mít, najde namespace vlastnící každý dotčený Ingress — to je seznam týmů, se kterými budete mluvit:
kubectl get ingress -A \
-o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,CLASS:.spec.ingressClassName \
--no-headers | sort | uniq -c | awk '{print $2}' | sort -uFázování, které funguje
Gateway API a Ingress mohou v clusteru běžet vedle sebe. Toho využijte — big-bang cutover tady nedává smysl.
- Zapněte App Routing s Gateway API a nechte starý NGINX běžet. Nic se nerozbije, jen máte druhou datovou rovinu.
- Postavte
Gatewayv platformním namespace, s vlastní IP a certifikátem z Key Vaultu. Otestujte na testovacím hostname. - Migrujte aplikace po jedné, od nejjednodušší. Pro každou vytvořte
HTTPRoute, ověřte na dočasném hostname, pak přehoďte DNS. - Nechte si
configuration-snippetaplikace na konec. Ty budete potřebovat Istio konfiguraci a možná i rozhodnutí, že se dané chování ruší. - Odinstalujte
cert-manageraexternal-dnsaž na úplný závěr, když už je z ingressu nikdo nepotřebuje. - Smažte NGINX controller a teprve tím je migrace hotová.
Kroky 1–3 zvládnete v běžném sprintu. Krok 4 je ten, který si zaslouží vlastní odhad — a proto ho chcete mít zauditovaný z předchozí sekce dřív, než komukoliv slíbíte termín.
Kde je hranice s Istiem
Pokud stejně směřujete k service mesh, stojí za zvážení jít rovnou tam. Na AKS Automatic s Kubernetes 1.36+ jde vypnout výchozí app-routing add-on a jet Istio add-on s Istio CNI. Dostanete stejné Gateway API, ale s plnou kontrolou nad mesh konfigurací.
Rozhodovací pravidlo, které používám:
- Chcete jen ingress → App Routing. GatewayClass
approuting-istiopod kapotou Istio stejně používá, ale spravuje ho Microsoft a vy neřešíte upgrade cyklus. - Chcete mTLS mezi službami, L7 autorizaci nebo traffic mirroring → Istio add-on rovnou. Jinak byste App Routing stejně za půl roku vypínali.
Pokud na clusteru řešíte i network policy, tenhle rozhovor se překrývá s volbou dataplane — k tomu jsem psal samostatně v článku o migraci z Calico na Cilium.
Co si z toho odnést
Deadline je listopad 2026, ale reálný termín je říjen — chcete mít měsíc rezervy, ne dojíždět na poslední patch. Migrace není drop-in: mění se objektový model i rozdělení odpovědnosti mezi platformní a aplikační tým, což je změna procesu, ne jen YAMLu.
A odhad nedávejte, dokud nespustíte ten audit skript. Rozdíl mezi clusterem, kde je jen rewrite-target a ssl-redirect, a clusterem se sedmi configuration-snippet, je řádový.
Ostatní věci, které chcete mít v AKS clusteru srovnané před takhle velkým zásahem, jsem shrnul v produkčním checklistu pro AKS. Pokud řešíte migraci na Gateway API ve větším prostředí a chcete se poradit o fázování, mrkněte na služby cloudové architektury.
Zdroje
- App Routing: Gateway API GA — AKS blog, 10. 6. 2026
- Azure/AKS issue #5516 — timeline podpory managed NGINX
O autorovi

Martin Rylko
Senior Cloud Architect & DevOps Engineer
Více než 14 let v IT – od on-premises datacenter a Hyper-V clusteringu po cloudovou infrastrukturu v Microsoft Azure. Specializuji se na Landing Zones, IaC automatizaci, Kubernetes a bezpečnostní compliance.
Nejcastejsi dotazy
Do kdy musím z Ingress-NGINX v AKS odejít?▾
Je to jen výměna controlleru, nebo se mění i mé manifesty?▾
Co nahradí cert-manager a external-dns?▾
Můžu místo App Routingu rovnou nasadit Istio?▾
Mohlo by vás zajímat
AKS Breaking Changes: Co se ruší v březnu 2026 a jak migrovat
Windows Server 2019, Azure Linux 2.0 a kubelet certificate rotation – tři AKS retirements s deadline v březnu 2026. Praktický migrační návod s CLI příkazy a Bicep šablonami.
ČístAKS Cilium NetworkPolicy: Migrace z Calico bez výpadku produkce
Praktický playbook migrace AKS clusteru z Calico Network Policy engine na Azure CNI Powered by Cilium. Zero-downtime postup, eBPF benefity a typické pasti při rolloutu.
ČístAzure Container Apps vs AKS: Rozhodovací matice pro rok 2026
Kdy zvolit Azure Container Apps a kdy AKS – cena, operations overhead, networking a typické use cases. Reálné rozhodovací příklady ze tří různých projektů.
Číst