Poznámky pro kontroler příchozího přenosu dat služby Application Gateway
Prostředek příchozího přenosu dat Kubernetes můžete komentovat pomocí libovolných párů klíč/hodnota. Kontroler příchozího přenosu dat služby Application Gateway (AGIC) spoléhá na poznámky k programování Aplikace Azure lication Gateway funkcí, které není možné konfigurovat prostřednictvím YAML příchozího přenosu dat. Poznámky příchozího přenosu dat se použijí pro všechna nastavení HTTP, back-endové fondy a naslouchací procesy odvozené z prostředku příchozího přenosu dat.
Tip
Podívejte se také na téma Co je Application Gateway pro kontejnery.
Seznam podporovaných poznámek
Aby služba AGIC sledovala prostředek příchozího přenosu dat, musí být zdroj opatřen poznámkami kubernetes.io/ingress.class: azure/application-gateway
.
Předpona cesty back-endu
Následující poznámka umožňuje, aby se back-endová cesta zadaná v prostředku příchozího přenosu dat přepsala se zadanou předponou. Slouží ke zveřejnění služeb, jejichž koncové body se liší od názvů koncových bodů, které používáte k zveřejnění služby v prostředku příchozího přenosu dat.
Využití
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Příklad
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
Předchozí příklad definuje prostředek příchozího přenosu dat s názvem go-server-ingress-bkprefix
anotace s názvem appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. Poznámka říká službě Application Gateway, aby vytvořila nastavení HTTP, které má přepsání předpony cesty pro cestu /hello
k /test/
.
Příklad definuje pouze jedno pravidlo. Poznámky se ale vztahují na celý prostředek příchozího přenosu dat. Pokud tedy definujete více pravidel, nastavíte předponu back-endové cesty pro každou ze zadaných cest. Pokud chcete různá pravidla s různými předponami cesty (i pro stejnou službu), musíte definovat různé prostředky příchozího přenosu dat.
Název hostitele back-endu
Pomocí následující poznámky určete název hostitele, který by služba Application Gateway měla používat při komunikaci s pody.
Využití
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
Příklad
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
Vlastní sonda stavu
Službu Application Gateway můžete nakonfigurovat tak, aby odesílala vlastní sondy stavu do back-endového fondu adres. Pokud jsou k dispozici následující poznámky, kontroler příchozího přenosu dat Kubernetes vytvoří vlastní sondu pro monitorování back-endové aplikace. Kontroler pak použije změny ve službě Application Gateway.
health-probe-hostname
: Tato poznámka umožňuje vlastní název hostitele sondy stavu.health-probe-port
: Tato poznámka konfiguruje vlastní port pro sondu stavu.health-probe-path
: Tato poznámka definuje cestu sondy stavu.health-probe-status-code
: Tato poznámka umožňuje sondě stavu přijímat různé stavové kódy HTTP.health-probe-interval
: Tato poznámka definuje interval, ve kterém běží sonda stavu.health-probe-timeout
: Tato poznámka definuje, jak dlouho sonda stavu čeká na odpověď před selháním sondy.health-probe-unhealthy-threshold
: Tato poznámka definuje, kolik sond stavu musí selhat, aby se back-end označil jako není v pořádku.
Využití
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
Příklad
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
Přesměrování protokolu TLS
Službu Application Gateway můžete nakonfigurovat tak, aby automaticky přesměrovává adresy URL HTTP na jejich protějšky HTTPS. Pokud je tato poznámka přítomen a protokol TLS je správně nakonfigurovaný, řadič příchozího přenosu dat Kubernetes vytvoří pravidlo směrování s konfigurací přesměrování. Kontroler pak použije změny v instanci služby Application Gateway. Vytvořené přesměrování je HTTP 301 Moved Permanently
.
Využití
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Příklad
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
Vyprazdňování připojení
Pokud chcete použít vyprazdňování připojení, použijte následující poznámky:
connection-draining
: Tato poznámka určuje, jestli se má povolit vyprazdňování připojení.connection-draining-timeout
: Tato poznámka určuje časový limit, po kterém služba Application Gateway ukončí požadavky na vyprázdnění back-endového koncového bodu.
Využití
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Příklad
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
Spřažení na základě souborů cookie
Pomocí následující poznámky povolte spřažení na základě souborů cookie.
Využití
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Příklad
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
Časový limit požadavku
K určení časového limitu požadavku v sekundách použijte následující poznámku. Po vypršení časového limitu application Gateway selže požadavek, pokud odpověď není přijata.
Využití
appgw.ingress.kubernetes.io/request-timeout: "20"
Příklad
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
Použití privátní IP adresy
Pomocí následující poznámky určete, jestli se má tento koncový bod zveřejnit na privátní IP adrese služby Application Gateway.
U instance služby Application Gateway, která nemá privátní IP adresu, se příchozí přenos dat appgw.ingress.kubernetes.io/use-private-ip: "true"
ignoruje. Události kontroleru a příchozího přenosu dat pro tyto příchozí přenosy dat zobrazují NoPrivateIP
upozornění.
Využití
appgw.ingress.kubernetes.io/use-private-ip: "true"
Příklad
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
Přepsání front-endového portu
Pomocí následující poznámky nakonfigurujte front-endový naslouchací proces tak, aby používal porty jiné než 80 pro HTTP a 443 pro HTTPS.
Pokud je port v autorizovaném rozsahu služby Application Gateway (1 až 64999), naslouchací proces se vytvoří na tomto konkrétním portu. Pokud nastavíte neplatný port nebo žádný port v poznámce, konfigurace použije výchozí hodnotu 80 nebo 443.
Využití
appgw.ingress.kubernetes.io/override-frontend-port: "port"
Příklad
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
Poznámka:
Externí požadavky musí být cílové http://somehost:8080
místo http://somehost
.
Protokol back-endu
Pomocí následujícího příkazu určete protokol, který by služba Application Gateway měla použít při komunikaci s pody. Podporované protokoly jsou HTTP a HTTPS.
I když jsou certifikáty podepsané svým držitelem podporované ve službě Application Gateway, AGIC v současné době podporuje protokol HTTPS pouze v případě, že pody používají certifikát podepsaný známou certifikační autoritou.
Nepoužívejte port 80 s HTTPS a portem 443 s HTTP na podech.
Využití
appgw.ingress.kubernetes.io/backend-protocol: "https"
Příklad
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
Rozšíření názvu hostitele
Službu Application Gateway můžete nakonfigurovat tak, aby přijímala více názvů hostitelů. Pomocí poznámky hostname-extension
můžete definovat více názvů hostitelů, včetně názvů hostitelů se zástupnými otazníky. Tato akce připojí názvy hostitelů k plně kvalifikovanému názvu domény definovanému v informacích o příchozím přenosu spec.rules.host
dat na front-endovém naslouchacím procesu, takže je nakonfigurovaný jako naslouchací proces ve více lokalitách.
Využití
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
Příklad
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
Předchozí příklad nakonfiguruje naslouchací proces tak, aby přijímal provoz pro názvy hostitelů hostname1.contoso.com
a hostname2.contoso.com
.
Zásady WAF pro cestu
Pomocí následující poznámky připojte existující zásadu firewallu webových aplikací (WAF) k cestám seznamu hostitelů v rámci prostředku příchozího přenosu dat Kubernetes, který je opatřen poznámkami. Zásady WAF se použijí na adresy /ad-server
URL i /auth
na adresy URL.
Využití
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/aaaa0000-bb11-2222-33cc-444444dddddd/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
Příklad
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
Certifikát SSL služby Application Gateway
Certifikát SSL můžete nakonfigurovat do služby Application Gateway z místního souboru certifikátu PFX nebo odkazu na neverzní ID tajného klíče služby Azure Key Vault. Pokud je k dispozici poznámka s názvem certifikátu a certifikát je předinstalovaný ve službě Application Gateway, řadič příchozího přenosu dat Kubernetes vytvoří pravidlo směrování s naslouchacím procesem HTTPS a použije změny v instanci služby Application Gateway. Poznámku appgw-ssl-certificate
můžete také použít společně s poznámkou ssl-redirect
v případě přesměrování SSL.
Poznámka:
Poznámka appgw-ssl-certificate
se ignoruje, když je specifikace PROTOKOLU TLS definována ve stejnou dobu v příchozím přenosu dat. Pokud chcete různé certifikáty s různými hostiteli (ukončení více certifikátů TLS), musíte definovat různé prostředky příchozího přenosu dat.
Využití
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
Příklad
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
Profil SSL služby Application Gateway
Pro instanci služby Application Gateway na naslouchací proces můžete nakonfigurovat profil SSL. Pokud je k dispozici poznámka s názvem profilu a profil je předinstalovaný ve službě Application Gateway, řadič příchozího přenosu dat Kubernetes vytvoří pravidlo směrování s naslouchacím procesem HTTPS a použije změny v instanci služby Application Gateway.
Využití
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
Příklad
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
Důvěryhodný kořenový certifikát služby Application Gateway
Teď můžete nakonfigurovat vlastní kořenové certifikáty pro Službu Application Gateway tak, aby byly důvěryhodné prostřednictvím AGIC. Poznámku appgw-trusted-root-certificate
můžete použít společně s poznámkou k označení kompletního backend-protocol
šifrování SSL. Pokud zadáte více kořenových certifikátů, oddělte je čárkou; například name-of-my-root-cert1,name-of-my-root-cert2
.
Využití
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
Příklad
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
Přepsání sady pravidel
Pomocí následující poznámky přiřaďte existující přepsané pravidlo nastavené na odpovídající pravidlo směrování požadavků.
Využití
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Příklad
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
Přepsání vlastního prostředku sady pravidel
Poznámka:
Vydání služby Application Gateway pro kontejnery přináší řadu změn výkonu, odolnosti a funkcí. Zvažte použití služby Application Gateway pro kontejnery pro vaše další nasazení.
Pravidla přepsání adres URL pro Službu Application Gateway pro kontejnery najdete v tomto článku o rozhraní API brány a tomto článku o rozhraní API příchozího přenosu dat. Pravidla přepsání hlaviček pro službu Application Gateway for Containers najdete v tomto článku o rozhraní API brány.
Application Gateway umožňuje přepsat vybraný obsah požadavků a odpovědí. Pomocí této funkce můžete překládat adresy URL, měnit parametry řetězce dotazu a upravovat hlavičky požadavků a odpovědí. Tuto funkci můžete použít také k přidání podmínek, které zajistí, že se adresa URL nebo zadaná hlavička přepíší jenom v případě, že jsou splněny určité podmínky. Přepsat vlastní prostředek sady pravidel přináší tuto funkci do AGIC.
Hlavičky HTTP umožňují klientovi a serveru předávat další informace s požadavkem nebo odpovědí. Přepsáním těchto hlaviček můžete provádět důležité úlohy, HSTS
jako je přidání polí hlaviček souvisejících se zabezpečením (například nebo X-XSS-Protection
), odebrání polí hlaviček odpovědi, která můžou odhalit citlivé informace, a odebrání informací o portu ze X-Forwarded-For
záhlaví.
Díky možnosti přepsání adresy URL můžete:
- Přepište název hostitele, cestu a řetězec dotazu adresy URL požadavku.
- Zvolte, že chcete přepsat adresu URL všech požadavků nebo jenom požadavků, které odpovídají jedné nebo více nastaveným podmínkám. Tyto podmínky jsou založené na vlastnostech požadavku a odpovědi (hlavička požadavku, hlavička odpovědi a proměnné serveru).
- Zvolte směrování požadavku na základě původní adresy URL nebo přepsané adresy URL.
Poznámka:
Tato funkce je podporovaná od verze 1.6.0-rc1. Použijte appgw.ingress.kubernetes.io/rewrite-rule-set
, který umožňuje použít existující přepsat pravidlo nastavené ve službě Application Gateway.
Využití
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
Příklad
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
Priorita pravidel
Následující poznámka umožňuje kontroleru příchozího přenosu dat služby Application Gateway explicitně nastavit prioritu přidružených pravidel směrování požadavků.
Využití
appgw.ingress.kubernetes.io/rule-priority:
Příklad
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
Předchozí příklad nastaví prioritu 10 pro pravidlo směrování požadavku.