Anotaciones para el controlador de entrada de Application Gateway

Introducciones

El recurso de entrada de Kubernetes se puede anotar con pares clave-valor arbitrarios. AGIC depende de las anotaciones para programar las características de Application Gateway, que no se pueden configurar a través del YAML de entrada. Las anotaciones de entrada se aplican a todas las configuraciones HTTP, los grupos de back-end y los clientes de escucha derivados de un recurso de entrada.

Lista de anotaciones admitidas

Para que AGIC observe un recurso de entrada, se debe anotar con kubernetes.io/ingress.class: azure/application-gateway. Solo entonces AGIC funcionará con el recurso de entrada en cuestión.

Clave de anotación Tipo de valor Valor predeterminado Valores permitidos
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 (segundos) 30
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32 (segundos) 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

Prefijo de ruta de acceso de back-end

Esta anotación permite volver a escribir la ruta de acceso de back-end especificada en un recurso de entrada con el prefijo especificado en esta anotación. Esto permite a los usuarios exponer servicios cuyos puntos de conexión son diferentes de los nombres de puntos de conexión usados para exponer un servicio en un recurso de entrada.

Uso

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

Ejemplo

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

En el ejemplo anterior, se ha definido un recurso de entrada denominado go-server-ingress-bkprefix con una anotación appgw.ingress.kubernetes.io/backend-path-prefix: "/test/". La anotación le indica a la instancia de Application Gateway que cree una configuración de HTTP, que tendrá una invalidación de prefijo de ruta de acceso para la ruta de acceso /hello a /test/.

Nota

En el ejemplo anterior, solo se ha definido una regla. Sin embargo, las anotaciones se pueden aplicar a todo el recurso de entrada, por lo que si un usuario hubiera definido varias reglas, se configuraría el prefijo de la ruta de acceso de back-end para cada una de las rutas de acceso especificadas. Por lo tanto, si un usuario desea tener diferentes reglas con prefijos de ruta de acceso diferentes (incluso para el mismo servicio), tendrían que definir diferentes recursos de entrada.

Redirección de TLS

Application Gateway puede configurarse para redirigir automáticamente las direcciones URL HTTP a sus equivalentes HTTPS. Cuando esta anotación está presente y TLS está configurado correctamente, el controlador de entrada de Kubernetes creará una regla de enrutamiento con una configuración de redireccionamiento y aplicará los cambios a su instancia de Application Gateway. La redirección creada será HTTP 301 Moved Permanently.

Uso

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

Ejemplo

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

Purga de la conexión

connection-draining: Esta anotación permite a los usuarios especificar si se habilitará la purga de la conexión. connection-draining-timeout: Esta anotación permite a los usuarios especificar un tiempo de espera después del cual Application Gateway finalizará las solicitudes al punto de conexión de back-end de purga.

Uso

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

Ejemplo

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

Esta anotación permite a los usuarios especificar si se habilitará la afinidad basada en cookies.

Uso

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

Ejemplo

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

Tiempo de espera de solicitud

Esta anotación permite especificar el tiempo de espera de la solicitud en segundos después del cual Application Gateway producirá un error en la solicitud si no se recibe respuesta.

Uso

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

Ejemplo

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

Uso de una dirección IP privada

Esta anotación nos permite especificar si se va a exponer este punto de conexión en la dirección IP privada de Application Gateway.

Nota

  • Application Gateway no admite varias direcciones IP en el mismo puerto (por ejemplo: 80/443). Una entrada con una anotación appgw.ingress.kubernetes.io/use-private-ip: "false" y otra con appgw.ingress.kubernetes.io/use-private-ip: "true" en HTTP producirá un error de AGIC al actualizar la instancia de Application Gateway.
  • En el caso de una instancia de Application Gateway sin una dirección IP privada, se omitirán las entradas anotadas con appgw.ingress.kubernetes.io/use-private-ip: "true". Esto se reflejará en los registros del controlador y los eventos de entrada de dichas entradas con la advertencia NoPrivateIP.

Uso

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

Ejemplo

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

Protocolo de back-end

Esta anotación nos permite especificar el protocolo que Application Gateway debe usar al comunicarse con los pods. Protocolos admitidos: http, https

Nota

  • Aunque los certificados autofirmados se admiten en Application Gateway, actualmente, AGIC solo admite https cuando los pods usan certificados firmados por una entidad de certificación conocida.
  • Asegúrese de no usar el puerto 80 con HTTPS y el puerto 443 con HTTP en los pods.

Uso

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

Ejemplo

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

Conjunto de reglas de reescritura

Esta anotación permite asignar un conjunto de reglas de reescritura existente a la regla de enrutamiento de solicitudes correspondiente.

Uso

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

Ejemplo

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