【发布时间】:2019-09-27 07:54:47
【问题描述】:
我们在一个 API 网关后面有许多服务,它本身就在 ingress-nginx 后面。我们正在尝试使用 HTTP/2 来加速到前端的数据传输,但我们所有的连接仍然是使用 HTTP/1.1 完成的。
client 到 nginx 的连接是通过 HTTPS 的,但是 nginx 与我们的 API 网关使用 HTTP 通信,网关也使用 HTTP 与后端服务通信。
我们是否需要从端到端使用 HTTPS 才能使 HTTP/2 正常工作?如果是这样,最好的设置方法是什么:使用证书?如果不是,是什么原因导致连接断开到 HTTP/1.1?
我们使用的是 ingress-nginx 版本 0.21.0,它有 nginx 1.15.6 和 OpenSSL 1.1.1,应该足以支持 TLS 1.3/ALPN/HTTP2。我们的 nginx-configuration configmap 将 use-http2 设置为 true,我可以看到 pod 的 /etc/nginx.conf 有一个 listen ... http2; 行。
2019 年 10 月 5 日编辑:
除了 @Barry Pollard 和 @Rico 的 cmets,我发现位于我们的 ingress-nginx 控制器前面的 AWS Elastic Load Balancer 不支持 HTTP/2。我已经从堆栈中删除了 nginx,并且我们的 API 网关正在配置它自己的网络负载均衡器。但是,我们仍然使用 HTTP/1.1。看起来 ASP.Net Core 2.2 的 HTTP 服务器 Kestrel 默认使用 HTTP/2,所以我不确定为什么连接仍然下降到 1.1。
【问题讨论】:
-
不,您不需要始终使用 HTTPS。它是一个公开可用的端点吗?您可以通过ssllabs.com/ssltest 运行它并确认我设置为“Yes h2 http/1.1”的 ALPN 以及 Chrome 70 使用的 TLS 版本和密码吗?
-
表示不支持 TLS 1.3 和 ALPN。我认为 ELB 是原因。
-
你能做到吗?我在 nginx 入口断开与 Http 1.1 的连接时遇到了同样的问题
标签: amazon-web-services ssl asp.net-core kubernetes http2