amazon-web-services - 如何使用 ingress-nginx 让 HTTP/2 在 Kubernetes 集群中工作

标签 amazon-web-services ssl asp.net-core kubernetes http2

我们在一个 API 网关后面有许多服务,它本身在 ingress-nginx 后面。我们正在尝试使用 HTTP/2 来加速到前端的数据传输,但我们所有的连接仍然是通过 HTTP/1.1 完成的。

从客户端到 nginx 的连接是通过 HTTPS,但 nginx 使用 HTTP 与我们的 API 网关通信,网关也使用 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 配置 configmap 将 use-http2 设置为 true 我可以看到 pod 的 /etc/nginx.conf 有一个 listen ... http2; 行。


编辑 10/05/2019:

根据@Barry Pollard 和@Rico 的评论,我发现位于我们的 ingress-nginx Controller 前面的 AWS Elastic Load Balancer 不支持 HTTP/2。我已经将 nginx 从堆栈中删除,我们的 API 网关正在配置自己的网络负载均衡器。然而,我们仍然使用 HTTP/1.1。看起来 ASP.Net Core 2.2 的 HTTP 服务器 Kestrel 默认使用 HTTP/2,所以我不确定为什么连接仍然下降到 1.1。

最佳答案

就像@BarryPollard 所说的那样,您不应该需要端到端的 HTTP/2 来在浏览器上建立 HTTP/2 连接。

听起来您正在为客户端使用的任何内容都已降为 HTTP/1.1,请确保您尝试使用以下其中一项:

  • Chrome 51
  • 火狐 53
  • 第 12 条
  • Internet Explorer 11
  • 歌剧 38

您没有指定您的 nginx 前面的架构。它是否直接连接到互联网?或者它正在通过云负载平衡器?加速网络?您还可以按照描述使用 Wireshark 进行测试 here .

关于amazon-web-services - 如何使用 ingress-nginx 让 HTTP/2 在 Kubernetes 集群中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060094/

相关文章:

ruby-on-rails - 将 Rails 4.1 部署到 AWS 未能预编译 Assets

node.js - 从 AWS lambda handler.js 调用文件?

ssl - Fiddler 如何删除 HTTPS 扩展?

c# - 简单注入(inject)器注入(inject) PageModel ASP.NET Core Razor 页面

c# - 如何在 EF 核心中实现每个租户的模式?

amazon-web-services - 单个 DynamoDB 流上的多个 AWS Lambda 函数

python - AWS Lambda TypeError : datetime. datetime(2012, 8, 8, 21, 46, 24, 862000) 不是 JSON 可序列化

svn - 使用 Release 插件时禁用 Hudson 中的证书检查

ssl - 在 Lumen 5.6 中强制使用 SSL 路由

c# - 警告尝试构建 Service Fabric AspNetCore2 项目