是否可以在Istio Gateway上启用具有TLS终止功能的HTTP / 2?

问题描述

是否可以在Istio Gateway上启用带有TLS(mTLS)终止功能的HTTP / 2?然后使用HTTP / 2将流量转发到应用程序

解决方法

是的,这是可能的。服务之间的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
,

如果您的网络服务器支持HTTP2协议,那么应该没有任何问题。

当http / 2请求到达时,将保持tсp连接直到isitio入口网关或直到Web应用程序?

据我所知,连接应该一直保留到wep-app。如果是http2,则Ingress网关将负责传递请求,如果是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。