Istio 1.0版附带一个网络API,该API包含许多功能并涵盖了各种情况。 联网API在最近几个月中得到了发展,并且可能无法立即说明。 该API的概念和构建块是什么,以及如何使用各个Istio资源类型来通过我们的服务网格路由流量?

尽管文档提供了大量有用的信息,但我还是想用自己的语言来描述和解释流量路由。 我必须付出很多努力才能理解概念和动机是什么,尤其是如何应用各个组成部分。

以下视频旨在解释Istio的网络( v3alpha )API的概念,以及通常如何应用构建基块。 它显示了服务网格中各个组件的可视模型,希望可以帮助您理解和使用Istio。

什么时候使用

虚拟服务 :将属于网状网的服务的流量路由到特定目标或其子集,和/或以某些行为(例如超时)注释HTTP(默认)路由。

目标规则 :设置路由流量的策略,例如TLS设置,异常检测或负载平衡器设置,和/或定义属于网格的服务子集。

服务条目 :将其他服务添加到Istio的内部服务注册表中,这是将流量路由到外部服务所必需的。 可以通过虚拟服务和目标规则来增强所添加的服务。

网关(入口) :将入口流量路由到服务网格。 网关需要绑定到虚拟服务,该服务定义将入口流量路由到的位置。

网关(出口) :定义一个出口,可以将离开网格的所有出口流量路由通过。 对于仅特定节点可以或应该访问外部网络的方案可能是必需的。

见解和“陷阱”

开始使用Istio的网络功能后,您可能需要考虑一些我自己的见解。 其中一些听起来很明显,但可能包含“陷阱”效果。

  • 虚拟服务以及目标规则不必与平台(Kubernetes)服务1:1匹配。
  • HTTPS通信需要通过TLS规则(使用端口和SNI)而不是HTTP规则进行路由。
  • Istio的可选mTLS仍可确保对网格内部流量进行加密,而无需应用程序级HTTPS / TLS。
  • 默认情况下,不允许外部流量向(外部)网格外的服务提供服务。 必须输入服务。
  • 入口或出口网关可以负责多个平台(Kubernetes)服务,但需要绑定到单个虚拟服务定义。
  • 通过为外部主机名定义的虚拟服务或目标规则,可以控制或“增强”出口流量。
  • 服务条目中指定的主机流量可以重新路由到内部服务。
  • 只要外部服务条目未重定向到另一个内部服务,就将其作为单独的服务进行监视。
  • Istio代理将主机名和SNI名称都考虑在内,并且可以将流量重新路由到内部或外部服务。

我希望这可以澄清Istio的网络功能。 我们很高兴收到您的反馈!

更多信息

  • 交通管理(Istio文档)
  • API参考
  • 引入Istio v1alpha3路由API(Istio博客文章)
  • 咖啡示例项目

翻译自: https://www.javacodegeeks.com/2018/08/istios-networking-api-explained.html