Anteckningar för Application Gateway-ingresskontrollant
Du kan kommentera Kubernetes-ingressresursen med godtyckliga nyckel/värde-par. Application Gateway Ingress Controller (AGIC) förlitar sig på anteckningar för att programmera Azure Application Gateway-funktioner som inte kan konfigureras via inkommande YAML. Ingressanteckningar tillämpas på alla HTTP-inställningar, serverdelspooler och lyssnare som härleds från en ingressresurs.
Lista över anteckningar som stöds
För att AGIC ska kunna observera en ingressresurs måste resursen kommenteras med kubernetes.io/ingress.class: azure/application-gateway
.
Serverdelssökvägsprefix
Med följande kommentar kan den serverdelssökväg som anges i en ingressresurs skrivas om med det angivna prefixet. Använd den för att exponera tjänster vars slutpunkter skiljer sig från de slutpunktsnamn som du använder för att exponera en tjänst i en ingressresurs.
Förbrukning
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-bkprefix
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
I föregående exempel definieras en ingressresurs med namnet go-server-ingress-bkprefix
med en anteckning med namnet appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. Kommentaren instruerar Application Gateway att skapa en HTTP-inställning som har en åsidosättning av sökvägsprefixet för sökvägen /hello
till /test/
.
Exemplet definierar bara en regel. Anteckningarna gäller dock för hela ingressresursen. Så om du definierar flera regler konfigurerar du serverdelssökvägsprefixet för var och en av de angivna sökvägarna. Om du vill ha olika regler med olika sökvägsprefix (även för samma tjänst) måste du definiera olika ingressresurser.
Värdnamn för serverdel
Använd följande kommentar för att ange det värdnamn som Application Gateway ska använda när du pratar med poddarna.
Förbrukning
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Anpassad hälsoavsökning
Du kan konfigurera Application Gateway för att skicka anpassade hälsoavsökningar till serverdelsadresspoolen. När följande anteckningar finns skapar Kubernetes-ingresskontrollanten en anpassad avsökning för att övervaka serverdelsprogrammet. Kontrollanten tillämpar sedan ändringarna på Application Gateway.
health-probe-hostname
: Den här kommentaren tillåter ett anpassat värdnamn för hälsoavsökningen.health-probe-port
: Den här anteckningen konfigurerar en anpassad port för hälsoavsökningen.health-probe-path
: Den här kommentaren definierar en sökväg för hälsoavsökningen.health-probe-status-code
: Med den här kommentaren kan hälsoavsökningen acceptera olika HTTP-statuskoder.health-probe-interval
: Den här kommentaren definierar det intervall med vilket hälsoavsökningen körs.health-probe-timeout
: Den här kommentaren definierar hur länge hälsoavsökningen väntar på ett svar innan avsökningen misslyckas.health-probe-unhealthy-threshold
: Den här kommentaren definierar hur många hälsoavsökningar som måste misslyckas för att serverdelen ska markeras som inte felfri.
Förbrukning
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 80
appgw.ingress.kubernetes.io/health-probe-path: "/"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 30
appgw.ingress.kubernetes.io/health-probe-timeout: 30
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 81
appgw.ingress.kubernetes.io/health-probe-path: "/probepath"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 31
appgw.ingress.kubernetes.io/health-probe-timeout: 31
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Omdirigering av TLS
Du kan konfigurera Application Gateway för att automatiskt omdirigera HTTP-URL:er till deras HTTPS-motsvarigheter. När den här anteckningen finns och TLS är korrekt konfigurerad skapar Kubernetes ingresskontrollant en routningsregel med en omdirigeringskonfiguration. Kontrollanten tillämpar sedan ändringarna på din Application Gateway-instans. Den skapade omdirigeringen är HTTP 301 Moved Permanently
.
Förbrukning
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-redirect
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- www.contoso.com
secretName: testsecret-tls
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Anslutningsdränering
Använd följande anteckningar om du vill använda anslutningsdränering:
connection-draining
: Den här kommentaren anger om anslutningen ska tömmas.connection-draining-timeout
: Den här kommentaren anger en tidsgräns, varefter Application Gateway avslutar begäranden till den tömande serverdelsslutpunkten.
Förbrukning
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-drain
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Cookiebaserad tillhörighet
Använd följande kommentar för att aktivera cookiebaserad tillhörighet.
Förbrukning
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-affinity
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Tidsgräns för förfrågan
Använd följande kommentar för att ange tidsgränsen för begäran i sekunder. Efter tidsgränsen misslyckas Application Gateway med en begäran om svaret inte tas emot.
Förbrukning
appgw.ingress.kubernetes.io/request-timeout: "20"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/request-timeout: "20"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Använda privat IP
Använd följande kommentar för att ange om den här slutpunkten ska exponeras på en privat IP-adress för Application Gateway.
För en Application Gateway-instans som inte har en privat IP-adress ignoreras ingresser med appgw.ingress.kubernetes.io/use-private-ip: "true"
. Kontrollantloggarna och ingresshändelserna för dessa ingresser visar en NoPrivateIP
varning.
Förbrukning
appgw.ingress.kubernetes.io/use-private-ip: "true"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-privateip
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Åsidosätt klientdelsport
Använd följande kommentar för att konfigurera en klientdelslyssnare för att använda andra portar än 80 för HTTP och 443 för HTTPS.
Om porten ligger inom det auktoriserade intervallet för Application Gateway (1 till 64999) skapas lyssnaren på den här specifika porten. Om du anger en ogiltig port eller ingen port i anteckningen använder konfigurationen standardvärdet 80 eller 443.
Förbrukning
appgw.ingress.kubernetes.io/override-frontend-port: "port"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-overridefrontendport
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/override-frontend-port: "8080"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Kommentar
Externa begäranden måste riktas http://somehost:8080
i stället för http://somehost
.
Serverdelsprotokoll
Använd följande för att ange det protokoll som Application Gateway ska använda när den kommunicerar med poddarna. Protokoll som stöds är HTTP och HTTPS.
Även om självsignerade certifikat stöds på Application Gateway stöder AGIC för närvarande endast HTTPS när poddar använder ett certifikat som signerats av en välkänd certifikatutfärdare.
Använd inte port 80 med HTTPS och port 443 med HTTP på poddarna.
Förbrukning
appgw.ingress.kubernetes.io/backend-protocol: "https"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Värdnamnstillägg
Du kan konfigurera Application Gateway att acceptera flera värdnamn. Använd kommentaren hostname-extension
för att definiera flera värdnamn, inklusive värdnamn för jokertecken. Den här åtgärden lägger till värdnamnen i det FQDN som definieras i ingressinformationen spec.rules.host
på klientdelslyssnaren, så att den konfigureras som en lyssnare för flera platser.
Förbrukning
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-multisite
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
spec:
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
I föregående exempel konfigureras lyssnaren att acceptera trafik för värdnamnen hostname1.contoso.com
och hostname2.contoso.com
.
WAF-princip för sökväg
Använd följande kommentar för att koppla en befintlig brandväggsprincip för webbprogram (WAF) till listsökvägarna för en värd i en Kubernetes-ingressresurs som kommenteras. WAF-principen tillämpas på både /ad-server
url:er och /auth
url:er.
Förbrukning
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ad-server-ingress
namespace: commerce
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
rules:
- http:
paths:
- path: /ad-server
backend:
service:
name: ad-server
port:
number: 80
pathType: Exact
- path: /auth
backend:
service:
name: auth-server
port:
number: 80
pathType: Exact
Application Gateway SSL-certifikat
Du kan konfigurera SSL-certifikatet till Application Gateway från antingen en lokal PFX-certifikatfil eller en referens till ett oversionerat hemligt ID för Azure Key Vault. När anteckningen finns med ett certifikatnamn och certifikatet är förinstallerat i Application Gateway skapar Kubernetes-ingresskontrollanten en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din Application Gateway-instans. Du kan också använda anteckningen appgw-ssl-certificate
tillsammans med en ssl-redirect
anteckning vid en SSL-omdirigering.
Kommentar
Kommentaren appgw-ssl-certificate
ignoreras när TLS-specifikationen definieras i ingress samtidigt. Om du vill ha olika certifikat med olika värdar (avslutning av flera TLS-certifikat) måste du definiera olika inkommande resurser.
Förbrukning
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Application Gateway SSL-profil
Du kan konfigurera en SSL-profil på Application Gateway-instansen per lyssnare. När anteckningen finns med ett profilnamn och profilen är förinstallerad i Application Gateway skapar Kubernetes-ingresskontrollanten en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din Application Gateway-instans.
Förbrukning
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Betrott rotcertifikat för Application Gateway
Nu kan du konfigurera dina egna rotcertifikat till Application Gateway så att de är betrodda via AGIC. Du kan använda anteckningen appgw-trusted-root-certificate
tillsammans med anteckningen backend-protocol
för att ange SSL-kryptering från slutpunkt till slutpunkt. Om du anger flera rotcertifikat separerar du dem med kommatecken. till exempel name-of-my-root-cert1,name-of-my-root-cert2
.
Förbrukning
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Skriv om regeluppsättning
Använd följande kommentar för att tilldela en befintlig omskrivningsregel inställd på motsvarande routningsregel för begäranden.
Förbrukning
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-bkprefix
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rewrite-rule-set: add-custom-response-header
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080
Skriv om anpassad resurs för regeluppsättning
Kommentar
Lanseringen av Application Gateway for Containers introducerar många prestanda-, återhämtnings- och funktionsändringar. Överväg att använda Application Gateway för containrar för nästa distribution.
Du hittar URL-omskrivningsregler för Application Gateway för containrar i den här artikeln om Gateway-API :et och den här artikeln om ingress-API:et. Du hittar omskrivningsregler för huvuden för Application Gateway för containrar i den här artikeln om Gateway-API:et.
Med Application Gateway kan du skriva om det valda innehållet i begäranden och svar. Med den här funktionen kan du översätta URL:er, ändra frågesträngsparametrar och ändra begärande- och svarshuvuden. Du kan också använda den här funktionen för att lägga till villkor för att se till att URL:en eller de angivna rubrikerna skrivs om endast när vissa villkor uppfylls. Omskrivning av anpassad resurs för regeluppsättning för den här funktionen till AGIC.
MED HTTP-huvuden kan en klient och server skicka ytterligare information med en begäran eller ett svar. Genom att skriva om dessa rubriker kan du utföra viktiga uppgifter som att lägga till säkerhetsrelaterade rubrikfält (till exempel HSTS
eller X-XSS-Protection
), ta bort svarshuvudfält som kan avslöja känslig information och ta bort portinformation från X-Forwarded-For
rubriker.
Med funktionen URL-omskrivning kan du:
- Skriv om värdnamnet, sökvägen och frågesträngen för begärande-URL:en.
- Välj att skriva om URL:en för alla begäranden eller endast begäranden som matchar ett eller flera av de villkor som du anger. Dessa villkor baseras på egenskaperna för begäran och svar (begärandehuvud, svarshuvud och servervariabler).
- Välj att dirigera begäran baserat på antingen den ursprungliga URL:en eller den omskrivna URL:en.
Kommentar
Den här funktionen stöds sedan 1.6.0-rc1. Använd appgw.ingress.kubernetes.io/rewrite-rule-set
, som gör att du kan använda en befintlig omskrivningsregel som har angetts på Application Gateway.
Förbrukning
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
Exempel
apiVersion: appgw.ingress.azure.io/v1beta1
kind: AzureApplicationGatewayRewrite
metadata:
name: my-rewrite-rule-set-custom-resource
spec:
rewriteRules:
- name: rule1
ruleSequence: 21
conditions:
- ignoreCase: false
negate: false
variable: http_req_Host
pattern: example.com
actions:
requestHeaderConfigurations:
- actionType: set
headerName: incoming-test-header
headerValue: incoming-test-value
responseHeaderConfigurations:
- actionType: set
headerName: outgoing-test-header
headerValue: outgoing-test-value
urlConfiguration:
modifiedPath: "/api/"
modifiedQueryString: "query=test-value"
reroute: false
Regelprioritet
Följande kommentar gör det möjligt för Application Gateway-ingresskontrollanten att uttryckligen ange prioriteten för de associerade routningsreglerna för begäranden.
Förbrukning
appgw.ingress.kubernetes.io/rule-priority:
Exempel
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-rulepriority
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rule-priority: 10
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080
I föregående exempel anges en prioritet på 10 för routningsregeln för begäranden.