查看原文
其他

Istio控制平面故障后会发生什么?

Jonh Wendell 几米宋 2022-09-07

作者:Jonh Wendell 译者:李守超 校对:杨传胜 原文:https://bani.com.br/2018/11/istio-what-happens-when-control-plane-is-down

大家好!我在Istio上做了一些实验,禁用控制平面的组件,并观察应用和服务网格会发生什么。下面是我的笔记。

Pilot

Pilot负责Istio的流量控制特性,同时将Sidecar更新至最新的网格配置。

Pilot启动以后,监听端口 15010 (gRPC)和 8080 (HTTP)。

当应用的Sidecar(Envoy,Istio-Proxy)启动以后,它将会连接 pilot.istio-system:15010 ,获取初始配置,并保持长连接。

Pilot会监听Kubernetes资源,只要检测到网格发生变化,就会将最新的配置通过gRPC连接推送到Sidecar上。

  • 当Pilot停止以后,Pilot和Sidecar之间的gRPC连接被关闭,同时Sidecar会一直尝试重连。

  • 网络流量不会受到Pilot停止的影响,因为所有的配置被推送过来以后,就会存储在Sidecar的内存中。

  • 网格中新的变更信息(例如新的Pod、规则、服务等等)不会继续到达Sidecar,因为Pilot不再监听这些变化并转发。

  • 当Pilot重新上线以后,Sidecar就会重新建立连接(一直尝试重连)并获取到最新的网格配置。

Mixer Policy

Policy执行网络策略。

Mixer在启动时读取配置,并监听Kubernetes的资源变化。一旦检测到新的配置,Mixer就会将其加载至内存中。

Sidecar在每次请求服务应用时,检查(发起连接)Mixer Policy Pod。

当Mixer Policy Pod停止以后,所有到服务的请求会失败,并收到 “503 UNAVAILABLE:no healthy upstream” 的错误——因为所有 sidecar 无法连接到这些Pod。

在Istio 1.1版本中新增了[global]配置( policyCheckfailOpen ),允许 “失败打开” 策略,也即当Mixer Policy Pod无法响应时,所有的请求会成功,而不是报 503 错误。默认情况下该配置设置为 false ,也即 “失败关闭”

当Mixer停止后,我们在网格中执行的操作(例如新增规则、更新配置等等)都不会对应用产生影响,直到Mixer重新启动。

Mixer Telemetry

Telemetry为Istio插件提供遥测信息。

Sidecar什么时候调用Telemetry Pod取决于两个因素:批量完成100次请求和请求时间超过1秒钟(默认配置),这两个条件只要有一个先满足就会执行该操作,这是为了避免对Telemetry Pod造成过于频繁的调用。

当Telemetry Pod停止以后,Sidecar记录一次失败信息(在Pod标准错误输出里),并丢弃遥测信息。请求不会受到影响,正如Policy Pod停止时一样。当Telemetry Pod重新启动以后,就会继续从Sidecar收到遥测信息。

其它信息

值得注意的是,Istio允许自定义控制平面的组件。例如,如果不需要Policy,你可以完全禁用Mixer Policy。Istio 1.1对这种模块化的特性支持的更好。更多信息,可以参考这篇文档。

当然,Pilot、Mixer Policy和Mixer Telemetry在高可用部署场景工作的也很好,可以同时运行多副本。实际上,默认配置通过 HorizontalPodAutoscaler 允许启动1到5个Pod。(详细请参考这篇文档和这篇文档)

相关阅读推荐

Istio免费直播课程推荐

本课程来自 IBM 微课程,通过视频直播的方式帮助您快速了解 Istio,每周一期。

  • 11月1日 Istio初探

  • 11月8日 Istio上手

  • 11月15日 Istio的安全管理

  • 11月22日 Envoy

  • 11月29日 使用Istio来监控和可视化微服务

  • 12月6日 Istio mixer - 基本概念,策略、遥测与扩展

  • 12月13日 Istio跨云管理方案解析

  • 12月20日 Istio使用案例:Serverless 平台knative

  • 详情请参考:IBM微讲堂之年度大戏《Istio系列》

点击【阅读原文】跳转到ServiceMesher网站上浏览可以查看文中的链接。

  • SOFAMesh(https://github.com/alipay/sofa-mesh)基于Istio的大规模服务网格解决方案

  • SOFAMosn(https://github.com/alipay/sofa-mosn)使用Go语言开发的高性能Sidecar代理

合作社区

参与社区

以下是参与ServiceMesher社区的方式,最简单的方式是联系我!

  • 加入微信交流群:关注本微信公众号后访问主页右下角有获取联系方式按钮,添加好友时请注明姓名-公司

  • 社区网址:http://www.servicemesher.com

  • Slack:https://servicemesher.slack.com (需要邀请才能加入)

  • GitHub:https://github.com/servicemesher

  • Istio中文文档进度追踪:https://github.com/servicemesher/istio-official-translation

  • Twitter: https://twitter.com/servicemesher

  • 提供文章线索与投稿:https://github.com/servicemesher/trans


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存