文章内容基本来自Istio官网,这里属于学习的记录。

Istio通过一个简单的配置模型,来控制API调用和服务间的4层通信。

流量管理配置有五种,我们先对其作简单介绍,先有个概念之后,后续再深入理解它们的行为,以及它们如何满足我们服务级别的需求。

这五种资源分别为:

  • VirtualService
  • DestinationRule
  • ServiceEntry
  • Gateway
  • Sidecar

VirtualService

VirtualService定义了在Istio服务网格中,服务请求是如何被路由的。它可以将请求路由到服务的不同版本,甚至是不同的服务。

路由的选择规则可以有许多,比如:

  • 请求的源和目的地
  • 请求的HTTP路径和头部信息
  • 不同的服务版本有不同的权重

DestinationRule

DestinationRule定义了当VirtualService生效时,应用在请求上的一系列策略。比如可以指定负载均衡的策略、配置断路器来对服务进行保护、配置TLS等等。

ServiceEntry

ServiceEntry通常用于开启对Istio服务网格之外的服务的请求。为什么说开启对外请求呢?因为在网格内,Istio假定所有进出流量都会经过Envoy代理,如果没有经过配置,网格内服务的请求是无法到达外部服务的。

简单来说,ServiceEntry就是一份白名单,服务网格外的服务只有在白名单内,网格内的请求才能到达。

或许你会遇到说,我没有配置ServiceEntry呀,照样可以访问外部网络,那可能是因为你的istio的策略是ALLOW_ANY,而不是REGISTERY_ONLY,可以通过下面的指令查看:

1
2
$ kubectl get configmap istio -n istio-system -o yaml | grep -o -E "mode: .+_[A-Z]+"
$ mode: ALLOW_ANY

Gateway

Gateway配置负载均衡器运作在网格边缘,通常用于为服务启用HTTP/TCP入口流量。
跟Kubernetes Ingress不同的是,它只有4到6层的功能。使用VirtualService绑定到Gateway之上,就可以使用Istio的规则来控制HTTP和TCP流量。

Sidecar

Istio默认会为网格中所有的工作负载配置边车代理,来接受所有相关联端口的流量。Sidecar配置能够微调被接受的端口和协议,限制代理能够访问的服务。

总结

这五种流量的配置资源是Istio的主要内容,各式各样的服务需求都可以通过它们的组合来完成,后续会介绍它们是如何配置,并且怎么作用于服务之上。

参考

Traffic Management