点击蓝色“程序猿DD”关注我

回复“资源”获取独家整理的学习资料!

作者:米开朗基杨

来源:公众号「云原生实验室」

上篇文章介绍了 Contour 分布式架构的工作原理,顺便简单介绍了下 IngressRoute 的使用方式。本文将探讨 IngressRoute 更高级的用法,其中级联功能是重点。

1.

IngressRoute 大入门

上篇文章在 examples/example-workload 目录下创建了一个示例应用,我们来回顾一下它的 IngressRoute 配置:

  • virtualhost : 该字段是 root IngressRoute,表示此域的顶级入口点。

  • fqdn : 该字段指定了完整的域名,可以通过在 HTTP 请求头中指定 Host: 字段来访问该服务。

这是最简单是使用方法,看起来没什么特别的,我们来稍作修改一下:

将 match: / 改为 match: /test,然后重新应用新规则。这时如果你访问 url kuard.local/test 是不通的,因为 kuard 服务本身并没有 /test 这个路径,我们可以强制将路径重写为 /

重新 apply 之后,再次访问 url kuard.local/test 就通了。

这里可以和标准的 ingress 对象对比一下,IngressRoute 的优势在于它可以分别对每个路由设置 rewrite 规则,而 Nginx Ingress Controller 只能设置全局的 rewrite 规则,因为它用的是 annotations。虽然可以通过其他手段来实现,但相对来说会比较麻烦。

2.

级联功能介绍

下面我们来看看 IngressRoute 的级联功能,这是个非常有特色的功能,你可以通过级联多个路由规则,上层 IngressRoute 的配置被下层继承。例如,我们可以将 url 路径 / 的路由规则级联到其他的 IngressRoute 中,其他的 IngressRoute 可以来自不同的 namespace。

举个例子,我们可以先创建一个这样的 IngressRoute:

$ kubectl apply -f delegate-from-main.yaml$ kubectl get ingressroute delegate-from-main -o jsonpath='{.status.currentStatus}'
orphaned

该 IngressRoute 的状态为 orphaned,因为它没有包含一个合法的 fqdn。接下来需要创建一个 root IngressRoute 来和它进行级联:

这时如果再检查 IngressRoute delegate-from-main 的状态,就会发现它从 orphaned 状态变成了 valid 状态,kuard.local 也能够顺利访问。

了解了级联功能的用法之后,下面就来看看它的应用场景。

  • 场景一:可以使用级联功能来做蓝绿部署和灰度发布,只需要在上层 IngressRoute 中稍作修改,切换到另一个下层 IngressRoute,就可以切换流量的处理规则。

  • 场景二:管理员可以利用级联功能将部分 ingress 的权限放行到其他的 namespace 中,在这些 namespace 中,用户可以自由更新与 root IngressRoute 级联的相关的 IngressRoute。例如,如果管理员想防止其他用户配置非法的域名或路径,可以将该部分的配置权限放到 root IngressRoute 中,其他 namespace 中的下层 IngressRoute 中只能配置各自的路径相关信息。

接下来主要探讨场景一。

3.

蓝绿部署

蓝绿部署简单来讲就是在生产环境中有两套系统:一套是正在提供服务的系统,标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。

最初,没有任何系统,没有蓝绿之分。

然后,第一套系统开发完成,直接上线,这个过程只有一个系统,也没有蓝绿之分。

后来,开发了新版本,要用新版本替换线上的旧版本,在线上的系统之外,搭建了一个使用新版本代码的全新系统。 这时候,一共有两套系统在运行,正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。

蓝色系统不对外提供服务,用来做啥?

用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。(注意,两套系统没有耦合的时候才能百分百保证不干扰)

蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统:

切换后的一段时间内,依旧是蓝绿两套系统并存,但是用户访问的已经是蓝色系统。这段时间内观察蓝色系统(新系统)工作状态,如果出现问题,直接切换回绿色系统。

当确信对外提供服务的蓝色系统工作正常,不对外提供服务的绿色系统已经不再需要的时候,蓝色系统正式成为对外提供服务系统,成为新的绿色系统。 原先的绿色系统可以销毁,将资源释放出来,用于部署下一个蓝色系统。

通过 IngressRoute 的级联功能可以很方便地实现蓝绿部署策略,首先创建一个上层的 root IngressRoute(假设名为 root-blog),然后将域名 yangcs.net/blogs 的路由策略级联到下层的 IngressRoute(名为 blog)。我们会同时部署”蓝色“版本和”绿色“版本的应用,此时只有”绿色“版本接收流量。

在对蓝色版本进行测试验证之后,就可以将用户切换到蓝色应用了:

4.

金丝雀发布

金丝雀发布(Canary)也是一种发布策略,和国内常说的灰度发布是同一类策略。它和蓝绿有点像,但是它更加规避风险。你可以阶段性的进行,而不用一次性从蓝色版本切换到绿色版本。

采用金丝雀部署,你可以在生产环境的基础设施中小范围的部署新的应用代码。一旦应用签署发布,只有少数用户被路由到它,可以最大限度的降低影响。

如果没有错误发生,把剩余的 V1 版本全部升级为 V2 版本。如果有错误发生,则直接回退到老版本,发布失败。下图示范了金丝雀部署:

其实金丝雀发布的名称来源于一个典故。在 17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体特别敏感,空气中哪怕有极其微量的瓦斯,金丝雀也会停止唱歌。当瓦斯含量超过一定限度时,人类毫无察觉,但金丝雀却会毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为”瓦斯检测指标“,以便在危险情况下紧急撤离。映射到这里就是先发布一小部分来试探整体是否能够正常运行,如果能正常运行则进行完全部署的发布方式,目前仍然是不少成长型技术组织的主流发布方式。

IngressRoute 可以通过分配权重来实现金丝雀发布,和蓝绿部署一样,首先创建一个上层的 root IngressRoute(名为 root-blog),然后将域名 yangcs.net/blogs 的路由策略级联到下层的 IngressRoute(名为 blog)。在下层的 IngressRoute 中将流量按不同权重转发到不同的后端服务。

如果没有错误发生,就将 green 的权重调整为 100,blue 的权重调整为 0。至此就完成了金丝雀发布。

本文主要介绍了 IngressRoute 级联功能的用法,探讨了如何使用级联功能来实现蓝绿部署和金丝雀发布,后面的文章将会陆续探讨其他的流量治理功能,比如负载均衡策略。

推荐关注:云原生实验室

简介:由 servicemesher 社区联合经营者维护,作者是云原生技术爱好者,专注于 Kubernetes 与 Service Mesh 干货分享,著有史上最强 Kubernetes知识图谱,业界人称云原生社区的宝藏男孩。

留言交流不过瘾?添加微信:zyc_enjoy

根据指引加入各种主题讨论群

  • 阿里程序员推荐的15 款常用开发者工具

  • 一文学会Maven私服的搭建

  • 真实的上海IT圈:张江男vs漕河泾男

  • IntelliJ IDEA 2019 快捷键终极大全,速度收藏!

  • Java 程序员常用的 22 个Linux命令

点一点“阅读原文”小惊喜在等你

使用级联功能实现蓝绿部署和金丝雀发布相关推荐

  1. Contour 学习笔记(二):使用级联功能实现蓝绿部署和金丝雀发布

    上篇文章介绍了 Contour 分布式架构的工作原理,顺便简单介绍了下 IngressRoute 的使用方式.本文将探讨 IngressRoute 更高级的用法,其中级联功能是重点. 1. Ingre ...

  2. 蓝绿部署、金丝雀发布(灰度发布)、AB测试……

    点击关注公众号,Java干货及时送达 来源 | https://www.jianshu.com/p/0df88fe4a1e3 随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁:随着 ...

  3. 一文搞懂蓝绿部署和金丝雀发布

    在之前关于CI/CD的文章中,我们简单讨论了蓝绿部署和金丝雀发布以及它们在持续交付中所扮演的角色.这些都是十分有效的方法,能够大大降低与应用程序部署相关的风险.所以,这篇文章我们来深入介绍蓝绿部署和金 ...

  4. 科普:蓝绿部署、金丝雀发布(灰度发布)、A/B测试

    蓝绿部署(Blue-green Deployments) 蓝绿部署的目的是减少发布时的中断时间.能够快速撤回发布. It's basically a technique for releasing y ...

  5. 蓝绿部署、金丝雀发布(灰度发布)、A/B测试的准确定义

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018/10/23 14:02:00 说明 蓝绿部署 金丝雀发布 A/B测试 参考 说明 蓝绿部署.A/B测试.金丝雀发布,以及灰度发布.流量 ...

  6. 【项目实战】正确辨析蓝绿部署、金丝雀发布(灰度发布)、滚动发布、A/B测试

    一.背景 蓝绿部署.A/B测试.金丝雀发布,以及灰度发布.流量切分等,经常被混为一谈,影响沟通效率. 根本原因是这些名词经常出现,人们耳熟能详能够熟练地谈起,对这些术语的理解却没有达成一致. 下面是从 ...

  7. kubernetes基于nginx-ingress进行蓝绿部署、金丝雀发布(canary)

    kubernetes基于nginx-ingress进行蓝绿部署.金丝雀发布(canary) 用户通过负载均衡器访问v1版本,关掉v1版本,接触到v2版本. 在关闭版本a部署版本b,此技术意味着服务的停 ...

  8. 实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布

    1 前言 本文主要实战演示k8s部署go服务,实现滚动更新.重新创建.蓝绿部署.金丝雀发布 2 go服务镜像准备 2.1 初始化项目 cd /Users/flying/Dev/Go/go-lesson ...

  9. 万字长文带你全面认识 Kubernetes 中如何实现蓝绿部署、金丝雀发布和滚动更新...

    Kubernetes 中的部署策略 在本文中,我们将学习使用 Kubernetes 容器编排系统部署容器时的部署策略.在本文的最后,我们将学习如何在 Kubernetes 集群中使用不同的方式进行部署 ...

最新文章

  1. 近期活动盘点:数据化思维困局和0.01突破讲座、极简大数据决策,培养数据化思维讲座...
  2. linux之vsftpd虚拟用户搭建
  3. python套接字socket的作用_【学习笔记】python实现的套接字socket
  4. 对话中国经济和信息化-万祥军:李玉庭制造企业重整电商
  5. [MAC] Mac OS X下快速复制文件路径的方法
  6. ps3无线无法与服务器通信,psp上网出现无法与服务器通信(8001006F)
  7. 计算机审计的概念的论文,论文:浅谈计算机审计中的数据分析
  8. 3月4日见!Redmi Note 10系列屏幕升级:首次采用Super AMOLED屏
  9. python之UnittTest模块
  10. string类有可以调换方向的函数吗_关于String类的split()方法
  11. python画超长图-Python 拼接多张尺寸大小不一样的图片制作长图
  12. Jboss的下载和安装
  13. 修正读取ISO中文命名的FatmsMod补丁第二版下载发布
  14. MFC CImage透明图片显示
  15. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
  16. qpython2_QPython
  17. 用两个栈实现最小栈的功能
  18. 如何减少开发中的 Bug
  19. 计算机机房必须用七氟丙烷灭火器吗,释放七氟丙烷气体会不会使人窒息?
  20. 数据分析的统计基础(下)

热门文章

  1. solidity智能合约开发简介
  2. python3 sys.stdout.write 实时打印刷新
  3. 什么是CPython
  4. linux centos7 docker 安装 oracle
  5. delete指针之后应该赋值NULL
  6. Linux C编程--线程操作2--线程同步详解
  7. Google怎么用linux
  8. imp 只导表前10条数据_做电商设计,你必须懂的10条数据指标
  9. mysql load settings_Mysql high performance: Memory setting
  10. 注解开发不方便_注解(上)