envoy als http 2 Frontproxy - Aktivierung von http 2 für envoy (auch bekannt als h2)
Standardmäßig ist envoy nicht für den Aufbau von Verbindungen mit Clients konfiguriert, die sich mit dem neuen HTTP/2 verbinden.
HTTP/2 ist für das moderne Web optimiert, mit binären Headern usw. - höhere Geschwindigkeit.
Da envoy in der Lage ist, HTTP/2 an Clients weiterzugeben, ist es ein Kinderspiel, es einzurichten.
Und die Einrichtung ist wirklich einfachauch. Sie fügen einfach hinzu eine Zeile in der common_tls_context Ihres Hörers:
alpn_protocols: [ "h2,http/1.1" ]
Das war's. (Die Anführungszeichen sollten normale Anführungszeichen sein, für den Fall, dass WordPress diese durcheinander bringt)
ALPN steht für Aushandlung von Protokollen auf der Anwendungsschicht - Es wird offenbar benötigt, damit HTTP/2 funktioniert.
Standardmäßig unterstützt der http_connection_manager envoy-Filter sowohl HTTP1 als auch HTTP2 im Modus AUTO.
Durch Hinzufügen der alpn_protocols können Sie diese Funktionalität tatsächlich nutzen.
Meine envoy.yaml für Ihre Referenz
Ich werde Folgendes wiedergeben meine gesamte envoy.yaml Sie sehen also den Kontext, in den die Zeile eingeordnet werden muss:
statische_Ressourcen:
Hörer:
- Adresse:
socket_address:
Adresse: 0.0.0.0
port_wert: 80
filter_chains:
- Filter:
- Name: envoy.http_connection_manager
Konfiguration:
codec_type: auto
stat_prefix: ingress_http
route_config:
virtuelle_hosts:
- Name: Backend
Domänen: ["*"]
Routen:
- übereinstimmen: { prefix: "/" }
umleiten:
path_redirect: "/"
https_redirect: true
http_filters:
- Name: envoy.router
Konfig: {}
- Adresse:
socket_address:
Adresse: 0.0.0.0
port_wert: 443
filter_chains:
- tls_context:
common_tls_context:
tls_zertifikate:
- certificate_chain: { filename: "/etc/example-com.crt" }
private_key: { Dateiname: "/etc/example-com.key" }
alpn_protocols: [ "h2,http/1.1" ]
Filter:
- Name: envoy.http_connection_manager
Konfiguration:
stat_prefix: ingress_https
route_config:
virtuelle_hosts:
- Name: Backend
Domänen: ["*"]
Routen:
- übereinstimmen: { prefix: "/" }
Route: { cluster: target_taxgod }
http_filters:
- Name: envoy.router
Konfig: {}
Clustern:
- Name: target_taxgod
connect_timeout: 0.25s
Typ: strict_dns
lb_policy: round_robin
Gastgeber:
- socket_address:
Anschrift: taxgod
port_value: 3000
admin:
access_log_path: "/tmp/envoy.log"
Adresse:
socket_address:
Adresse: 0.0.0.0
port_wert: 9901
Diese envoy.yaml lauscht auf Port 80 und Port 443. HTTP-Anfragen an Port 80 werden an Port 443 umgeleitet. Der gesamte Verkehr wird an einen Docker-Container "taxgod" im selben Docker-Netzwerk gesendet. Einzelheiten finden Sie in diesem Artikel von mir.
Erwarten Sie bitte nicht, dass das Kopieren und Einfügen funktioniert - WordPress ist leider manchmal zu schlau für sein eigenes Wohl und bringt alle möglichen Zeichen und Code-Formatierungen durcheinander.
Referenzen:
- https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation
- https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#enum-config-filter-network-http-connection-manager-v2-httpconnectionmanager-codectype
- https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/ssl.html?highlight=common
- https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/auth/cert.proto.html?highlight=common#auth-commontlscontext -> Ich habe die Informationen, wie man alpn richtig einstellt (wo man es in die Konfigurationsdatei einfügt und was man dort einfügt), von hier
- https://github.com/envoyproxy/envoy/issues/3394 -> das hat mich auf den richtigen Weg gebracht. Ich hatte noch nie von ALPN gehört, bevor ich dies las.