envoy como proxy frontal http 2 - habilitar http 2 para envoy (también conocido como h2)

Out of the box envoy no está configurado para establecer conexiones con clientes que se conectan a él con el nuevo HTTP/2.

HTTP/2 está optimizado para la web moderna, con cabeceras binarias, etc. - mayor velocidad.

Dado que envoy es capaz de hablar HTTP/2 a los clientes, es una obviedad configurarlo.

Y el montaje es realmente fácilTambién. Sólo tienes que añadir un en el common_tls_context de su receptor:

alpn_protocols: [ "h2,http/1.1" ]

Eso es todo. (Las comillas deben ser normales, en caso de que WordPress las estropee)

ALPN significa Negociación del protocolo de la capa de aplicación  - aparentemente es necesario para que HTTP/2 funcione.

Por defecto, el filtro envoy http_connection_manager soportará tanto HTTP1 como HTTP2 en el modo AUTO.

Al añadir los alpn_protocols se permite que esta funcionalidad se utilice realmente.

Mi envoy.yaml para su referencia

Voy a reproducir todo mi envoy.yaml para que veas el contexto en el que hay que poner la línea:

static_resources:
   oyentes:
   - dirección:
       dirección_de_socket:
         dirección: 0.0.0.0
         valor_puerto: 80
     cadenas_de_filtro:
     - filtros:
       - nombre: envoy.http_connection_manager
         configurar:
           codec_type: auto
           stat_prefix: ingress_http
           route_config:
             virtual_hosts:
             - nombre: backend
               dominios: ["*"]
               rutas:
               - coincidencia: { prefijo: "/" }
                 redirigir:
                   path_redirect: "/"
                   https_redirect: true
           http_filters:
           - nombre: envoy.router
             configurar: {}
   - dirección:
       dirección_de_socket:
         dirección: 0.0.0.0
         valor_de_puerto: 443
     cadenas_de_filtro:
     - tls_context:
         common_tls_context:
           tls_certificados:
           - cadena_certificada: { nombre de archivo: "/etc/ejemplo-com.crt" }
             private_key: { nombre de archivo: "/etc/ejemplo-com.key" }
           alpn_protocols: [ "h2,http/1.1" ]
       filtros:
       - nombre: envoy.http_connection_manager
         configurar:
           stat_prefix: ingress_https
           route_config:
             virtual_hosts:
             - nombre: backend
               dominios: ["*"]
               rutas:
               - coincidencia: { prefijo: "/" }
                 ruta: { cluster: target_taxgod }
           http_filters:
           - nombre: envoy.router
             configurar: {}
   racimos:
   - nombre: target_taxgod
     connect_timeout: 0.25s
     tipo: strict_dns
     lb_policy: round_robin
     anfitriones:
     - dirección_de_socket:
         dirección: taxgod
         valor_de_puerto: 3000
admin:
   access_log_path: "/tmp/envoy.log"
   dirección:
     dirección_de_socket:
       dirección: 0.0.0.0
       valor_puerto: 9901

Este envoy.yaml escucha en los puertos 80 y 443. Las peticiones HTTP al puerto 80 se redirigen al puerto 443. Todo el tráfico se envía a un contenedor docker "taxgod" en la misma red docker. Consulte este artículo mío para más detalles.

Por favor, no esperes copiar y pegar todo esto para que funcione - WordPress, por desgracia, es demasiado inteligente para su propio bien a veces, y estropea todo tipo de caracteres y el formato del código.

Referencias: