【问题标题】:Is it possible to enable HTTP/2 with TLS termination on Istio Gateway?是否可以在 Istio 网关上启用带有 TLS 终止的 HTTP/2?
【发布时间】: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。

标签: ssl kubernetes tls1.2 http2 istio


【解决方案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。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2021-01-20
      • 1970-01-01
      • 2016-04-20
      • 2019-03-14
      相关资源
      最近更新 更多