Istio 的流量管理指南
作者:Safa Mulani
各位读者好!本文将探讨 Istio 的流量管理,并结合它的几个核心资源进行详细解释。
那么让我们开始吧!
什么是流量管理?
流量管理是指对在数据/浏览传输或 API 调用过程中产生的流量进行管理。
当我们在本地服务器或云端上设置应用程序时,如果该应用程序尝试调用某些 API 或其他第三方实体的服务,或通过互联网传输数据,都会产生流量。
对于任何应用程序来说,数据都是关键且易受威胁的。基础架构是应用设置的根本,因此必须通过安全的基础架构监测互联网上的流量,才能保证该平台/基础架构上服务的安全性,并为之提供更完善的管理。
接下来将介绍 Istio 作为流量管理工具所具备的功能。
Istio 流量管理工具
Istio 通过它的流量路由规则提供流量管理服务。在这些规则下,所有通过互联网流经应用程序的流量都会被监控,由此,应用程序应对故障的能力就增强了。
Istio 将 Envoy 代理配置为应用程序容器的边车模式( sidecar ),以监控所有为了API调用或其他服务而进出应用程序 pod 的流量。
这样一来底层应用程序服务就不会受到影响了,因为所有的流量都经由 Envoy 边车模式来代理监控,以实现故障恢复和流量管理。
Istio 需要知道应用程序的端点以监控流量。 因此,它在内部连接到服务发现系统(service discovery system),以识别应用程序的服务以及所有端点。
当网络调用到达应用程序时,它会首先通过 Envoy 代理路由,然后最终到达应用程序的终端服务。因此,边车模式能够完全呈现并监控应用程序的流量。
Istio 基于轮询调度模型传输流量,或在基础架构中的负载均衡器之间分发流量。
Istio流量管理资源
了解了 Istio 作为流量管理工具的工作原理后,让我们来一起探索 Istio 为之配备的相应资源吧。
1. 虚拟服务( Virtual Service )
借助虚拟服务,我们可以定义流量路由规则,这些规则在应用程序访问负载均衡器时发挥作用。我们为终端服务定义规则和相应的的匹配协议( protocal ),如果条件与规则相匹配,流量就能被发送到相应的终端服务。
虚拟服务使我们能够通过流量路由规则对服务请求进行解耦,从而轻松管理流量负载。 我们可以在同一个虚拟服务配置中指定和维护多个主机名的流量行为。
现在让我们通过以下示例了解虚拟服务的配置。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-vs
spec:
hosts:
- demo.vs.com
http:
- match:
- headers:
end-user:
exact: /api
route:
- destination:
host: /
解释:
- hosts 条目包括应用程序的域或 规范名字( CNAME )。
- 然后,我们通过 http 路由逐级向下,并将匹配的后端服务配置到特定的主机/目的地。
match部分下面就是后端服务配置,一旦主机条目匹配,后端服务配置就会被调用。- http 部分包含重定向到目标的路由规则。
- 一旦网络流量/请求到达 Istio 网关,它就会查找它的 规范名字( CNAME )/全限定域名( FQDN )条目。 成功匹配后,它将流量发送到虚拟服务,虚拟服务随即将其路由到特定的目标服务。
2. 网关( Gateway )
有了网关,就可以在全局( Envoy )层面上灵活地监控出入的流量。我们可以通过协议( protocol )或规则指定进入 Istio 服务网格并进一步路由至目的地的流量类型。
因此,一旦应用程序的 URL 到达负载均衡器,它就会搜索一个对应的网关。 一旦它找到相应条目,就会允许应用程序主机进入网格。
让我们通过以下示例了解网关的工作原理:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: demo-gtwy
spec:
selector:
app: demo
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- demo.vs.com
tls:
mode: SIMPLE
credentialName: demo-tls-cert
解释:
- 一旦 Web 流量到达负载均衡器,它就会被路由到 Istio 网关,网关随即使流量通过提及端口(本例中为 443端口)进入服务网格。
- 但是,在此阶段流量并未路由至后端服务。
- 网关通过 TLS secret( 凭据 )检查规范名字( CNAME )是否有效。
- 一旦网关确认并允许来自主机的流量进入,虚拟服务就会将其路由至目标服务。
3. 边车模式( Sidecars)
Sidecar 可以帮助我们限制和管理到达 Envoy 代理的流量。Istio 以通用方式配置每个Envoy 代理,以接收与应用程序的工作负载相关的所有端口上的流量。使用 sidecar 可以实现以下功能:
筛选并管理 Envoy 代理接受的协议和端口。
筛选并限制 Envoy 代理访问或将流量转发至某些服务集。
允许/限制到达不同命名空间内服务的流量。
现在让我们使用以下示例来理解 sidecar 的概念:
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
name: default
namespace: default
spec:
egress:
- hosts:
- "./*"
- "bookinfo/*"
解释:
- 上述配置将 sidecar 配置到默认命名空间。
- 该配置仅允许进出流量访问默认命名空间和 bookinfo 命名空间的后端服务。
- 由此,它便限制了流量对其他命名空间的路由/可达性。
结语
这就是本篇文章的所有内容。
想要阅读更多此类文章,请继续关注我们。
今天就介绍到这里,祝您学习愉快!