传输层安全 (TLS
)
此示例介绍了 Envoy 可以配置为使用通过 TLS
的 HTTP
建立加密连接的几种方式。
它演示了许多常用的代理和 TLS
终止模式
https
->http
https
->https
http
->https
https
直通
为了更好地理解提供的示例,以及有关如何使用 Envoy 配置 TLS
的描述,请参阅 保护 Envoy 快速入门指南。
警告
为了简单起见,此处提供的示例不验证任何客户端证书,也不验证任何提供的证书。
在使用 TLS
时,强烈建议您尽可能 验证 所有证书。
您还应该 验证客户端,前提是您控制连接的双方,或可以使用相关协议。
步骤 1:构建沙盒
更改 Envoy 存储库中 examples/tls
的目录。
这将启动四个代理,侦听 localhost
端口 10000-10003
。
它还启动两个上游服务,一个 HTTP
和一个 HTTPS
,它们以 json
格式回显接收到的标头。
上游服务在内部 Docker 网络上分别侦听端口 80
和 443
。
$ pwd
envoy/examples/tls
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
tls_proxy-https-to-http_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp
tls_proxy-https-to-https_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10001->10000/tcp
tls_proxy-http-to-https_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10002->10000/tcp
tls_proxy-https-passthrough_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10003->10000/tcp
tls_service-http_1 node ./index.js Up
tls_service-https_1 node ./index.js Up
步骤 2:测试代理 https
-> http
侦听 https://127.0.0.1:10000 的 Envoy 代理终止 HTTPS
并代理到上游 HTTP
服务。
https -> http 配置
在 传输套接字 中添加了 TLS
。 到 监听器。
查询端口 10000
上的服务,您应该看到添加了 x-forwarded-proto
标头,其值为 https
$ curl -sk https://127.0.0.1:10000 | jq -r '.headers["x-forwarded-proto"]'
https
上游 service-http
处理请求。
$ curl -sk https://127.0.0.1:10000 | jq -r '.os.hostname'
service-http
步骤 3:测试代理 https
-> https
侦听 https://127.0.0.1:10001 的 Envoy 代理终止 HTTPS
并代理到上游 HTTPS
服务。
https -> https 配置
在 传输套接字 中添加了 TLS
。 到 监听器 和 集群。
查询端口 10001
上的服务,您应该看到添加了 x-forwarded-proto
标头,其值为 https
$ curl -sk https://127.0.0.1:10001 | jq -r '.headers["x-forwarded-proto"]'
https
上游 service-https
处理请求。
$ curl -sk https://127.0.0.1:10001 | jq -r '.os.hostname'
service-https
步骤 4:测试代理 http
-> https
侦听 https://127.0.0.1:10002 的 Envoy 代理终止 HTTP
并代理到上游 HTTPS
服务。
http -> https 配置
在 传输套接字 中添加了 TLS
。 到 集群。
查询端口 10002
上的服务,您应该看到添加了 x-forwarded-proto
标头,其值为 http
$ curl -s https://127.0.0.1:10002 | jq -r '.headers["x-forwarded-proto"]'
http
上游 service-https
处理请求。
$ curl -s https://127.0.0.1:10002 | jq -r '.os.hostname'
service-https
步骤 5:测试代理 https
直通
侦听 https://127.0.0.1:10003 的 Envoy 代理直接代理到上游 HTTPS
服务,该服务执行 TLS
终止。
https 直通 配置
不需要任何 TLS
或 HTTP
设置,而是使用简单的 tcp_proxy。
查询端口 10003
上的服务,您应该看到没有添加 x-forwarded-proto
标头
$ curl -sk https://127.0.0.1:10003 | jq -r '.headers["x-forwarded-proto"]'
null
上游 service-https
处理请求。
$ curl -sk https://127.0.0.1:10003 | jq -r '.os.hostname'
service-https
另请参阅
- 保护 Envoy 快速入门指南
保护 Envoy 的关键概念概述。
- TLS SNI 沙盒
使用 Envoy 为多个域提供服务的示例,这些域受 TLS 保护并从同一
IP
地址提供服务。- 双代理沙盒
使用
mTLS
和非HTTP
流量在代理之间保护流量的示例,该示例使用验证和相互身份验证。