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-gatewaykommentiert 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

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 mit appgw.ingress.kubernetes.io/use-private-ip: "true" für HTTP 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 Warnung NoPrivateIP 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