Anteckningar för Application Gateway-ingresskontrollant
Kubernetes Ingress-resursen kan kommenteras med godtyckliga nyckel/värde-par. AGIC förlitar sig på anteckningar för att programmera Application Gateway-funktioner, som inte kan konfigureras med hjälp av 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 en ingressresurs ska kunna observeras av AGIC måste den kommenteras med kubernetes.io/ingress.class: azure/application-gateway
. Först då fungerar AGIC med den aktuella ingressresursen.
Serverdelssökvägsprefix
Med följande kommentar kan den serverdelssökväg som anges i en ingressresurs skrivas om med prefixet som anges i den här kommentaren. Det gör det möjligt för användare att exponera tjänster vars slutpunkter skiljer sig från slutpunktsnamn som används för att exponera en tjänst i en ingressresurs.
Användning
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 har du definierat en ingressresurs med namnet go-server-ingress-bkprefix
med en anteckning 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/
.
Kommentar
I exemplet ovan definieras endast en regel. Anteckningarna gäller dock för hela ingressresursen, så om en användare har definierat flera regler konfigureras serverdelssökvägsprefixet för var och en av de angivna sökvägarna. Om en användare vill ha olika regler med olika sökvägsprefix (även för samma tjänst) skulle de behöva definiera olika ingressresurser.
Värdnamn för serverdel
Med den här kommentaren kan vi ange det värdnamn som Application Gateway ska använda när vi pratar med poddarna.
Användning
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
Application Gateway kan konfigureras för att skicka anpassade hälsoavsökningar till serverdelsadresspoolen. När dessa anteckningar finns skapar Kubernetes Ingress-kontrollanten en anpassad avsökning för att övervaka serverdelsprogrammet och tillämpar ändringarna på programgatewayen.
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 hälsoavsökningsport.
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 som hälsoavsökningen körs vid.
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.
Användning
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
Application Gateway kan konfigureras för att automatiskt omdirigera HTTP-URL:er till sina HTTPS-motsvarigheter. När den här kommentaren finns och TLS är korrekt konfigurerad skapar Kubernetes ingresskontrollant en routningsregel med en omdirigeringskonfiguration och tillämpar ändringarna på din Application Gateway. Omdirigeringen som skapas blir HTTP 301 Moved Permanently
.
Användning
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
connection-draining
: Med den här kommentaren kan vi ange om anslutningen ska tömmas.
connection-draining-timeout
: Med den här kommentaren kan vi ange en timeout, varefter Application Gateway avslutar begäranden till den tömande serverdelsslutpunkten.
Användning
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
Med följande kommentar kan du ange om cookiebaserad tillhörighet ska aktiveras.
Användning
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
Med följande kommentar kan du ange tidsgränsen för begäran i sekunder, varefter Application Gateway misslyckas med begäran om svaret inte tas emot.
Användning
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
Med följande kommentar kan du ange om den här slutpunkten ska exponeras på den privata IP-adressen för Application Gateway.
Kommentar
- För Application Gateway som inte har en privat IP-adress ignoreras ingresser med
appgw.ingress.kubernetes.io/use-private-ip: "true"
. Detta återspeglas i kontrollantloggarna och ingresshändelserna för dessa ingresser medNoPrivateIP
varning.
Användning
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
Med anteckningen kan du konfigurera en klientdelslyssnare att använda andra portar än 80/443 för http/https.
Om porten ligger inom det auktoriserade intervallet App Gw (1–64999) skapas den här lyssnaren på den här specifika porten. Om en ogiltig port eller ingen port anges i anteckningen återgår konfigurationen till standardvärdet 80 eller 443.
Användning
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
Extern begäran måste riktas http://somehost:8080 i stället för http://somehost.
Serverdelsprotokoll
Med följande kommentar kan du ange det protokoll som Application Gateway ska använda när du kommunicerar med poddarna. Protokoll som stöds är http
och https
.
Kommentar
Även om självsignerade certifikat stöds på Application Gateway stöder https
AGIC för närvarande endast 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.
Användning
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
Application Gateway kan konfigureras för att acceptera flera värdnamn. Med anteckningen hostname-extention kan du definiera flera värdnamn, inklusive värdnamn med jokertecken. Då läggs värdnamnen till i det FQDN som definieras i ingress spec.rules.host på klientdelslyssnaren så att den konfigureras som en lyssnare för flera platser.
Användning
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
Kommentar
I exemplet ovan konfigureras lyssnaren för att acceptera trafik för värdnamnen "hostname1.contoso.com" och "hostname2.contoso.com"
WAF-princip för sökväg
Med den här kommentaren kan du koppla en waf-princip som redan har skapats till listsökvägarna för en värd i en Kubernetes Ingress-resurs som kommenteras.
Användning
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/00000000-0000-0000-0000-000000000000/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
Kommentar
WAF-principen tillämpas på både /ad-server- och /auth-URL:er.
Application Gateway SSL-certifikat
SSL-certifikatet kan konfigureras till Application Gateway antingen från en lokal PFX-certifikatfil eller en referens till ett icke-konfigurerat hemligt ID för Azure Key Vault. När anteckningen finns med ett certifikatnamn och certifikatet är förinstallerat i Application Gateway skapar Kubernetes ingresskontrollant en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din App Gateway. appgw-ssl-certificate-annotation kan också användas tillsammans med ssl-redirect-anteckningar vid SSL-omdirigering.
Mer information finns i appgw-ssl-certificate-funktionen.
Kommentar
Kommentaren "appgw-ssl-certificate" ignoreras när TLS-specifikationen definieras som ingress samtidigt. Om en användare vill ha olika certifikat med olika värdar (avslutning av flera tls-certifikat) skulle de behöva definiera olika ingressresurser.
Användning
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
Användare kan konfigurera en SSL-profil på Application Gateway per lyssnare. När anteckningen finns med ett profilnamn och profilen är förinstallerad i Application Gateway skapar Kubernetes ingresskontrollant en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din App Gateway.
Användning
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
Användare kan nu konfigurera sina egna rotcertifikat till Application Gateway så att de är betrodda via AGIC. Anteckningsappen-trusted-root-certificate kan användas tillsammans med antecknings-backend-protocol för att indikera SSL-kryptering från slutpunkt till slutpunkt, flera rotcertifikat, avgränsade med kommatecken, om det anges, till exempel "name-of-my-root-cert1,name-of-my-root-certificate2".
Användning
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
Med följande kommentar kan du tilldela en befintlig omskrivningsregel inställd på motsvarande routningsregel för begäranden.
Användning
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
Application Gateway för containrar har släppts, vilket ger många prestanda-, återhämtnings- och funktionsändringar. Överväg att använda Application Gateway för containrar för nästa distribution. Url-omskrivningsregler för Application Gateway för containrar kan hittas här för Gateway API och här för Ingress API. Regler för omskrivning av huvuden för Application Gateway för containrar finns här för Gateway-API:et.
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.
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, frågesträngsparametrar samt ändra begärande- och svarshuvuden. Du kan också lägga till villkor för att se till att URL:en eller de angivna rubrikerna skrivs om endast när vissa villkor uppfylls. Dessa villkor baseras på informationen för begäran och svar. 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, till exempel att lägga till säkerhetsrelaterade rubrikfält som HSTS/X-XSS-Protection, ta bort fält för svarshuvud som kan avslöja känslig information och ta bort portinformation från X-Forwarded-For-huvuden.
Med funktionen FÖR 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 de 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
Användning
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
Med den här anteckningen kan application gateway-ingresskontrollanten uttryckligen ange prioriteten för de associerade reglerna för routning av begäranden.
Användning
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 exemplet ovan skulle routningsregeln för begäran ha en prioritet på 10 angivna.