【问题标题】:How to upgrade Istio Service Mesh from http to http2?如何将 Istio Service Mesh 从 http 升级到 http2?
【发布时间】:2020-04-23 16:32:22
【问题描述】:

我们在 Kubernetes 上并使用 Istio 服务网格。目前,网关中有 HTTPS 的 SSL 终止。我在 istio-proxy 日志中看到 HTTP 协议是 HTTP 1.1。

我想将 HTTP 1.1 升级到 HTTP2,因为它具有各种优势。客户应该通过 SSL/TLS 调用我们的服务 HTTP2。

我正在使用此blog 进行有关此主题的内部演示。

这些是瓶颈:

1) 我想提出一个改变最少的计划。我了解我需要从

更新网关
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - "*"
    tls:
      mode: SIMPLE
      serverCertificate: /etc/certs/server.pem
      privateKey: /etc/certs/privatekey.pem

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http2
      protocol: HTTP2
    hosts:
    - "*"
    tls:
      mode: SIMPLE
      serverCertificate: /etc/certs/server.pem
      privateKey: /etc/certs/privatekey.pem

基于我在Istio's Gateway documentation 中看到的示例。

我想知道:这是否允许来自浏览器(仅支持此模式)的 HTTP2 over TLS 连接?我可以像使用 HTTPS 一样提供 HTTP2 的 tls 详细信息吗?

2) 还有哪些其他需要更新的 Istio 配置?

3) 这种变化会破坏目前使用 http 协议的微服务吗?我该如何缓解这种情况?

4) 我正在阅读有关 DestinationRule 和 upgrade policy 的信息。这合适吗?

【问题讨论】:

    标签: http kubernetes http2 kubernetes-ingress istio


    【解决方案1】:

    据我所知,istio documentation 和 istio feature stages(http2 处于稳定阶段)

    1) 这是否允许来自浏览器(仅支持此模式)的 HTTP2 over TLS 连接?我可以像使用 HTTPS 一样提供 HTTP2 的 tls 详细信息吗?

    是的,它应该允许 http2。


    2) 还有哪些其他需要更新的 Istio 配置?

    可以选择应用 http2 的地方:



    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: my-ingress
    spec:
      selector:
        app: my-ingress-gateway
      servers:
      - port:
          number: 80
          name: **http2**
          protocol: **HTTP2**
        hosts:
        - "*"
    


    手动协议选择

    可以通过命名服务端口名称手动指定协议:[-]。支持以下协议:

    • grpc
    • grpc
    • 网络
    • http
    • http2
    • https
    • 蒙哥
    • mysql*
    • redis*
    • tcp
    • tls
    • udp

    *默认情况下禁用这些协议以避免意外启用实验性功能。要启用它们,请配置相应的 Pilot 环境变量。


    kind: Service
    metadata:
      name: myservice
    spec:
      ports:
      - number: 80
        name: http2
    

    3) 这种变化会破坏目前使用 http 协议的微服务吗?我该如何缓解这种情况?

    4) 我正在阅读有关 DestinationRule 和升级政策的信息。这样合适吗?

    我认为它应该很合适,您必须升级h2UpgradePolicy并将服务更改为http2。


    希望对你有帮助。

    【讨论】:

    • 你好。我按照建议更新了服务。我收到 503 错误。有什么原因吗?
    • 你好@AnoopHallimala,所以如果你改变网关和目标规则,一切都可以在服务中使用名称http,但是如果你将它更改为http2,它会失败吗?据我检查你的另一篇文章 curl 一切都适用于选项 1?
    • 是的,@jt97。那是正确的。服务中的 http 工作得很好。但是,当我将其更改为 http2 时,它开始给我 503。两种情况下的 DestinationRules 保持不变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2021-09-07
    • 2017-07-02
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多