Annotazioni per il Controller in ingresso del gateway applicazione

La risorsa Ingress Kubernetes può essere annotata con coppie chiave/valore arbitrarie. AGIC si basa sulle annotazioni per programmare gateway applicazione funzionalità, che non sono configurabili usando in ingresso YAML. Le annotazioni in ingresso vengono applicate a tutte le impostazioni HTTP, i pool back-end e i listener derivati da una risorsa in ingresso.

Elenco delle annotazioni supportate

Per osservare una risorsa in ingresso da AGIC, deve essere annotata con kubernetes.io/ingress.class: azure/application-gateway. Solo AGIC funziona con la risorsa Ingress in questione.

Chiave di annotazione Tipo valore Valore predefinito Valori consentiti
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 (secondi) 30
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32 (secondi) 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

Prefisso percorso back-end

L'annotazione seguente consente di riscrivere il percorso back-end specificato in una risorsa in ingresso con prefisso specificato in questa annotazione. Consente agli utenti di esporre i servizi i cui endpoint sono diversi dai nomi degli endpoint usati per esporre un servizio in una risorsa in ingresso.

Utilizzo

appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>

Esempio

apiVersion: 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

Nell'esempio precedente è stata definita una risorsa in ingresso denominata go-server-ingress-bkprefix con un'annotazione appgw.ingress.kubernetes.io/backend-path-prefix: "/test/". L'annotazione indica al gateway applicazione di creare un'impostazione HTTP, con un prefisso del percorso sottoposto a override per il percorso /hello a /test/.

Nota

Nell'esempio precedente viene definita una sola regola. Tuttavia, le annotazioni sono applicabili all'intera risorsa in ingresso, quindi se un utente ha definito più regole, il prefisso del percorso back-end verrà configurato per ognuno dei percorsi specificati. Se un utente vuole regole diverse con prefissi di percorso diversi (anche per lo stesso servizio), è necessario definire risorse in ingresso diverse.

Reindirizzamento TLS

gateway applicazione può essere configurato per reindirizzare automaticamente gli URL HTTP alle controparti HTTPS. Quando questa annotazione è presente e TLS è configurata correttamente, il controller Ingress Kubernetes crea una regola di routing con una configurazione di reindirizzamento e applica le modifiche apportate all'gateway applicazione. Il reindirizzamento creato sarà HTTP 301 Moved Permanently.

Utilizzo

appgw.ingress.kubernetes.io/ssl-redirect: "true"

Esempio

apiVersion: 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

Svuotamento connessione

connection-draining: questa annotazione consente di specificare se abilitare lo svuotamento della connessione. connection-draining-timeout: questa annotazione consente di specificare un timeout, dopo il quale gateway applicazione termina le richieste all'endpoint back-end di svuotamento.

Utilizzo

appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"

Esempio

apiVersion: 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

L'annotazione seguente consente di specificare se abilitare l'affinità basata su cookie.

Utilizzo

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

Esempio

apiVersion: 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

Timeout richiesta

L'annotazione seguente consente di specificare il timeout della richiesta in secondi, dopo il quale gateway applicazione non riesce la richiesta se la risposta non viene ricevuta.

Utilizzo

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

Esempio

apiVersion: 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

Usare l'INDIRIZZO IP privato

L'annotazione seguente consente di specificare se esporre questo endpoint in IP privato di gateway applicazione.

Nota

  • gateway applicazione non supporta più INDIRIZZI IP nella stessa porta (ad esempio: 80/443). L'ingresso con annotazione appgw.ingress.kubernetes.io/use-private-ip: "false" e un altro con HTTPappgw.ingress.kubernetes.io/use-private-ip: "true" su causerà l'errore di AGIC durante l'aggiornamento della gateway applicazione.
  • Per gateway applicazione che non dispone di un indirizzo IP privato, l'ingresso appgw.ingress.kubernetes.io/use-private-ip: "true" viene ignorato. Ciò si riflette nei log del controller e negli eventi in ingresso per quelli in ingresso con NoPrivateIP avviso.

Utilizzo

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

Esempio

apiVersion: 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

Protocollo back-end

L'annotazione seguente consente di specificare il protocollo che gateway applicazione deve usare durante la comunicazione con i pod. I protocolli supportati sono http e https.

Nota

Anche se i certificati autofirmati sono supportati in gateway applicazione, attualmente AGIC supporta https solo quando i pod usano un certificato firmato da una CA nota.

Non usare la porta 80 con HTTPS e porta 443 con HTTP nei pod.

Utilizzo

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

Esempio

apiVersion: 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

Riscrivere il set di regole

L'annotazione seguente consente di assegnare una regola di riscrittura esistente impostata sulla regola di routing delle richieste corrispondente.

Utilizzo

appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>

Esempio

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