Anmerkungen für den Azure Application Gateway-Eingangscontroller
Die Kubernetes-Eingangsressource kann mit beliebigen Schlüssel-Wert-Paaren kommentiert werden. AGIC verwendet Anmerkungen zum Programmieren von Application Gateway-Features, die über die YAML-Eingangsdatei nicht konfiguriert werden können. Eingangsanmerkungen werden auf alle HTTP-Einstellungen, Back-End-Pools und Listener angewendet, die von einer Eingangsressource abgeleitet wurden.
Liste unterstützter Anmerkungen
Damit eine Eingangsressource von AGIC beobachtet wird, muss Sie mit kubernetes.io/ingress.class: azure/application-gateway
kommentiert werden. Nur dann arbeitet AGIC mit der betreffenden Eingangsressource zusammen.
Anmerkungsschlüssel | Typ | Standardwert | Zulässige Werte |
---|---|---|---|
appgw.ingress.kubernetes.io/backend-path-prefix | string |
nil |
|
appgw.ingress.kubernetes.io/ssl-redirect | bool |
false |
|
appgw.ingress.kubernetes.io/connection-draining | bool |
false |
|
appgw.ingress.kubernetes.io/connection-draining-timeout | int32 (Sekunden) |
30 |
|
appgw.ingress.kubernetes.io/cookie-based-affinity | bool |
false |
|
appgw.ingress.kubernetes.io/request-timeout | int32 (Sekunden) |
30 |
|
appgw.ingress.kubernetes.io/use-private-ip | bool |
false |
|
appgw.ingress.kubernetes.io/backend-protocol | string |
http |
http , https |
appgw.ingress.kubernetes.io/rewrite-rule-set | string |
nil |
Präfix für Back-End-Pfad
Die folgende Anmerkung ermöglicht es, dass der in einer Eingangsressource angegebene Back-End-Pfad mit dem in dieser Anmerkung angegebenen Präfix neu geschrieben wird. Dadurch können Benutzer Dienste bereitstellen, deren Endpunkte sich von den Endpunktnamen unterscheiden, die zum Bereitstellen eines Diensts in einer Eingangsressource verwendet werden.
Verwendung
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Beispiel
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
Im vorstehenden Beispiel haben Sie eine Eingangsressource namens go-server-ingress-bkprefix
mit einer Anmerkung appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
definiert. Die Anmerkung weist das Anwendungsgateway an, eine HTTP-Einstellung zu erstellen, bei der es eine Pfadpräfix-Außerkraftsetzung für den Pfad /hello
in /test/
gibt.
Hinweis
Im vorstehenden Beispiel wird nur eine einzige Regel definiert. Die Anmerkungen gelten jedoch für die gesamte Eingangsressource. Wenn ein Benutzer also mehrere Regeln definiert, würde das Präfix für den Back-End-Pfad bei jedem angegebenen Pfad eingerichtet. Wenn ein Benutzer unterschiedliche Regeln mit unterschiedlichen Pfadpräfixen (sogar für denselben Dienst) benötigt, müssten andere Eingangsressourcen definiert werden.
TLS-Umleitung
Application Gateway kann so konfiguriert werden, dass HTTP-URLs automatisch an Ihre HTTPS-Entsprechungen umgeleitet werden. Wenn diese Anmerkung vorhanden ist und TLS ordnungsgemäß konfiguriert wurde, erstellt der Kubernetes-Eingangscontroller eine Routingregel mit einer Umleitungskonfiguration und wendet die Änderungen auf Ihr Application Gateway an. Die erstellte Umleitung lautet HTTP 301 Moved Permanently
.
Verwendung
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Beispiel
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
Verbindungsausgleich
connection-draining
: Mit dieser Anmerkung können Sie angeben, ob der Verbindungsausgleich aktiviert werden soll.
connection-draining-timeout
: Mit dieser Anmerkung können Sie ein Timeout angeben, nach dem Application Gateway die Anforderungen an den ausgleichenden Back-End-Endpunkt beendet.
Verwendung
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Beispiel
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
Cookiebasierte Affinität
Mit der folgenden Anmerkung können Sie angeben, ob cookiebasierte Affinität aktiviert werden soll.
Verwendung
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Beispiel
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
Anforderungstimeout
Mit der folgenden Anmerkung können Sie das Anforderungstimeout in Sekunden angeben, nach dem Application Gateway die Anforderung als fehlerhaft einstuft, wenn keine Antwort empfangen wurde.
Verwendung
appgw.ingress.kubernetes.io/request-timeout: "20"
Beispiel
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
Verwenden einer privaten IP-Adresse
Mit der folgenden Anmerkung können Sie angeben, ob dieser Endpunkt für die private IP-Adresse von Application Gateway verfügbar gemacht werden soll.
Hinweis
- Application Gateway unterstützt nicht mehrere IP-Adressen für den gleichen Port (Beispiel: 80/443). Eingehender Datenverkehr mit der Anmerkung
appgw.ingress.kubernetes.io/use-private-ip: "false"
und weiterer Datenverkehr mitappgw.ingress.kubernetes.io/use-private-ip: "true"
fürHTTP
führen dazu, dass die Aktualisierung des Application Gateways durch AGIC fehlschlägt. - Bei Application Gateway-Instanzen ohne eine private IP-Adresse wird eingehender Datenverkehr mit
appgw.ingress.kubernetes.io/use-private-ip: "true"
ignoriert. Das spiegelt sich in den Controllerprotokollen und Eingangsereignissen für diesen eingehenden Datenverkehr mit der WarnungNoPrivateIP
wider.
Verwendung
appgw.ingress.kubernetes.io/use-private-ip: "true"
Beispiel
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/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Back-End-Protokoll
Mit der folgenden Anmerkung können Sie das Protokoll angeben, das Application Gateway bei der Kommunikation mit den Pods verwenden sollte. Unterstützte Protokolle sind http
und https
.
Hinweis
Obwohl selbstsignierte Zertifikate für Application Gateway unterstützt werden, unterstützt AGIC zurzeit nur https
, wenn Pods ein Zertifikat verwenden, das von einer bekannten Zertifizierungsstelle signiert wurde.
Verwenden Sie nicht Port 80 mit HTTPS und Port 443 mit HTTP für die Pods.
Verwendung
appgw.ingress.kubernetes.io/backend-protocol: "https"
Beispiel
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: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Regelsatz zum erneuten Generieren
Mithilfe der folgenden Anmerkung können Sie der entsprechenden Anforderungsroutingregel einen vorhandenen Regelsatz zum erneuten Generieren zuweisen.
Verwendung
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Beispiel
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