TLS 检查器监听器过滤器
此示例演示了如何使用 TLS
检查器来选择 FilterChains
,根据匹配的 transport_protocol
和/或 application_protocols
在上游集群之间分配流量。
它还演示了 TLS
检查器监听器过滤器生成的管理统计信息。
步骤 1:构建沙箱
更改 Envoy 存储库中的 examples/tls-inspector
目录,并启动服务。
这将启动一个在 localhost:10000
上监听的代理,并且有一个在端口 12345 上监听的管理界面。
它还启动了三个上游 HTTP
服务,这些服务以 json
格式回显接收到的标头。
前两个服务是 HTTPS
服务,在端口 443
上监听,另一个没有 TLS
,在端口 80
上监听。
$ pwd
envoy/examples/tls-inspector
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------------------------
tls-inspector_service-http_1 docker-entrypoint.sh node ... Up
tls-inspector_service-https-http1.1_1 docker-entrypoint.sh node ... Up
tls-inspector_service-https-http2_1 docker-entrypoint.sh node ... Up
tls-inspector_tls-inspector_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp, 0.0.0.0:12345->12345/tcp
步骤 2:访问服务
使用在 TLS 上指定的不同 HTTP 版本或不使用 TLS 使用 HTTP 协议查询端口 10000 上的服务,将由不同的上游服务处理请求。
使用 HTTP1.1
和 TLS
查询代理
$ curl -sk --http1.1 https://127.0.0.1:10000 | jq '.os.hostname'
"service-https-http1.1"
上游 service-https-http1.1
处理请求。
使用 HTTP2
和 TLS
查询代理
$ curl -sk --http2 https://127.0.0.1:10000 | jq '.os.hostname'
"service-https-http2"
上游 service-https-http2
处理请求。
使用不带 TLS
的方式查询代理
$ curl -sk https://127.0.0.1:10000 | jq '.os.hostname'
"service-http"
上游 service-http
处理请求。由于 TLS 检查器监听器过滤器检测到传输是纯文本,因此它不会将 transport_protocol 设置为 TLS
。
步骤 3:查看管理统计信息
TLS 检查器有一个以 tls_inspector
为根的统计信息树,可以使用配置的管理访问入口点提取该树。
$ curl -sk https://127.0.0.1:12345/stats |grep tls_inspector
tls_inspector.alpn_found: 2
tls_inspector.alpn_not_found: 0
tls_inspector.client_hello_too_large: 0
tls_inspector.connection_closed: 0
tls_inspector.read_error: 0
tls_inspector.sni_found: 2
tls_inspector.sni_not_found: 0
tls_inspector.tls_found: 2
tls_inspector.tls_not_found: 1
查看管理统计信息,我们可以看到 TLS
、SNI
和 ALPN
都已检测到,因为我们通过 HTTP
在 TLS
上访问了服务两次。它还显示了一个来自纯文本查询的 tls_not_found
。