服务网格
Service Mesh(中文名:服务网格)是新兴的微服务架构,被誉为下一代微服务,是云原生技术栈的关键组件之一。 服务网格的书面定义是: 服务网格是一个基础设施层,用于处理服务间通讯。云原生应用有着复杂的服务拓扑,服务网格负责在这些拓扑中实现请求的可靠传递。在实践中,服务网格通常实现为一组轻量级网络代理,它们与应用程序部署在一起,而对应用程序透明。
Istio是什么?
Istio 是一个由Google,IBM和Lyft团队合作开发的开源Service Mesh项目,它提供了基于微服务的应用程序复杂性的解决方案,仅举几例:
流量管理 :超时,重试,负载均衡;
安全性: 最终用户身份验证和授权;
可观察性: 跟踪,监控和记录;
为什么要使用Istio?
(Service Mesh 提供了一种透明的、与编程语言无关的方式,使网络配置、安全配置以及遥测等操作能够灵活而简便地实现自动化) 在没有Istio时,一个服务向另一个服务直接发出请求,并且在发生故障的情况下,服务需要通过重试,超时,打开熔断器等来处理它。
Istio与K8S、API网关的关系?
Istio与k8s相结合,三驾马车:Kubernetes、Istio 和 Knative。 应用服务生命周期:
Knative 解决应用模板+面向统一环境的标准化构建场景(serverless,即无状态应用,简单理解为随时随地部署上线);
Kubernetes作为基础设施,解决应用编排和运行环境场景;
Isito作为通信基础设施层,保证应用服务运行可检测、可配置、可追踪问题。
实际上可以这么理解,API网关是微服务架构下的一个重要组件,而istio会实现API网关的功能,并且完善微服务的架构,比如服务发现、安全性、监控等,统称为服务治理,istio就是把服务治理实践化。
Istio组成
控制平面: 主要由四个组件组成: Pilot(关键组成,底层管理模块)、 Mixer(上层API模块) 和 Citadel(安全模块)、Galley(Istio的配置验证,提取,处理和分发组件。它负责将其余Istio组件与从底层平台(例如Kubernetes)获取用户配置的细节隔离开来),它们组合使用Envoys来路由流量,实施策略和收集遥测数据。
数据平面:注入的代理使Istio能够轻松满足我们的要求 Envoy(即数据平面)使用由Istio定义的 Kubernetes自定义资源定义 进行配置。这意味着对你而言,它只是另一个具有熟悉语法的Kubernetes资源。创建后将由控制平面获取,并将其应用于Envoy。
官网详细描述了数据平面和控制平面的组成、调用关系和主要职责:
重要概念
sidecar: 部署到默认命名空间的每个pod都将获得注入的sidecar(Sidecar 模式:容器应用模式之一,Service Mesh 架构的一种实现方式),简单理解为Envoy 代理容器
入口网关: 允许流量进入集群的最佳做法是通过Istio的 入口网关 将其自身置于集群的边缘,并在传入流量上实现Istio的功能,如路由,负载均衡,安全性和监控。 在Istio的安装过程中, Ingress Gateway 组件和在外部公开它的服务已安装到集群中。
Envoy熔断、重试示例
上图解释:
1.Envoy将请求发送到服务B的第一个实例,但它失败了。
2.Envoy sidecar重试。①
3.返回对调用代理的失败请求。
4.这将打开熔断器并在后续请求中调用下一个服务。②
平台支持
Istio is platform-independent and designed to run in a variety of environments, including those spanning Cloud, on-premise, Kubernetes, Mesos, and more. You can deploy Istio on Kubernetes, or on Nomad with Consul. Istio currently supports:
Service deployment on Kubernetes
Services registered with Consul(服务发现的框架,常用的有zookeeper、eureka、etcd、consul)
Services running on individual virtual machines(单台虚拟机服务)
参考链接
https://www.servicemesher.com/blog/back-to-microservices-with-istio-p1/