3

istio_study_1_快速入门

 3 years ago
source link: https://www.ishells.cn/archives/istiostudy1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
istio_study_1_快速入门

istio_study_1_快速入门

19 次访问 2021-07-07
Scroll Down

云原生定义

云原生的官方定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、微服务、不可变基础设施(容器镜像)、声明式API和服务网格等

服务网格Service Mesh

云原生技术使服务之间越发解耦,一个应用可以由数百个服务组成,每个服务可能有数千个实例,而每个实例可能会持续地发生变化。服务间通信不仅异常复杂,而且也是运行时行为的基础。管理好服务间通信对于保证端到端的性能和可靠性来说是非常重要的。而服务网格就是保证请求可以在这些拓扑中可靠地穿梭。服务网格通常是由一系列轻量级的网络代理组成,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。

服务网格以基础设施的方式提供了无侵入的连接控制、安全、可检测性、灰度发布等治理能力( 在云原生应用架构图中,每一个独立的服务就像是一个小格子一般,这也是我理解的为什么叫服务网格 )

service_mesh_concept.png

服务网格工作模式

如上图,服务网格其实就是在每个模块化的服务间插入一个代理(proxy/envoy),由这个代理(proxy/envoy)来完成转发、拦截服务之间的流量。服务网格控制面来完成指令策略的下发,起着中枢大脑的作用,指导着服务之间的代理(proxy/envoy)来完成特定的工作。

每一个数据面的服务代理(proxy/envoy)都会和控制面的组件保持一个gRPC的连接,通过这个连接,服务代理(proxy/envoy)可以上报监控信息,同时也可以用以接收控制面下发的配置信息。以此来对网格的整个流量来进行治理。

Istio成为服务网格标准
istio_quick_know_1.png

Istio功能特性
istio_quick_know_2.png

Connect

1、Istio首先提供了服务之间连通的基本功能,如图中将前端frontend、后端advertisement、数据库DB连接起来的能力

2、Istio可以控制流量的流向,比如图中控制80%的流量导入v1版本的advertisement,20%的流量导入v2版本的advertisement

3、当因为网络延迟等原因导致服务请求失败时可以重试一下,再比如当请求某个服务的流量达到一个峰值(比如一秒一千次)时,可以对流量进行熔断处理

Secure

服务之间连接使用mTLS进行连接

Observe

直观的看到哪些服务之间发生了调用,成功的请求次数是多少,失败的次数是多少,每次请求的时间是多少。以及服务之间的服务之间的调用日志,是get方法还是post方法等等都可以可视化的观测到

Control

通过策略下发可以控制哪些服务之间可以进行服务调用,哪些之间不可以进行服务调用。比如上图中的frontend可以访问advertisement,但是不可以直接访问DB。也就是说可以通过策略灵活的控制服务之间的访问

为了实现上述的四大功能,Istio就在每个服务处部署了一个proxy(proxy/envoy),由此代理(proxy/envoy)来完成对该服务的流量拦截与转发,如图中黄色箭头标注的方向,流入流出

Istio实现上述功能的几大组件,

第一个就是Ingress gateway,它是流量的统一入口。所有的流量会首先到达Ingress gateway,由Ingress gateway根据请求的一些信息将其转发给对应的服务

第二个就是Virtual Servie,一些策略都是配置在Virtual Servie中,它可以实现服务间的基本连通和故障注入、超时处理等功能

第三个就是Destination Rule,它其中定义了一些服务的集合,可以实现负载均衡的模式,设置mTLS、熔断等功能

控制层面组件:

控制层面Istiod主要由三个组件组成,Istiod作为一个Pod运行在集群中:

Galley:Istio的所有配置文件都是yaml格式的。有了这些yaml格式的配置文件,就需要将这些yaml文件解析为Istio所能理解的内容,这就是Galley的作用

Pilot:当Galley将yaml配置文件解析为Istio能理解的内容之后,由Pilot将配置下发给数据层面的proxy(proxy/envoy)组件,由proxy(proxy/envoy)来执行相应的策略

Citadel:主要负责安全层面的内容,比如认证、授权等

istio_quick_know_3.png

上图分别是Gateway、VitualService、DestinationRule的yaml资源清单

其中VitualService的资源清单定义了一些路由规则,它的gateways字段匹配到的是图中定义的gateway。VitualService资源清单的重点是在下边的规则http字段,表示当匹配到http 80端口的时候,将其转发到DestinationRule中名叫fronted服务的v1版本上。

通过上图中完整的Gateway、VirtualService、DestinationRule实现,从Gateway拦截进入的网络流量之后,会发向Fronted的v1版本
``

Istio 技术架构
istio_quick_know_4.png

数据层面的组件proxy在Istio中也被叫做Envoy,在Kubernetes集群中被部署为Sidecar( 也就是Pod中的辅助容器 )

控制层面Istiod的GalleyPilotCitadel三个组件作为一个Pod运行在集群中

Istio 功能特性
istio_quick_know_5.png


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK