Istio中如何处理thrift等协议 对于Istio来说,分为控制面和数据面。控制面负责下发Envoy 的配置。数据面接受控制面下发的配置,按照配置工作。 所以本质上只有envoy支持的协议,控制面才能够支持。实际情况,istio支持的协议类型,远远少于Envoy支持的类型。 Istio对于HTTP,gRPC协议之外的协议,支持并不是特别好。而实际的应用中,其实很多单位都在使用诸如thrift,dubbo或其他私有协议。随着Istio用户越来越多,增加对其他协议的支持是一个强需求。 Istio如何确定各种协议 Istio支持代理任何TCP通信。这包括HTTP,HTTPS,gRPC以及原始TCP协议。为了提供其他功能,例如路由和丰富的metrics,我们必须确定具体协议。确定的方式有:自动检测手动指定 自动检测 Istio可以自动检测HTTP和HTTP/2通信。其他协议类型,如果没有手动指定,则将流量视为纯TCP流量。 自动检测功能默认开启,可以通过 和 设置关闭或开启。 实际应用中,比如我需要开启对thrift的支持,需要关闭自动检测。 手动指定 如何指定? 我们知道对于Istio来说,支持k8s中的 Service 和 非k8s环境ServiceEntry两种资源对象转换为内部的统一服务模型。 对于k8s中的Service:通过端口名: Kubernetes 1.18+, 可以通过 字段: 通过appProtocol字段指定,具体示例如下: 对于ServiceEntry,通过ports列表中protocol属性自定,具体示例如下: 截止到目前,支持以下值:* 其中*标注的协议,默认是不支持,需要在特性开关中启用。对于thrift来说,我们需要给pilot设置环境变量:。 可以看出,Istio逐步在增加对其他协议的支持,比如mongo,redis,mysql,thrift。 Istio 如何支持其他协议 那么我们目前有以下几种方式支持thrift等协议。 1)EnvoyFilter EnvoyFilter是Istio中自定义的一种网络资源对象,用来更新配置Envoy中的filter,为服务网格控制面提供了更强大的扩展能力,使Envoy中filter chain具备自定义配置的能力。 我们以thrift举例说明。 Istio默认把Thrift协议当做普通的TCP协议来处理。我们需要通过EnvoyFilter移除默认的TCP Filter,并增加Thrift proxy Filter。 具体的EnvoyFilter如下: 更多内容可查看 istio-thrift-example。 该方案的确可以实现,但是非常繁杂,也容易出错。 2)Aeraki 由于难以手动对 EnvoyFilter 进行管理和维护 ,腾讯云Mesh团队创建了Aeraki 项目来自动化这个流程。 Aeraki 的基本工作原理如下图所示:Aeraki 从 Istio 中拉取服务数据,根据 ServiceEntry 和 Aeraki 流量规则生成 Envoy 配置,并采用 EnvoyFilter 将生成的配置推送到 Istio 中。简而言之,你可以把 Aeraki 看做 Istio 中管理的七层协议的Operator。
该方案,又做了一些抽象,并且不会对Istio代码做侵入性改动。 3)代码级别增加对其他协议支持,或是对已支持协议的新功能扩展 上面我们已经讲到,目前istio正在增加对其他协议的支持,已经支持了mongo,mysql,redis等。 比如thrift: 如果我们启用了。filter列表中,将会直接添加thrift filter,而不是tcp filter。 不过istio对thrift支持有限,并不是所有的功能都支持,比如流量分割就不支持。主要原因在于Route方面支持有限。社区对于thrift的支持并不活跃。 截止到2021年5月2日,istio master分支上已经删除了对thrift支持的代码。社区对于thrift的支持倾向于Aeraki。具体见 Remove thrift filter support in pilot #31661。 总结 目前来看,支持thrift最靠谱的方案是Aeraki 。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/67848.html