服务网格自动故障检测及流量切换方案

本文分享自天翼云开发者社区《服务网格自动故障检测及流量切换方案》,作者:s****n

随着云原生技术的发展,越来越多的应用采用容器,微服务技术,以istio为代表的服务网格就是其中最广泛使用的一种。它在业务容器创建时,自动向业务服务的pod中注入proxy容器边车,将流入和流出业务容器的网络流量全部劫持到proxy容器,经由proxy容器处理后再进行下一步转发。

Proxy容器的处理规则通过istiod控制面下发,主要分为流量控制、安全、可观测性三大类。以可观测性为例的大量规则都仅对流经的数据进行统计,监控,链路追踪等附加操作,不影响和改变业务本身的请求。但是当proxy容器自身或其依赖的服务出现问题时,因其流量劫持动作,往往会造成整个服务不可用。

目前处理此类问题的方法,以人工干预为主,当服务不可用时,通过告警通知运维人员,运维人员进行现场问题定位及处理。在有proxy边车的场景下,若proxy问题不能快速解决,运维人员也经常需要手动去除proxy容器边车,先恢复业务流量再做细致排查。如果能自动化检测proxy故障并进行及时处理,会大大提供微服务框架下的服务可用性,减少故障带来的损失及人力排查成本

实现方案如下:   整体结构: 

image

具体方法: 1.在istio控制面加入故障检测及流量阻断模块‘hot-switch’.

2.在istio的边车代理proxy内部加入故障检测命令,并与控制面故障检查模块通信,具体检测命令例如: a.Watch相关pod的proxy容器状态,当容器状态为fail时,表示proxy容易已经不再存活; b.通过检查proxy容器的15021 health端口,若返回值false,则proxy存活但不健康等等;

3.自动检测确认代理proxy问题后,hot-switch通过进入pod执行iptables相关命令,停止proxy的流量劫持,将流量模式由proxy控制管理,改为直通业务容器 a.在pod启动前,proxy进行流量劫持的过程:首先运行 Init 容器,Init 容器用于设置 iptables 将进入 pod 的流量劫持到 Envoy sidecar proxy。 具体命令类似 :Istio-iptables -p 15001 -z 15006 -u 1337 -m REDIRECT -i '*' -x "" -b * -d "15090,15201,15020" envoy sidecar proxy 启动之后从pilot获得动态的规则,来对进出流量进行控制,流量劫持后的链路如下

image   b.检测确认proxy问题后,通过iptables的反向命令,清除流量劫持规则,可用命令为 istio-clean-iptables

该方案无需人工参与,可自动检测问题,快速处理,在网格边车出现故障的时候也能通过一定程度的服务降级,最大程度保障服务的基本可用性

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

KubeCon 2021|使用 eBPF 代替 iptables 优化服务网格数据面性能

作者刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模Kubernetes集群管理及微服务治理经验,现负责腾讯云服务网格TCM数据面产品架构设计和研发工作。引言目前以Istioiptables实现流量劫持首先看一下当前社区使用的基于iptables的流量劫持方案,下图是一个Pod的创建过程,sidecarinjector会向

大规模服务网格性能优化 | Aeraki xDS 按需加载

作者钟华,腾讯云专家工程师,Istioprojectmember、contributor,专注于容器和服务网格,在容器化和服务网格生产落地方面具有丰富经验,目前负责TencentCloudMesh研发工作。Istio在大规模场景下xDS性能瓶颈xDS是istio控制面和数据面envoy之间的通信协议,x表示包含多种协议的集合,

Istio Sidecar注入原理

概念简单来说,Sidecar注入会将额外容器的配置添加到Pod模板中。这里特指将Envoy容器注应用所在Pod中。Istio服务网格目前所需的容器有:istioinit用于设置iptables规则,以便将入站/出站流量通过Sidecar代理。初始化容器与应用程序容器在以下方面有所不同:

1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))

容器化部署一套云服务系列1\.容器化部署一套云服务之Jenkins(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fjackson0714%2Fp%2Fdeploy1.html)一、购买服务器服务器!caeef00

Kubernetes 现终于成熟了,不在是大厂的标配

过去几年,以Docker、Kubernetes为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和K8S项目作为技术重心,试图“放长线钓大鱼”。就说阿里吧,目前基本所有业务都跑在云上,其中有一半已迁移到自己定制Kubernetes集群上。据说,今年计划完成100%基于K8S集群的业务部署。而服务网格这块