基于 Istio 与 Kubernetes 对应用进行灰度发布与 Tracing
灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式。通俗来说,即让产品的迭代能够按照不同的灰度策略对新版本进行线上环境的测试,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以对新版本进行测试、发现和调整问题,以保证其影响度。KubeSphere 基于 Istio 提供了蓝绿部署、金丝雀发布、流量镜像等三种灰度策略,无需修改应用的服务代码,即可实现灰度、流量治理、Tracing、流量监控、调用链等服务治理功能。
目的
本示例在 KubeSphere 容器平台中使用 Istio 官方提供的 Bookinfo 示例,创建一个微服务应用并对其中的服务组件进行灰度发布,演示 KubeSphere 服务治理的能力。
Bookinfo 微服务应用架构
Bookinfo 应用分为四个单独的微服务:
- productpage :productpage 微服务会调用 details 和 reviews 两个微服务,用来生成页面。
- details :这个微服务包含了书籍的信息。
- reviews :这个微服务包含了书籍相关的评论,它还会调用 ratings 微服务。
- ratings :ratings 微服务中包含了由书籍评价组成的评级信息。
reviews 微服务有 3 个版本:
- v1 版本不会调用 ratings 服务,因此在界面不会显示星形图标。
- v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
- v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
下图展示了这个应用的端到端架构。

(Bookinfo 架构图与示例说明参考自 https://istio.io/docs/examples/bookinfo/)
预估时间
约 20 ~ 30 分钟。
前提条件
- 开启了 Service Mesh 的安装
- 已创建了企业空间、项目和普通用户
project-regular账号,且已邀请project-regular加入项目并授予operator角色 - 需在当前项目下选择 「项目设置」→「高级设置」→「设置网关」,点击「应用治理」的开启按钮。
操作示例
创建自制应用
- 使用项目普通用户
project-regular账号进入项目 demo-project 后,选择应用负载→应用,点击 「部署示例应用」。

在弹窗中,点击 「确定」 部署 bookinfo 示例应用。
确认应用工作负载的所有部署状态显示
运行中,则说明 bookinfo 微服务创建成功(约 2 分钟)。

访问 Bookinfo 应用
- 点击 bookinfo 进入应用详情页,可以看到应用路由下自动生成的 hostname。

由于外网访问启用的是 NodePort 的方式,NodePort 会在主机上开放 http 端口,要访问 bookinfo 应用需要将该端口进行转发并在防火墙添加下行规则,确保流量能够通过该端口。
在本地打开
/etc/hosts文件,为 hostname 添加一条记录,例如:
#{公网 IP} {hostname}
139.198.111.111 productpage.demo-project.192.168.0.8.nip.io
- 完成上述步骤后,在应用路由下选择 「点击访问」,可以看到 bookinfo 的 details 页面。

- 点击 Normal user 访问 productpage。注意此时 Book Reviews 部分只显示了 Reviewer1 和 Reviewer2。

添加灰度发布
- 回到 KubeSphere,选择 「灰度发布」,点击 「发布灰度任务」。

- 在跳转的灰度发布页面,选择 「金丝雀发布」 作为灰度策略,点击 「发布任务」。

在弹窗中,填写发布任务名称为
bookinfo-carary,点击 「下一步」。点击
reviews一栏的 「选择」,即选择对应用组件reviews进行灰度发布,点击 「下一步」。参考如下填写灰度版本信息,完成后点击 「下一步」。
- 灰度版本号:v2;
- 镜像:istio/examples-bookinfo-reviews-v2:1.10.1 (将 v1 改为 v2)。
- 金丝雀发布允许按流量比例下发与按请求内容下发等两种发布策略,来控制用户对新老版本的请求规则。本示例选择 按流量比例下发,流量比例选择 v1 与 v2 各占 50 %,点击 「创建」。

验证金丝雀发布
再次访问 Bookinfo 网站,重复刷新浏览器后,可以看到 bookinfo 的 reviews 模块在 v1 和 v2 模块按 50% 概率随机切换。
查看流量拓扑图
打开命令行窗口输入以下命令,引入真实的访问流量,模拟对 bookinfo 应用每 0.5 秒访问一次。注意以下命令是模拟 Normal user 访问,需要输入完整的命令访问到具体的服务在链路图中才有流量数据。
$ watch -n 0.5 "curl http://productpage.demo-project.139.198.111.111.nip.io:31680/productpage?u=normal"
从流量治理的链路图中,可以看到各个微服务之间的服务调用和依赖、健康状况、性能等情况。
提示:点击其中一个应用组件,还可以为该服务组件设置流量治理策略,如连接池管理、熔断器等。

查看流量监测
点击 reviews 服务,查看该服务的实时流量监测,包括每秒请求的流量 (RPS)、成功率、持续时间等指标,这类指标都可以分析该服务的健康状况和请求成功率。

查看 Tracing
如果在链路图中发现了服务的流量监测异常,还可以在 Tracing 中追踪一个端到端调用经过了哪些服务,以及各个服务花费的时间等详细信息,支持进一步查看相关的 Header 信息,每个调用链由多个 Span 组成。
界面上可以清晰的看到某个请求的所有阶段和内部调用,以及每个阶段所耗费的时间。

展开某个阶段,还能下钻看到这个阶段是在哪台机器(或容器)上执行的。

接管全部流量
当新版本 v2 灰度发布后,发布者可以对线上的新版本进行测试和收集用户反馈。如果测试后确定新版本没有问题,希望将流量完全切换到新版本,则进入灰度发布页面进行流量接管。
- 点击 「灰度发布」,进入 bookinfo 的灰度发布详情页,点击 ··· 选择 「接管所有流量」,正常情况下所有流量将会指向 v2。
提示:此时 v1 也将保持在线,若 v2 上线后发现问题,允许发布者随时将新版本 v2 的流量切回 v1。

- 再次打开 bookinfo 页面,多次刷新后 reviews 模块也仅仅只显示 v2 版本。

下线旧版本
当新版本 v2 上线接管所有流量后,并且测试和线上用户反馈都确认无误,即可下线旧版本,释放资源 v1 的资源。下线应用组件的特定版本,会同时将关联的工作负载和 istio 相关配置资源等全部删除。

至此,Bookinfo 微服务以金丝雀发布作为发布策略,演示了灰度发布的基本功能。
KubeSphere (https://github.com/kubesphere/kubesphere) 是一个开源的以应用为中心的容器管理平台,支持部署在任何基础设施之上,并提供简单易用的 UI,极大减轻日常开发、测试、运维的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点,帮助企业轻松应对敏捷开发与自动化监控运维、端到端应用交付、微服务治理、多租户管理、多集群管理、服务与网络管理、镜像仓库、AI 平台、边缘计算等业务场景。
基于 Istio 与 Kubernetes 对应用进行灰度发布与 Tracing的更多相关文章
- Kubernetes 使用 Ingress 实现灰度发布功能
使用 Ingress 实现灰度发布 一.Canary 规则说明 Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发 ...
- Istio 太复杂?KubeSphere基于Ingress-Nginx实现灰度发布
在 Bookinfo 微服务的灰度发布示例 中,KubeSphere 基于 Istio 对 Bookinfo 微服务示例应用实现了灰度发布.有用户表示自己的项目还没有上 Istio,要如何实现灰度发布 ...
- 干货分享|使用 Istio 实现灰度发布
Kubernetes 作为基础平台,提供了强大的容器编排能力.但是在其上部署业务和服务治理上,仍然会面对一些复杂性和局限性.在服务治理上,已经有许多成熟的 ServiceMesh 框架用于扩充其能力, ...
- 如何用istio实现应用的灰度发布
Istio为用户提供基于微服务的流量治理能力.Istio允许用户按照标准制定一套流量分发规则,并且无侵入的下发到实例中,平滑稳定的实现灰度发布功能. 基于华为云的Istio服务网格技术,使得灰度发布全 ...
- idou老师教你学Istio 18 : 如何用istio实现应用的灰度发布
Istio为用户提供基于微服务的流量治理能力.Istio允许用户按照标准制定一套流量分发规则,并且无侵入的下发到实例中,平滑稳定的实现灰度发布功能. 基于华为云的Istio服务网格技术,使得灰度发布全 ...
- K8S基于ingress-nginx实现灰度发布
之前介绍过使用ambassador实现灰度发布,今天介绍如何使用ingre-nginx实现. 介绍 Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annota ...
- 《前端运维》五、k8s--3灰度发布、滚动更新与探针
一.灰度发布 灰度发布是一种发布方式,也叫金丝雀发布,起源是矿工在下井之前会先放一只金丝雀到井里,如果金丝雀不叫了,就代表瓦斯浓度高.原因是金丝雀对瓦斯气体很敏感.灰度发布的做法是:会在现存旧应用的基 ...
- 基于 Istio 的全链路灰度方案探索和实践
作者|曾宇星(宇曾) 审核&校对:曾宇星(宇曾) 编辑&排版:雯燕 背景 微服务软件架构下,业务新功能上线前搭建完整的一套测试系统进行验证是相当费人费时的事,随着所拆分出微服务数量的不 ...
- Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布
Istio是什么? Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司.它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管 ...
随机推荐
- 【题解】NOIP2016 提高组 简要题解
[题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...
- 斜率优化入门题题单$QwQ$
其实就是这一篇的那个例题帕的大部分题目的题解就写这儿辣,,, 因为都是些基础题不想专门给写题解,,,但是又掌握得差不得不写,,, 麻油办法就写一块儿好辣$QwQ$ 当然辣比较难的我就没放进来辣$QwQ ...
- IntelliJ IDEA的常用设置及快捷键
IntelliJ IDEA的常用设置及快捷键 基本设置 打开设置:ctrl+alt+s 修改主题.字体.字号 快捷键设置 创建项目和模块 标记源码文件 标记资源文件 设置jdk版本号 配置Tomcat ...
- SpringBoot-2.1.1系列一:使用https
1.什么是https? HTTPS中文名称:超文本传输安全协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要 ...
- ipaclient 4.5.4 requires jinja2, which is not installed. rtslib-fb 2.1.63 has requirement pyudev>=0.16.1, but you'll have pyudev 0.15 which is incompatible. ipapython 4.5.4 has requirement dnspython>=
- JavaScript 继承小记
面向对象编程很重要的一个方面,就是对象的继承.A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 大部分面向对象的编程语言,都是通过“类”(class) ...
- Java 从入门到进阶之路(二十二)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...
- Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...
- idea 2019.3 最新版破解教程
背景 最近,idea又被整治了,所以一大批激活码都失效了.我之前已经有2018版的永久激活了,所以非常淡定~,也没打算升级版本.但是,最近发现周围的人都在讨论这个问题.于是,我也找到了2019.3最新 ...
- Web测试中定位bug的方法
在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,没错,确实是BUG.进一步了解这个BUG的问题出在那里,是测试人员需要掌握的,可以简单的使用浏览器自带开发者工具 ...