Anmerkungen für den Azure Application Gateway-Eingangscontroller

Einführung

Die Kubernetes-Eingangsressource kann mit beliebigen Schlüssel-Wert-Paaren kommentiert werden. AGIC verwendet Anmerkungen zum Programmieren von Application Gateway-Features, die nicht über die YAML-Eingangsdatei konfiguriert werden können. Eingangsanmerkungen werden auf alle HTTP-Einstellungen, Back-End-Pools und Listener angewendet, die von einer Eingangsressource abgeleitet werden.

Liste unterstützter Anmerkungen

Damit eine Eingangsressource von AGIC beobachtet wird, muss Sie mit kommentiert werden. Nur dann arbeitet AGIC mit der fraglichen Eingangsressource zusammen.

Anmerkungsschlüssel Werttyp 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

Diese 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: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Im Beispiel oben haben wir 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, die eine Pfadpräfixüberschreibung für den Pfad /hello zu /test/ aufweist.

Hinweis

Im Beispiel oben haben wir nur eine Regel definiert. Die Anmerkungen gelten jedoch für die gesamte Eingangsressource. Wenn ein Benutzer also mehrere Regeln definiert hat, wird das Präfix für den Back-End-Pfad für jeden angegebenen Pfad eingerichtet. Wenn ein Benutzer unterschiedliche Regeln mit unterschiedlichen Pfadpräfixen (sogar für denselben Dienst) benötigt, müssten daher 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 und TLS ordnungsgemäß konfiguriert ist, 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: extensions/v1beta1
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:
          serviceName: websocket-repeater
          servicePort: 80

Verbindungsausgleich

connection-draining: Mit dieser Anmerkung können Benutzer angeben, ob der Verbindungsausgleich aktiviert werden soll. connection-draining-timeout: Diese Anmerkung ermöglicht es Benutzern, ein Timeout anzugeben, 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: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Mit dieser Anmerkung können Sie angeben, ob cookiebasierte Affinität aktiviert werden soll.

Verwendung

appgw.ingress.kubernetes.io/cookie-based-affinity: "true"

Beispiel

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Anforderungstimeout

Mit dieser Anmerkung kann das Anforderungstimeout in Sekunden angegeben werden, nach dem Application Gateway die Anforderung als fehlerhaft einstuft, wenn keine Antwort empfangen wird.

Verwendung

appgw.ingress.kubernetes.io/request-timeout: "20"

Beispiel

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Verwenden einer privaten IP-Adresse

Mit dieser Anmerkung können wir 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ührt dazu, dass die Aktualisierung des Application Gateways durch AGIC fehlschlägt.
  • Für Application Gateway-Instanzen, die nicht über eine private IP-Adresse verfügen, wird eingehender Datenverkehr mit appgw.ingress.kubernetes.io/use-private-ip: "true" ignoriert. Dies spiegelt sich in den Controllerprotokollen und Eingangsereignissen für diesen eingehenden Datenverkehr durch die Warnung NoPrivateIP wider.

Verwendung

appgw.ingress.kubernetes.io/use-private-ip: "true"

Beispiel

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Back-End-Protokoll

Mit dieser Anmerkung können wir das Protokoll angeben, das Application Gateway während der Kommunikation mit den Pods verwenden soll. Unterstützte Protokolle: http, 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.
  • Stellen Sie sicher, dass Port 80 nicht mit HTTPS und Port 443 nicht mit HTTP für die Pods verwendet wird.

Verwendung

appgw.ingress.kubernetes.io/backend-protocol: "https"

Beispiel

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 443

Regelsatz zum erneuten Generieren

Mit dieser 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