istio
1.1 什么是istio?有什么用?
1 | istio:之前业务出错我们需要重试,后来出了断路器等组件,但是是冗余到业务系统代码里的,istio就是要将这些断路器、重试、鉴权等东西抽离出来下沉成单独服务,让业务系统不在关心。也就是说在create pod的时候被人拦截下来,然后在pod里部署一个sidecar的容器,这步骤是无需业务代码感知的,是自动的。业务只需要关心业务就行,这些重试鉴权等东西自动沉淀下去。 |
1.2 istio的两大组件是什么
1 | 数据平面:由一组代理组成,这些代理微服务所有网络通信,并接收和实施来自Mixer的策略。 |
1.3 说说istio的注入?
1 | 将原来的pod停止,在新启动两个pod:原pod+istio proxy,准确的说启动三个pod,还有一个是istio-init,这个pod负责搭建网络环境,搭建完就消亡了,所以他是雷锋,铺好通信的道路就走了,所以到最后就两个pod,一个原来的pod,还一个是istio proxy代理。这些过程全自动。 |
1.4 istio 有4 个配置资源
1 | istio 有 4 个配置资源,落地所有流量管理需求: |
1.5 istio概述 Service Mesh
1 | 通常serviceA去调用serviceB,是走的service名,然后通过dns解析cluster ip,再通过iptable和ipvs的规则转到serviceB,可以理解为直连。 |
1 | Service Mesh 的中文译为 “服务网格” ,是一个用于处理服务和服务之间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求,并为服务通信实现了微服务所需的基本组件功能,例如服务发现、负载均衡、监控、流量管理、访问控制等。在实践中,服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。 |
1.6 服务网关 gateway
1 | Gateway为网格内服务提供负载均衡器,提供以下功能: |
1.7 Istio 实现灰度发布
1 | 主流发布方案: |
1.7.1 蓝绿发布
1 | 项目逻辑上分为AB组,在项目升级时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。A组升级完成上线,B组从负载均衡中摘除。 |
1.7.2 滚动发布
1 | 每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版升级新版本。Kubernetes的默认发布策略。 |
1.7.3 灰度发布(金丝雀发布)
1 | 只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没有什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。 |
1.7.4 灰度发布(A/B Test)
1 | 灰度发布的一种方式,主要对特定用户采样后,对收集到的反馈数据做相关对比,然后根据比对结果作出决策。用来测试应用功能表现的方法,侧重应用的可用性,受欢迎程度等,最后决定是否升级。 |
1.8 可视化监控
1 | grafana: |
1.9 一个项目使用istio做灰度发布:
1 | 1、使用deployment部署这项目,并增加一个独立用于区分版本的标签:version: v1 |
1.10 接入了istio后,mycaller服务请求myresponser服务时,http接口可以通,grpc服务不通
1 | 分析: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 悩姜!