Istio,灰度发布从未如此轻松!!!

简介: 今天起,聊聊Istio的流控,典型如灰度发布。

三个问题,回顾前情提要。

ServiceMesh解决什么问题?

image.png

SM本质是业务服务与底层技术体系的解耦:

  • 一个进程实现业务逻辑(不管是调用方,还是服务提供方),biz,即上图白色方块
  • 一个进程实现底层技术体系,proxy,即上图蓝色方块

画外音:负载均衡、监控告警、服务发现与治理、调用链…等诸多基础设施,都放到这一层实现。

什么是Istio?

Istio是ServiceMesh的产品化落地。

Istio的分层架构设计如何?
image.png

Istio采用实施与控制分离的数据平面与控制平面两层架构。

数据平面

  • envoy(proxy):负责高效转发与策略落地[核心]

控制平面

  • mixer:适配组件,数据平面与控制平面通过它交互
  • pilot:策略配置组件[核心]
  • citadel:安全组件
  • galley:底层平台(例如:K8S)解耦组件

整个架构的核心是envoy与pilot。

今天起,聊聊Istio的流控,典型如灰度发布。

就如同ServiceMesh的设计初衷,是技术体系与业务服务解耦一样,Istio流控模型的本质,是流量控制与服务实例扩展的解耦,更具体的:

用户只需要通过控制平面中的Pilot设定期望流量要以什么规则进行路由

不需要规定服务实例(service pods)如何接收

数据平面Envoy将从Pilot中获取规则和命令,然后落地各类分流策略

image.png

如上图所示,最开始时,ServiceA访问旧版的ServiceB。

画外音,业务与底层解耦:

(1)灰色圆形为业务Svc服务;

(2)紫色六边形为Envoy代理;

(3)服务与代理之间都是本地访问;

(4)跨网段之间都是Envoy代理交互(蓝色箭头);

如何进行灰度发布呢?

image.png

如上图所示,服务A调用服务B,服务B要发布一个灰度版本,需要5%的流量打到服务B的新版本,只需要:

(1)部署服务B的新版本;

(2)控制平面Pilot上进行策略配置,策略同步到Envoy;

(3)数据平面Envoy接收到策略配置,实时分流策略;

画外音:图形上没有画出Pilot和Envoy的交互。

搞定,这个过程业务服务与流量控制策略完全解耦,完美!

除了基于按流量比例分流的灰度发布,基于应用层的灰度发布通过Istio也非常容易实现。

image.png

如上图所示,服务B要发布一个灰度版本,需要把iPhone的流量打到B的新版本,操作流程完全一样(部署服务,Pilot控制,Envoy实施),非常方便。

如果Envoy原来只支持按照流量比例分流,不支持基于应用层协议分流,此时只需要:

(1)升级Envoy的分流策略,以及策略控制端Pilot;

(2)调用方服务A不需要升级;

(3)服务方服务B也不需要升级;

业务与底层基础设施完全解耦,完美!

画外音:这是Service Mesh的核心理念之一,详见《ServiceMesh究竟解决什么问题》。

如果是用传统微服务框架的方式,需要框架升级,调用方与服务方均需要配合升级与重启。

最近下班都比较晚,今天先写到这里。Pilot的分层架构如何,它又是如何与Envoy配合实现流控的,且听下回分解。

思路比结论重要。

image.png

架构师之路-分享技术思路

目录
相关文章
|
监控 安全 Perl
Istio 升级新方式:金丝雀升级
Istio 1.6 推出了渐进式的升级方式:金丝雀升级,为相对头疼的 Istio 升级问题提供了一种解决方案。
855 0
|
6月前
|
Kubernetes 测试技术 微服务
Kruise Rollout 全链路灰度实践
OpenKruise 是一个基于 Kubernetes 的扩展套件,主要聚焦于云原生应用的自动化,比如部署、发布、运维以及可用性防护。本文介绍通过 OpenKruise 构建自动化运维的方式实现基于 Istio 的全链路灰度功能。
|
7月前
|
弹性计算 Kubernetes 测试技术
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
245 0
|
Prometheus Kubernetes 负载均衡
Kruise Rollout v0.3.0:教你玩转 Deployment 分批发布和流量灰度
Kruise Rollout v0.3.0:教你玩转 Deployment 分批发布和流量灰度
Kruise Rollout v0.3.0:教你玩转 Deployment 分批发布和流量灰度
|
设计模式 Kubernetes Cloud Native
干货分享|使用 Istio 实现灰度发布
Kubernetes 作为基础平台,提供了强大的容器编排能力。但是在其上部署业务和服务治理上,仍然会面对一些复杂性和局限性。在服务治理上,已经有许多成熟的 ServiceMesh 框架用于扩充其能力,如 Istio、Linkerd、Dapr 等。本文将主要介绍如何使用 Istio 扩充 Kubernetes 灰度发布的能力。
|
Kubernetes 负载均衡 监控
Kubernetes 实现灰度和蓝绿发布
Kubernetes 实现灰度和蓝绿发布
1084 1
|
运维 Kubernetes 负载均衡
kubernetes 灰度发布
kubernetes 灰度发布
443 1
|
微服务
自从用了 Kiali 以后才知道,配置 Istio 的 流量管理 是如此容易
在生产环境中,直接登录服务器是非常不方便的,我们可以使用Kiali配置Istio的流量管理。
317 0
自从用了 Kiali 以后才知道,配置 Istio 的 流量管理 是如此容易
|
Prometheus Kubernetes 监控
Linkerd 金丝雀部署与 A/B 测试
Linkerd 金丝雀部署与 A/B 测试
164 0
Linkerd 金丝雀部署与 A/B 测试
|
域名解析 负载均衡 应用服务中间件
使用 Ingress 实现金丝雀发布
Service 是基于四层协议来实现的路由转发,常用于 NodePort 方式来对外提供服务,但是 当我们的业务模块较多时,使用 NodePort 的方式便不利于管理。 所以,我们可以使用 Ingress Controller 来通过匹配 URL 的方式实现 HTTP/HTTPS 代理。
508 0
使用 Ingress 实现金丝雀发布