是否可以在 Istio 网关上启用带有 TLS 终止的 HTTP/2?
Posted
技术标签:
【中文标题】是否可以在 Istio 网关上启用带有 TLS 终止的 HTTP/2?【英文标题】:Is it possible to enable HTTP/2 with TLS termination on Istio Gateway? 【发布时间】:2020-12-09 19:09:24 【问题描述】:是否可以在 Istio 网关上启用带有 TLS(mTLS) 终止的 HTTP/2?然后使用 HTTP/2 将流量转发到应用程序
【问题讨论】:
如果您的网络服务器支持 HTTP2 协议,那么应该没有任何问题。有@suren创建的answer,你可以按照它来全局修改h2UpgradePolicy,将所有传入的http 1.1连接升级到http2。 当http/2请求到来时,tсp连接会一直保持到isitio ingress gateway或者web-application? 据我所知,连接应该一直保持到 wep-app.如果是http2,入口网关将负责传递请求,如果是http,则将其从http升级到http2。 【参考方案1】:是的,这是可能的。您的服务之间的 Http 2 在 ALPN 中协商(在 mTLS 握手期间)。
然后,您可以通过将 service port name (protocol selection) 设置为 http2
,使用 Http 2 将流量从 Sidecar 代理转发到您的应用程序容器。
您的应用的示例服务:
kind: Service
metadata:
name: myapp
spec:
ports:
- number: 8080
name: http2 # protocol selection by name - important to have http2 here
【讨论】:
【参考方案2】:如果您的网络服务器支持 HTTP2 协议,那么应该没有任何问题。
当http/2请求到来时,tсp连接会一直保持到isitio ingress gateway或者web-application?
据我所知,连接应该一直保持到 wep-app。如果是http2,入口网关将负责传递请求,如果是http1.1,则将请求从http1.1升级到http2。
正如@suren 在他的回答中提到的here
您可以在 istio configMap 中设置 h2UpgradePolicy,它会将所有传入的 http 1.1 连接升级到 http2,因此只有与 http2 的连接会通过。
非常重要:要使其工作,前面的服务如果下游对等点,必须有命名端口,并且必须调用 http
apiVersion: v1
kind: Service
metadata:
name: demo
spec:
ports:
- name: http #<- this parameter is mandatory to upgrade to HTTP2
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
此外,还有一种方法可以使用 Destination Rule 为特定的命名空间和 pod 实现此目的,您可以使用 ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy 实现此目的,它将 http1.1 连接升级到 http2。
【讨论】:
以上是关于是否可以在 Istio 网关上启用带有 TLS 终止的 HTTP/2?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Terraform 在 API 网关上启用 HEAD 方法
idou老师教你学Istio 15:Istio实现双向TLS的迁移
idou老师教你学Istio 15:Istio实现双向TLS的迁移