Comparteix a través de


Anotaciones para el controlador de entrada de Application Gateway

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 mediante el 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 funciona 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/backend-hostname string nil
appgw.ingress.kubernetes.io/health-probe-hostname string 127.0.0.1
appgw.ingress.kubernetes.io/health-probe-port int32 80
appgw.ingress.kubernetes.io/health-probe-path string /
appgw.ingress.kubernetes.io/health-probe-status-code string 200-399
appgw.ingress.kubernetes.io/health-probe-interval int32 30 (segundos)
appgw.ingress.kubernetes.io/health-probe-timeout int32 30 (segundos)
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold int32 3
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/use-private-ip bool false
appgw.ingress.kubernetes.io/override-frontend-port bool false
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/hostname-extension string nil
appgw.ingress.kubernetes.io/waf-policy-for-path string nil
appgw.ingress.kubernetes.io/appgw-ssl-certificate string nil
appgw.ingress.kubernetes.io/appgw-ssl-profile string nil
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate string nil
appgw.ingress.kubernetes.io/rewrite-rule-set string nil
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
appgw.ingress.kubernetes.io/rule-priority int32 nil

Prefijo de ruta de acceso de back-end

La anotación siguiente 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: 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

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 puerta de enlace de aplicación que cree una configuración de HTTP, que tiene una invalidación de prefijo de ruta de acceso para la ruta de acceso /hello en /test/.

Nota:

En el ejemplo anterior, solo se ha definido una regla. Pero las anotaciones se pueden aplicar a todo el recurso de entrada, por lo que si un usuario ha 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. Si un usuario quiere tener diferentes reglas con prefijos de ruta de acceso diferentes (incluso para el mismo servicio), tendría que definir diferentes recursos de entrada.

Nombre de host de back-end

Esta anotación nos permite especificar el nombre de host que Application Gateway debe usar al comunicarse con los pods.

Uso

appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"

Ejemplo

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-hostname: "internal.example.com"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          service:
            name: store-service
            port:
              number: 80
        pathType: Exact

Sondeo de estado personalizado

Application Gateway se puede configurar para enviar sondeos de estado personalizados al grupo de direcciones de back-end. Cuando estas anotaciones están presentes, el controlador de entrada de Kubernetes crea un sondeo personalizado para supervisar la aplicación back-end y aplica los cambios a la puerta de enlace de aplicaciones.

health-probe-hostname: esta anotación permite un nombre de host personalizado en el sondeo de estado.
health-probe-port: esta anotación configura un puerto de sondeo de estado personalizado.
health-probe-path: esta anotación define una ruta de acceso para el sondeo de estado.
health-probe-status-code: esta anotación permite que el sondeo de estado acepte códigos de estado HTTP diferentes.
health-probe-interval: esta anotación define el intervalo en el que se ejecuta el sondeo de estado.
health-probe-timeout: esta anotación define cuánto tiempo esperará el sondeo de estado antes de que se produzca un error en el sondeo.
health-probe-unhealthy-threshold: esta anotación define cuántos sondeos de estado deben producir un error para que el back-end se marque como incorrecto.

Uso

appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 80
appgw.ingress.kubernetes.io/health-probe-path: "/"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 30
appgw.ingress.kubernetes.io/health-probe-timeout: 30
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
    appgw.ingress.kubernetes.io/health-probe-port: 81
    appgw.ingress.kubernetes.io/health-probe-path: "/probepath"
    appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
    appgw.ingress.kubernetes.io/health-probe-interval: 31
    appgw.ingress.kubernetes.io/health-probe-timeout: 31
    appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

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 crea una regla de enrutamiento con una configuración de redireccionamiento y aplica 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: 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

Purga de la conexión

connection-draining: esta anotación nos permite especificar si se habilitará el drenaje de conexiones. connection-draining-timeout: esta anotación nos permite especificar un tiempo de espera después del cual Application Gateway finaliza las solicitudes al punto de conexión de back-end de drenaje.

Uso

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

Ejemplo

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

La anotación siguiente le permite especificar si se va a habilitar la afinidad basada en cookies.

Uso

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

Ejemplo

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

Tiempo de espera de solicitud

La anotación siguiente le 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: 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

Uso de una dirección IP privada

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

Nota:

  • En el caso de una instancia de Application Gateway sin una IP privada, se omitirán las entradas con appgw.ingress.kubernetes.io/use-private-ip: "true". Esto se refleja 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: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-privateip
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

Invalidar el puerto de front-end

La anotación permite configurar un agente de escucha de front-end para usar puertos diferentes distintos de 80/443 para http/https.

Si el puerto está dentro del intervalo autorizado de App Gw (1 a 64999), este agente de escucha se creará en este puerto específico. Si se establece un puerto no válido o ningún puerto en la anotación, la configuración se revertirá al valor predeterminado 80 o 443.

Uso

appgw.ingress.kubernetes.io/override-frontend-port: "port"

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-overridefrontendport
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/override-frontend-port: "8080"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          service:
            name: store-service
            port:
              number: 80
        pathType: Exact

Nota:

La solicitud externa deberá tener como destino http://somehost:8080 en lugar de http://somehost.

Protocolo de back-end

La anotación siguiente le permite especificar el protocolo que Application Gateway debe usar al comunicarse con los pods. Los protocolos admitidos son http y https.

Nota:

Aunque los certificados autofirmados se admiten en Application Gateway, actualmente AGIC solo admite https cuando los pods usan un certificado que firma una CA conocida.

No use el puerto 80 con HTTPS ni el puerto 443 con HTTP en los pods.

Uso

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

Ejemplo

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: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 443

Extensión de nombre de host

Application Gateway se puede configurar para aceptar varios nombres de host. La anotación hostname-extention permite definir varios nombres de host, incluidos los nombres de host comodín. Esto anexará los nombres de host al FQDN que se define en la especificación de entrada spec.rules.host en el agente de escucha de front-end, por lo que se configurado como un agente de escucha multisitio.

Uso

appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-multisite
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
spec:
  rules:
  - host: contoso.com
    http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 443

Nota:

En el ejemplo anterior, el agente de escucha se configuraría para aceptar el tráfico de los nombres de host "hostname1.contoso.com" y "hostname2.contoso.com".

Directiva de WAF para ruta de acceso

Esta anotación permite adjuntar una directiva de WAF ya creada a las rutas de acceso de lista de un host dentro de un recurso de entrada de Kubernetes que se anota.

Uso

appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ad-server-ingress
  namespace: commerce
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
  rules:
  - http:
      paths:
      - path: /ad-server
        backend:
          service:
            name: ad-server
            port:
              number: 80
        pathType: Exact
      - path: /auth
        backend:
          service:
            name: auth-server
            port:
              number: 80
        pathType: Exact

Nota:

La directiva de WAF se aplicará a las direcciones URL /ad-server y /auth.

Certificado SSL de Application Gateway

El certificado SSL se puede configurar en Application Gateway desde un archivo de certificado PFX local o una referencia a un identificador de secreto sin versión de Azure Key Vault. Cuando la anotación está presente con un nombre de certificado y el certificado está preinstalado en Application Gateway, el controlador de entrada de Kubernetes creará una regla de enrutamiento con un agente de escucha HTTPS y aplicará los cambios a su Application Gateway. La anotación appgw-ssl-certificate también se puede usar junto con la anotación ssl-redirect en caso de redirección SSL.

Consulte la característica appgw-ssl-certificate para obtener más detalles.

Nota:

La anotación "appgw-ssl-certificate" se omitirá cuando se defina la especificación TLS al mismo tiempo. Si un usuario quiere certificados diferentes con diferentes hosts (terminación de certificado de varios TLS), tendría que definir recursos de entrada diferentes.

Uso

appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-certificate
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
spec:
  rules:
  - host: www.contoso.com
    http:
      paths:
      - backend:
          service:
            name: websocket-repeater
            port:
              number: 80

Perfil SSL de Application Gateway

Los usuarios pueden configurar un perfil SSL en Application Gateway por cliente de escucha. Cuando la anotación está presente con un nombre de perfil y el perfil está preinstalado en Application Gateway, el controlador de entrada de Kubernetes creará una regla de enrutamiento con un agente de escucha HTTPS y aplicará los cambios a su Application Gateway.

Uso

appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-certificate
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
    appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
spec:
  rules:
  - host: www.contoso.com
    http:
      paths:
      - backend:
          service:
            name: websocket-repeater
            port:
              number: 80

Certificado raíz de confianza de Application Gateway

Los usuarios ahora pueden configurar sus propios certificados raíz en Application Gateway para que sean de confianza a través de AGIC. La anotación appgw-trusted-root-certificate se puede usar junto con la anotación backend-protocol para indicar el cifrado SSL de un extremo a otro, con varios certificados raíz, separados por coma, si se especifica, por ejemplo, "name-of-my-root-cert1,name-of-my-root-certificate2".

Uso

appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-certificate
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-protocol: "https"
    appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
spec:
  rules:
  - host: www.contoso.com
    http:
      paths:
      - backend:
          service:
            name: websocket-repeater
            port:
              number: 80

Conjunto de reglas de reescritura

La anotación siguiente le 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

Recurso de reescritura del conjunto de reglas personalizado

Nota:

Puerta de enlace de aplicaciones para contenedores se ha publicado, con numerosos cambios de rendimiento, resistencia y características. Considere la posibilidad de aprovechar Puerta de enlace de aplicaciones para contenedores para la siguiente implementación. Las reglas de reescritura de direcciones URL para Puerta de enlace de aplicaciones para contenedores se pueden encontrar aquí para la API de puerta de enlace y aquí para la API de entrada. Las reglas de reescritura de encabezado para Puerta de enlace de aplicaciones para contenedores se pueden encontrar aquí para la API de puerta de enlace.

Nota:

Esta característica se admite desde 1.6.0-rc1. Use appgw.ingress.kubernetes.io/rewrite-rule-set, que permite usar un conjunto de reglas de reescritura existente en Application Gateway.

Application Gateway permite volver a escribir el contenido seleccionado de las solicitudes y las respuestas. Con esta característica, puede traducir las direcciones URL y los parámetros de cadenas de consulta, además de modificar los encabezados de solicitud y respuesta. También permite agregar las condiciones necesarias para asegurarse de que los encabezados especificados y las direcciones URL se reescriben solo cuando se cumplen ciertas condiciones. Estas condiciones se basan en la información de solicitud y respuesta. Reescribir el recurso personalizado del conjunto de reglas lleva esta característica a AGIC.

Los encabezados HTTP permiten que el cliente y el servidor pasen información adicional con la solicitud o la respuesta. Al reescribir estos encabezados, puede realizar tareas importantes, como agregar campos de encabezado relacionados con la seguridad (como HSTS y X-XSS-Protection), quitar campos de encabezado de respuesta que pueden revelar información confidencial o eliminar información de puertos de los encabezados X-Forwarded-For.

Con la funcionalidad de reescritura de URL, puede: - Reescribir el nombre de host, la ruta de acceso y la cadena de consulta de la dirección URL de la solicitud: elija volver a escribir la dirección URL de todas las solicitudes o solo aquellas que coincidan con una o varias de las condiciones establecidas. Estas condiciones se basan en las propiedades de solicitud y respuesta (encabezado de solicitud, encabezado de respuesta y variables de servidor). - Elegir enrutar la solicitud en función de la dirección URL original o de la dirección URL reescrita

Uso

appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource

Ejemplo

apiVersion: appgw.ingress.azure.io/v1beta1 
kind: AzureApplicationGatewayRewrite 
metadata: 
  name: my-rewrite-rule-set-custom-resource 
spec: 
  rewriteRules: 
  - name: rule1 
    ruleSequence: 21
    conditions:
  - ignoreCase: false
    negate: false
    variable: http_req_Host
    pattern: example.com
  actions:
    requestHeaderConfigurations:
    - actionType: set
      headerName: incoming-test-header
      headerValue: incoming-test-value
    responseHeaderConfigurations:
    - actionType: set
      headerName: outgoing-test-header
      headerValue: outgoing-test-value
    urlConfiguration:
      modifiedPath: "/api/"
      modifiedQueryString: "query=test-value"
      reroute: false

Prioridad de las reglas

Esta anotación permite que el controlador de entrada de puerta de enlace de aplicación establezca explícitamente la prioridad de las Reglas de enrutamiento de solicitudes asociadas.

Uso

appgw.ingress.kubernetes.io/rule-priority:

Ejemplo

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-rulepriority
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/rule-priority: 10
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 8080

En el ejemplo anterior, la regla de enrutamiento de solicitudes tendría una prioridad de 10 establecida.