Aantekeningen voor de controller voor inkomend verkeer van Application Gateway
U kunt aantekeningen toevoegen aan de Kubernetes-bron voor inkomend verkeer met willekeurige sleutel-/waardeparen. Application Gateway Ingress Controller (AGIC) is afhankelijk van aantekeningen voor het programmeren van Azure-toepassing Gateway-functies die niet kunnen worden geconfigureerd via de YAML voor inkomend verkeer. Aantekeningen voor inkomend verkeer worden toegepast op alle HTTP-instellingen, back-endpools en listeners die zijn afgeleid van een bron voor inkomend verkeer.
Lijst met ondersteunde aantekeningen
Als AGIC een toegangsbeheerobjectresource kan observeren, moet de resource worden voorzien van aantekeningen.kubernetes.io/ingress.class: azure/application-gateway
Voorvoegsel van back-endpad
Met de volgende aantekening kan het back-endpad dat is opgegeven in een ingangsresource, opnieuw worden geschreven met het opgegeven voorvoegsel. Gebruik deze om services weer te geven waarvan de eindpunten verschillen van de eindpuntnamen die u gebruikt om een service beschikbaar te maken in een toegangsbeheerobjectresource.
Gebruik
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Opmerking
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
In het voorgaande voorbeeld wordt een bron voor inkomend verkeer gedefinieerd met een aantekening go-server-ingress-bkprefix
met de naam appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. De aantekening vertelt Application Gateway om een HTTP-instelling te maken die een padvoorvoegsel overschrijft voor het pad /hello
naar /test/
.
In het voorbeeld wordt slechts één regel gedefinieerd. De aantekeningen zijn echter van toepassing op de gehele toegangsbeheerresource. Dus als u meerdere regels definieert, stelt u het voorvoegsel voor het back-endpad in voor elk van de opgegeven paden. Als u verschillende regels met verschillende padvoorvoegsels wilt (zelfs voor dezelfde service), moet u verschillende toegangsbeheerobjectbronnen definiëren.
Hostnaam van back-end
Gebruik de volgende aantekening om de hostnaam op te geven die Application Gateway moet gebruiken tijdens het praten met de pods.
Gebruik
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
Opmerking
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
Aangepaste statustest
U kunt Application Gateway configureren voor het verzenden van aangepaste statustests naar de back-endadresgroep. Wanneer de volgende aantekeningen aanwezig zijn, maakt de Kubernetes-ingangscontroller een aangepaste test om de back-endtoepassing te bewaken. De controller past de wijzigingen vervolgens toe op Application Gateway.
-
health-probe-hostname
: Met deze aantekening kan een aangepaste hostnaam op de statustest worden uitgevoerd. -
health-probe-port
: Met deze aantekening configureert u een aangepaste poort voor de statustest. -
health-probe-path
: Deze aantekening definieert een pad voor de statustest. -
health-probe-status-code
: Met deze aantekening kan de statustest verschillende HTTP-statuscodes accepteren. -
health-probe-interval
: Met deze aantekening wordt het interval gedefinieerd waarop de statustest wordt uitgevoerd. -
health-probe-timeout
: Met deze aantekening wordt gedefinieerd hoe lang de statustest wacht op een antwoord voordat de test mislukt. -
health-probe-unhealthy-threshold
: Met deze aantekening wordt gedefinieerd hoeveel statustests moeten mislukken voordat de back-end als beschadigd wordt gemarkeerd.
Gebruik
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
Opmerking
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
TLS-omleiding
U kunt Application Gateway zo configureren dat HTTP-URL's automatisch worden omgeleid naar hun HTTPS-tegenhangers. Wanneer deze aantekening aanwezig is en TLS correct is geconfigureerd, maakt de Kubernetes-ingangscontroller een routeringsregel met een omleidingsconfiguratie. De controller past vervolgens de wijzigingen toe op uw Application Gateway-exemplaar. De gemaakte omleiding is HTTP 301 Moved Permanently
.
Gebruik
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Opmerking
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
Verbindingsafvoer
Gebruik de volgende aantekeningen als u verbindingsafvoer wilt gebruiken:
-
connection-draining
: Met deze aantekening geeft u aan of het leegmaken van verbindingen moet worden ingeschakeld. -
connection-draining-timeout
: Met deze aantekening geeft u een time-out op, waarna Application Gateway de aanvragen beëindigt voor het afsluitende back-endeindpunt.
Gebruik
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Opmerking
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
Affiniteit op basis van cookies
Gebruik de volgende aantekening om affiniteit op basis van cookies in te schakelen.
Gebruik
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Opmerking
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
Time-out aanvraag
Gebruik de volgende aantekening om de time-out van de aanvraag in seconden op te geven. Na de time-out mislukt Application Gateway een aanvraag als het antwoord niet wordt ontvangen.
Gebruik
appgw.ingress.kubernetes.io/request-timeout: "20"
Opmerking
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
Privé-IP-adres gebruiken
Gebruik de volgende aantekening om op te geven of dit eindpunt moet worden weergegeven op een privé-IP-adres van Application Gateway.
Voor een Application Gateway-exemplaar dat geen privé-IP-adres heeft, worden ingresses appgw.ingress.kubernetes.io/use-private-ip: "true"
genegeerd. De controller registreert en inkomend verkeer gebeurtenissen voor die ingresses geven een NoPrivateIP
waarschuwing weer.
Gebruik
appgw.ingress.kubernetes.io/use-private-ip: "true"
Opmerking
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
Front-endpoort overschrijven
Gebruik de volgende aantekening om een front-endlistener te configureren voor het gebruik van andere poorten dan 80 voor HTTP en 443 voor HTTPS.
Als de poort zich binnen het geautoriseerde bereik van Application Gateway bevindt (1 tot 64999), wordt de listener gemaakt op deze specifieke poort. Als u een ongeldige poort of geen poort instelt in de aantekening, gebruikt de configuratie de standaardwaarde 80 of 443.
Gebruik
appgw.ingress.kubernetes.io/override-frontend-port: "port"
Opmerking
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
Notitie
Externe aanvragen moeten zich richten http://somehost:8080
in plaats van http://somehost
.
Back-endprotocol
Gebruik het volgende om het protocol op te geven dat Application Gateway moet gebruiken wanneer deze communiceert met de pods. Ondersteunde protocollen zijn HTTP en HTTPS.
Hoewel zelfondertekende certificaten worden ondersteund in Application Gateway, ondersteunt AGIC momenteel alleen HTTPS wanneer pods een certificaat gebruiken dat is ondertekend door een bekende certificeringsinstantie.
Gebruik poort 80 niet met HTTPS en poort 443 met HTTP op de pods.
Gebruik
appgw.ingress.kubernetes.io/backend-protocol: "https"
Opmerking
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
Hostnaamextensie
U kunt Application Gateway zo configureren dat meerdere hostnamen worden geaccepteerd. Gebruik de hostname-extension
aantekening om meerdere hostnamen te definiëren, inclusief hostnamen met jokertekens. Met deze actie worden de hostnamen toegevoegd aan de FQDN die is gedefinieerd in de gegevens voor inkomend spec.rules.host
verkeer op de front-endlistener, zodat deze is geconfigureerd als een listener voor meerdere locaties.
Gebruik
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
Opmerking
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
In het voorgaande voorbeeld wordt de listener geconfigureerd voor het accepteren van verkeer voor de hostnamen hostname1.contoso.com
en hostname2.contoso.com
.
WAF-beleid voor pad
Gebruik de volgende aantekening om een bestaand WAF-beleid (Web Application Firewall) toe te voegen aan de lijstpaden voor een host binnen een Kubernetes-ingress-resource die wordt geannoteerd. Het WAF-beleid wordt toegepast op zowel als /ad-server
/auth
URL's.
Gebruik
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
Opmerking
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
SSL-certificaat voor Application Gateway
U kunt het SSL-certificaat configureren naar Application Gateway vanuit een lokaal PFX-certificaatbestand of een verwijzing naar een niet-geversiede geheime id van Azure Key Vault. Wanneer de aantekening aanwezig is met een certificaatnaam en het certificaat vooraf is geïnstalleerd in Application Gateway, maakt de Kubernetes-ingangscontroller een routeringsregel met een HTTPS-listener en past de wijzigingen toe op uw Application Gateway-exemplaar. U kunt de appgw-ssl-certificate
aantekening ook samen met een ssl-redirect
aantekening gebruiken in het geval van een SSL-omleiding.
Notitie
De appgw-ssl-certificate
aantekening wordt genegeerd wanneer de TLS-specificatie tegelijkertijd is gedefinieerd in inkomend verkeer. Als u verschillende certificaten met verschillende hosts wilt (beëindiging van meerdere TLS-certificaten), moet u verschillende toegangsbeheerobjectbronnen definiëren.
Gebruik
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
Opmerking
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
SSL-profiel voor Application Gateway
U kunt een SSL-profiel configureren op het Application Gateway-exemplaar per listener. Wanneer de aantekening aanwezig is met een profielnaam en het profiel vooraf is geïnstalleerd in Application Gateway, maakt de Kubernetes-ingangscontroller een routeringsregel met een HTTPS-listener en past u de wijzigingen toe op uw Application Gateway-exemplaar.
Gebruik
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
Opmerking
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
Vertrouwd basiscertificaat van Application Gateway
U kunt nu uw eigen basiscertificaten configureren voor Application Gateway om te worden vertrouwd via AGIC. U kunt de appgw-trusted-root-certificate
aantekening samen met de backend-protocol
aantekening gebruiken om end-to-end SSL-versleuteling aan te geven. Als u meerdere basiscertificaten opgeeft, scheidt u deze met een komma; bijvoorbeeld name-of-my-root-cert1,name-of-my-root-cert2
.
Gebruik
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
Opmerking
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
Regelset herschrijven
Gebruik de volgende aantekening om een bestaande herschrijfregelset toe te wijzen aan de bijbehorende regel voor aanvraagroutering.
Gebruik
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Opmerking
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
Aangepaste resource voor regelset herschrijven
Notitie
De release van Application Gateway for Containers introduceert talloze prestatie-, tolerantie- en functiewijzigingen. Overweeg om Application Gateway voor containers te gebruiken voor uw volgende implementatie.
In dit artikel vindt u regels voor het herschrijven van URL's voor Application Gateway for Containers over de Gateway-API en dit artikel over de ingangs-API. In dit artikel vindt u regels voor het herschrijven van headers voor Application Gateway for Containers over de Gateway-API.
Met Application Gateway kunt u geselecteerde inhoud van aanvragen en antwoorden herschrijven. Met deze functie kunt u URL's vertalen, queryreeksparameters wijzigen en aanvraag- en antwoordheaders wijzigen. U kunt deze functie ook gebruiken om voorwaarden toe te voegen om ervoor te zorgen dat de URL of de opgegeven headers alleen worden herschreven wanneer aan bepaalde voorwaarden wordt voldaan. Aangepaste resource voor regelset herschrijven brengt deze functie naar AGIC.
Met HTTP-headers kan een client en server aanvullende informatie doorgeven met een aanvraag of antwoord. Door deze kopteksten te herschrijven, kunt u belangrijke taken uitvoeren, zoals het toevoegen van beveiligingsgerelateerde koptekstvelden (bijvoorbeeld HSTS
of X-XSS-Protection
), het verwijderen van antwoordheadervelden die gevoelige informatie kunnen onthullen en poortgegevens uit X-Forwarded-For
headers verwijderen.
Met de mogelijkheid voor het herschrijven van URL's kunt u het volgende doen:
- Herschrijf de hostnaam, het pad en de querytekenreeks van de aanvraag-URL.
- Kies ervoor om de URL van alle aanvragen of alleen aanvragen te herschrijven die overeenkomen met een of meer van de voorwaarden die u hebt ingesteld. Deze voorwaarden zijn gebaseerd op de aanvraag- en antwoordeigenschappen (aanvraagheader, antwoordheader en servervariabelen).
- Kies ervoor om de aanvraag te routeren op basis van de oorspronkelijke URL of de herschreven URL.
Notitie
Deze functie wordt ondersteund sinds 1.6.0-rc1. Gebruik appgw.ingress.kubernetes.io/rewrite-rule-set
, waarmee u een bestaande regelset voor herschrijven kunt gebruiken in Application Gateway.
Gebruik
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
Opmerking
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
Regelprioriteit
Met de volgende aantekening kan de controller voor inkomend verkeer van Application Gateway expliciet de prioriteit van de bijbehorende regels voor aanvraagroutering instellen.
Gebruik
appgw.ingress.kubernetes.io/rule-priority:
Opmerking
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
In het voorgaande voorbeeld wordt een prioriteit van 10 ingesteld voor de regel voor aanvraagroutering.