Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Application Gateway Ingress Controller (AGIC) och Application Gateway for Containers är två lösningar som möjliggör belastningsutjämning för Azure Kubernetes Service-tjänster (AKS). Under 2018 startade Application Gateway Application Gateway Ingress Controller, som översatte Kubernetes Ingress-konfiguration till Application Gateway-konfiguration. Med tiden har Kubernetes drivit kraven på skalan, prestandan och introduktionen av ett efterföljande API till Ingress med namnet Gateway API, vilket har lett till introduktionen av Application Gateway för Containers.
Application Gateway för containrar är nästa steg i utvecklingen av Application Gateway Ingress Controller, vilket ger fördelar som:
- Ökad prestanda med nära realtidsuppdateringar för att lägga till eller flytta poddar, ruttningar och sonder.
- Trafikdelning/viktad resursallokering
- Kubernetes Gateway- och ingress-API
- Konfiguration via Azure eller Kubernetes
Med de förbättringar som tillhandahålls rekommenderar vi att du påbörjar övergången från Application Gateway Ingress Controller till Application Gateway för containrar.
Migreringsmål
Migrering till Application Gateway för containrar är utformad för att uppfylla tre mål:
- Aktivera en stegvis migreringsmetod
- Tillåt validering från slutpunkt till slutpunkt före migrering
- Se till att det inte finns någon stilleståndstid
Den här artikeln innehåller en översikt över migreringsstrategin. Se följande diagram:
I exemplet som visas betjänar Application Gateway for Containers och Application Gateway Ingress Controller båda backend-mål med hjälp av unika frontend-komponenter. Efter valideringen av att Application Gateway för containrar fungerar som förväntat kan trafik endast dirigeras till Application Gateway för containrars klientdel och konfigurationen till Application Gateway-ingresskontrollanten kan dras tillbaka.
Funktionsberoenden och mappningar
Före migreringen är det viktigt att identifiera eventuella beroenden på Application Gateway-ingresskontrollanten som kanske ännu inte är tillgängliga i Application Gateway för containrar. Arbetsbelastningar med beroende av dessa funktioner bör prioriteras senare i migreringsstrategin tills sådana funktioner avblockeras i Application Gateway för containrar.
Sådana beroenden omfattar:
- Privat IP-adress
- Andra portar än 80 och 443
Här är en sammanfattad lista över AGIC-anteckningar och om Application Gateway för containrar har översatt sådana funktioner till antingen Gateway- eller Ingress-API.
Migreringsupplevelse och vad du kan förvänta dig
Migrering från Application Gateway Ingress Controller till Application Gateway for Containers är utformad för att vara en fyrastegsprocess:
Steg 1: Installera Application Gateway för containrars ALB-styrenhet
Steg 2: Översätt AGIC-ingress till Application Gateway för Containers-ingress
Steg 3: Utföra testning från slutpunkt till slutpunkt mot Application Gateway för containrar
Steg 4: Dirigera trafik från AGIC till Application Gateway för containrar
Steg 2 till och med 4 upprepas för varje tjänst som du planerar att migrera.
Steg 1: Installera ALB-styrenhet
Det första steget i migreringen är att se till att ALB-kontrollanten för Application Gateway för containrar installeras och körs. Kontrollera att både Application Gateway Ingress Controller och Application Gateway for Containers ALB-styrenhet kan köras parallellt i samma kluster.
Anvisningar om hur du distribuerar ALB-styrenheten finns i Installera Application Gateway för containrar ALB-styrenhet.
Steg 2: Översätta ingress
Application Gateway för containrar har justerat implementeringen så att ingress- eller gateway-API:et används internt där det är möjligt. För fall där ytterligare funktioner krävs men inte tillhandahålls av API:et tillämpas anpassade resurser i stället för anteckningar.
En lista över AGIC-anteckningar och deras motsvarande implementering i Ingress- eller Gateway-API:et finns i avsnittet Anteckningar i den här artikeln.
Steg 3: Utföra validering från slutpunkt till slutpunkt
Klienttrafik kommer att tas emot på en Application Gateway for Containers-klientdelsresurs. Varje frontend har kardinalitet till en gateway- eller ingressresurs. När konfigurationen har definierats i dina gateway- eller ingressresurser ska du identifiera rätt frontend.
Kontrollera Ingress- och gateway-konfigurationen med hjälp av en värdfil eller DNS-post för att testa trafikflödet till Application Gateway för containers. Kontrollera att trafiken kan flyttas från klienten till serverdelen via Application Gateway för containrar och att alla begäranden och svar har förväntade rubriker, omdirigeringar och routningsvillkor.
Steg 4: Dirigera trafik till Application Gateway för containrar
När du har genomfört end-to-end-testningen dirigerar du trafik till applikationsgatewayen för containrar. Uppdatera offentliga DNS-poster så att de pekar på Application Gateway för containers frontend A record. I de flesta fall skulle detta vara i form av en CNAME-post eller, om du anger ett apexdomännamn, en aliaspost. Tillåt att trafik flödar naturligt till Application Gateway for Containers-klientdelen.
Tip
- Innan migreringen identifierar du TTL-värdet (time to live) för den DNS-post som för närvarande betjänar trafik till klientdelen av Application Gateway. Se till att samma tid och tid som konfigurerats i Application Gateway för att anslutningen ska tömmas för att säkerställa att alla klienter har matchat den nya DNS-posten till Application Gateway för containrar innan ingress-/gatewaykonfigurationen dras tillbaka till AGIC.
- Överväg migrering under en tid med lågtrafik för att verifiera
- Om migreringen inte fungerade som förväntat återställer du DNS-posten så att den pekar tillbaka till Application Gateway-klientdelen och upprepar processen.
Steg 5: Avveckla Ingresskontrollant för Application Gateway
När alla tjänster har migrerats kan du avveckla Application Gateway Ingress Controller.
Ta bort inkommande resurser
Ta bort varje Ingress-resurs som refererar till Application Gateway Ingress Controller med annoteringen kubernetes.io/ingress.class: azure/application-gateway eller definierar en ingressClassName av azure-application-gateway.
kubectl delete ingress your-ingress-name -n your-ingress-namespace
AGIC-tillägg
Om du använder AGIC-tillägget kan du ta bort tillägget genom att köra följande:
az aks disable-addons -n <AKS-cluster-name> -g <AKS-resource-group-name> -a ingress-appgw
Helm-utplacering
Om AGIC har distribuerats via helm kan du avinstallera kontrollanten genom att köra följande:
helm uninstall ingress-azure
Rensa Azure-resurser
När ingresskontrollanten har tagits bort måste du ta bort Application Gateway-resursen.
Note
Om aks-tillägget etablerades i samband med hänvisning till en tidigare distribuerad Application Gateway i Azure måste du ta bort Application Gateway-resursen manuellt.
Annotations
Följande anteckningar för Application Gateway Ingress Controller och motsvarande implementering i Application Gateway för containrar är följande.
Åsidosättning av sökväg till backend-destination
AGIC-anteckningar
- appgw.ingress.kubernetes.io/backend-path-prefix
- appgw.ingress.kubernetes.io/backend-hostname
- appgw.ingress.kubernetes.io/backend-protocol
Implementering av Application Gateway för containrar
För begäranden som skriver om serverdelens målsökväg använder du Application Gateway för containerars URL-omskrivningsfunktioner.
URL-omskrivning för Gateway-API
I Gateway-API:et måste du definiera en HTTPRoute resurs som har ett filter för URLRewrite sökvägen.
URL-omskrivning för Ingress API
I INGRESS-API:et måste du definiera en IngressExtension resurs och definiera en omskrivning med en ReplacePrefixMatch.
Redirect
AGIC-anteckningar
- appgw.ingress.kubernetes.io/ssl-redirect
Implementering av Application Gateway för containrar
För begäranden som ska omdirigeras från port 80 till 443 för HTTPS använder du url-omdirigeringsstöd i Application Gateway för containrar.
URL-omdirigering för gateway-API
I Gateway-API:et måste du definiera en gatewayresurs som lyssnar på både port 80 och 443. Dessutom skapas två HTTPRoute-resurser, en för att lyssna och hantera trafik på 443 och en annan för att utlösa omdirigeringen för trafik som tas emot på port 80.
URL-omdirigering för ingress-API
I Ingress-API:et måste du definiera en IngressExtension resurs som innehåller en regel som definierar en requestRedirect med scheme värdet https. Totalt måste två ingressresurser definieras, en för att lyssna på port 80 för HTTP-begäran för att utlösa en omdirigering och en för att lyssna på port 443 för hantering av HTTPS-begäranden.
SSL-certifikat i Gateway-API
I Gateway-API:et refererar du till certifikatet på din Gateway-resurs.
tls:
mode: Terminate
certificateRefs:
- kind : Secret
group: ""
name: listener-tls-secret
SSL-certifikat i ingress-API
Använd egenskapen tls i ingress-API:et, till exempel
tls:
- hosts:
- example.com
secretName: listener-tls-secret
Frontend TLS-certifikat
AGIC-kommentar
- appgw.ingress.kubernetes.io/appgw-ssl-certificate
Implementering av Application Gateway för containrar
Direkt certifikatuppladdning och referens till ett certifikat i Azure Key Vault är inte tillgängligt.
Hemligheter bör lagras i AKS Secret Store och refereras med namn.
Upprätta förtroende för backends certifikatkedja
AGIC-kommentar
- appgw.ingress.kubernetes.io/appgw-trusted-root-certificate
Implementering av Application Gateway för containrar
I både gateway- och ingress-API:et kan du använda den anpassade resursen BackendTLSPolicy för att definiera din egen certifikatutfärdare för att upprätta kedjeförtroende för det certifikat som används av serverdelstjänsten.
Frontend-TLS-princip/SSL-profil
AGIC-kommentar
- appgw.ingress.kubernetes.io/appgw-ssl-profile
Implementering av Application Gateway för containrar
Med Application Gateway för containrar kan kunder referera till fördefinierade TLS-principer för att styra omfånget för vilka chiffer som förhandlas fram av klienten till klientdelen av Application Gateway för containrar.
Klientdels-TLS-princip i Gateway-API
Om du vill utnyttja den här funktionen måste du använda gateway-API:et. Mer information om TLS-principen finns här.
Note
De fördefinierade principnamnen och chiffersviterna skiljer sig från Application Gateway Ingress Controller. Se den fördefinierade TLS-principtabellen.
Frontend-TLS-policy i Ingress-API
Anpassad TLS-policy stöds inte av Application Gateway för containrar idag.
Sessionstillhörighet
AGIC-kommentar
- appgw.ingress.kubernetes.io/cookie-based-affinity
Implementering av Application Gateway för containrar
Application Gateway för containrar stöder cookie-baserad sessionstillhörighet för både Gateway och Ingress-API:et.
Sessionstillhörighet i Gateway-API
I Gateway-API definierar du en RoutePolicy-resurs med egenskaper relaterade till sessionAffinity.
Sessionstillhörighet i ingress-API
I INGRESS API definierar du en IngressExtension-resurs med egenskaper relaterade till sessionAffinity.
Mer information om hur du konfigurerar Application Gateway för containrar med sessionstillhörighet finns här: Sessionstillhörighet.
Privat frontend
AGIC-kommentar
- appgw.ingress.kubernetes.io/use-private-ip
Implementering av Application Gateway för containrar
Den privata IP-klientdelen stöds för närvarande inte av Application Gateway för containrar.
WAF
AGIC-kommentar
- appgw.ingress.kubernetes.io/waf-policy-for-path
Implementering av Application Gateway för containrar
Brandväggsprincip för webbprogram
Motsvarigheten är en ny WebApplicationFirewallPolicy-resurs med en referens till en definierad resurs eller resursavsnitt. Mer information finns i dokumentet Brandvägg för webbprogram .
Anpassade hälsoavsökningar
AGIC-anteckningar
- appgw.ingress.kubernetes.io/health-probe-hostname
- appgw.ingress.kubernetes.io/health-probe-port
- appgw.ingress.kubernetes.io/health-probe-path
- appgw.ingress.kubernetes.io/health-probe-status-codes
- appgw.ingress.kubernetes.io/health-probe-interval
- appgw.ingress.kubernetes.io/health-probe-timeout
- appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold
Implementering av Application Gateway för containrar
HealthCheckPolicy
För både gateway- och ingress-API:et är motsvarigheten en ny HealthCheckPolicy-resurs. Mer information finns i dokumentet Anpassade hälsokontroller.
Skriv om rubrik
AGIC-anteckningar
- appgw.ingress.kubernetes.io/rewrite-rule-set
- appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
- appgw.ingress.kubernetes.io/hostname-extension
Implementering av Application Gateway för containrar
Sidhuvudomskrivning i Gateway-API
I Gateway-API:et definierar du en RequestHeaderModifier-matchning och filter för att skriva om begäran.
Sidhuvudomskrivning i API för ingress
I INGRESS API definierar du en IngressExtension-resurs med en omskrivningsregel.
Tömning av anslutningar
AGIC-anteckningar
- appgw.ingress.kubernetes.io/connection-draining
- appgw.ingress.kubernetes.io/connection-draining-timeout
Implementering av Application Gateway för containrar
Anslutningsdränering är aktiverat som standard för alla Application Gateway for Containers-distributioner och kan inte konfigureras.
Scenarios:
- Inskalning: När automatisk skalning reducerar resurser töms anslutningarna i 5 minuter. Efter 5 minuter stängs anslutningar och klienter måste initiera en ny anslutning.
- Ohälsosam hälsoavsökning: När en ohälsosam hälsoavsökning identifieras bevaras anslutningarna tills klienten kopplas från.
- Podden tas bort från backend-systemet: När en podd tas bort i AKS fortsätter Application Gateway for Containers att bevara öppna anslutningar tills klienten kopplas från.
Begäran time-out
AGIC-kommentar
- appgw.ingress.kubernetes.io/request-timeout
Implementering av Application Gateway för containrar
Tidsgränser för begäranden kan inte konfigureras i Application Gateway för containrar. En lista över standardvärden för timeout dokumenteras här.
Åsidosättning av frontendport
AGIC-kommentar
- appgw.ingress.kubernetes.io/override-frontend-port
Implementering av Application Gateway för containrar
Application Gateway för containrar stöder endast portar på 80 och 443. Portarna 80 och/eller 443 definieras i varje gateway- eller ingressresurs.