Envoy原理介绍及线上问题踩坑
张伟 华为云容器网格数据面技术专家 拥有10年以上中间件及高性能系统开发经验, 作为架构师及核心开发人员发布过传输网管系 统、Tuxedo交易中间件、ts-server多媒体转码服 务、GTS高性能事务云服务、SC高性能注册中心、 ASM数据面等多个产品。先后就职于亿阳信通、 北电、甲骨文、polycom、阿里巴巴等公司;目 前在华为云云原生团队负责网格数据面的架构 设计及开发工作。 • Envoy采用C++实现,本身为四层及七层代理,可以根据用户应用请求内的数据进行高级服务治理 能力,包括服务发现、路由、高级负载均衡、动态配置、链路安全及证书更新、目标健康检查、 完整的可观测性等。 • 目前常见数据面主要有三种:Envoy、Linkerd、Traefic。Envoy由于高性能和扩展能力前在数据面遥 遥领先。 • Iptables使Pod间出入应用的流量均由Envoy 规则 ./etc/istio/proxy/SDS 证书 获取 配置 文件 可以修改全局注入参数 作用于所有目标空间的 pod 证书更新 Envoy启动流程 Envoy控制面流量 Envoy数据面流量 ./etc/istio/proxy/XDS SDS xDS CSR Prometheus configmaps Copyright © Huawei Technologies Co0 码力 | 30 页 | 2.67 MB | 1 年前3SolarMesh 基于Istio构建的流量监管平台
应用场景 Copyright © 2021 Cloud To Go 为什么我们需要服务网格 - 微服务化带来的问题 错综复杂的服务调度掩盖了 问题的源头 服务间交互的复杂性: Ø 难以可视化 Ø 难以全面测试 Ø 多服务联动时问题难以察觉 Ø ... 服务间通信的复杂性: Ø 网络延迟 Ø 消息序列化 Ø 不可靠的网络 Ø 异步机制 Ø ... 开发难 排错难 测试难 帮助企业在纷繁复杂的微服务调度中快速定位问题, 增强研发效率。 让服务网格不再难学难用,让服务网格在企业落地 更加平滑、安全、稳定。 Copyright © 2021 Cloud To Go 应用场景 - 云上应用故障的可视化排查 传统的故障定位方式 使用solarmesh的故障定位方式 1. 发现页面报错 2. F12看接口 3. 从网关开始,顺着调用链看日志 4. 日志没报错,下一个 5. 循环 4 6. 直到找到故障位置 应用场景 - 灰度版本迁移 传统的版本升级方式 使用solarmesh的版本升级方式 1. 打好部署包 2. 等到半夜 3. 部署一个机器 4. 使用模拟的测试数据测试 1. 打好部署包即可部署 2. 用真实的数据测试 3. 挑个良辰吉日分配流量,宣布更新 Copyright © 2021 Cloud To Go 应用场景 - 异地容灾 通过智能路由实现异地容灾 在SolarMesh中,只需要声明哪些0 码力 | 20 页 | 1.29 MB | 1 年前3IstioMeetupChina 服务网格热升级技术分享
IstioMeetup 服务网格数据平面热升级技术分享 ServiceMesh Data-Plane Hot-Upgrade 阿里云服务网格团队 – 史泽寰 • 为什么需要服务网格数据面热升级 • 实现热升级 • 实践热升级 目录 Catalog 2 为什么需要服务网格数据面热升级 Why do we need Hot-Upgrade for ServiceMesh Data-Plane 传统Sidecar升级方式的缺点 3 为什么需要服务网格数据面热升级 Why do we need Hot-Upgrade for ServiceMesh Data-Plane • 只替换/重启Sidecar • 替换/重启过程中进/出不会出现请求失败,连接失败 • 易于运维,可以控制升级策略 理想的Sidecar升级 4 • 为什么需要服务网格数据面热升级 • 实现热升级 • 实践热升级 新Envoy进程与老Envoy交互,开始进行热重启流程 • 最大排水时间到达,SidecarSet Controller将老Container替换为Empty镜像 • 热升级结束 10 • 为什么需要服务网格数据面热升级 • 实现热升级 • 实践热升级 目录 Catalog 11 实践热升级 Practice ASM Hot-Upgrade 现在,让我们打开阿里云服务网格进行一次热升级吧! Now0 码力 | 14 页 | 2.25 MB | 1 年前313 Istio 流量管理原理与协议扩展 赵化冰
流量控制:服务发现、请求路由、负载均衡、灰度发布、错误重试、 断路器、故障注入 可观察性:遥测数据、调用跟踪、服务拓扑 通信安全: 服务身份认证、访问鉴权、通信加密 Proxy Application Layer Service 1 Istio 流量管理 – 概览 • 控制面下发流量规则: Pilot • 数据面标准协议:xDS • 集群内Pod流量出入: Sidecar Proxy • 集群外部流量入口:Ingress Istio 流量管理 – 控制面 两类数据: q 服务数据(Mesh 中有哪些服务?缺省路由) v Service Registry § Kubernetes:原生支持 § Consul、Eureka 等其他服务注册表:MCP over xDS (https://github.com/istio-ecosystem/consul-mcp) v 通过CRD定义的服务数据 q 自定义流量规则(如何将请求路由到这些服务?) 自定义流量规则(如何将请求路由到这些服务?) v 通过CRD定义的流量规则 服务数据 流量规则 3 Istio 流量管理 – 控制面 – 服务发现 • K8s Service : Pilot 直接支持 • ServiceEntry: 手动添加 Service 到 Pilot 内部注册表中 • WorkloadEntry:单独添加 Workload,对于虚机支持更友好 • MCP 适配器: 将第三方注册表中的服务加入到0 码力 | 20 页 | 11.31 MB | 5 月前3全栈服务网格 - Aeraki 助你在 Istio 服务网格中管理任何七层流量
com/doc/DVnlqUVB1ek1laFBQ #IstioCon What’s next? 现阶段协议扩展方案面临的挑战: ● 在 Mesh 中支持一个七层协议的工作量较大: ○ 数据面:编写一个 Envoy filter 插件——流量管理(RDS、 负载均衡、熔断、流量镜像、故障注入等)、编解码 ○ 控制面:编写一个 Aeraki 插件——运维/流量管理策略 ● 非 HTTP 大部分七层协议的路由、熔断、负载均衡等能力的实现逻辑是类似的, 没有必要每个协议都全部从头实现,重复造轮子。 ● MetaProtocol 框架在 Service Mesh 提供七层协议的通用能力: ○ 数据面:MetaProtocol Proxy 实现 RDS、负载均衡、熔 断等公共的基础能力 ○ 控制面:Aeraki + Istio 提供控制面管理,实现按请求 header 路由、灰度发布、地域感知LB、流量镜像等高级 MetaProtocol 服务生成数据面所需的 Filter 配置 ,Filter 配置中将 RDS 指向 Aeraki 3. Istio 下发 LDS(Patch)/CDS/EDS 给 Envoy 4. Aeraki 根据缺省路由或者用户设置的路由规则下发 RDS 给 Envoy 1 2 3 4 #IstioCon MetaProtocol:数据面 ● MetaProtocol0 码力 | 29 页 | 2.11 MB | 1 年前3Istio + MOSN 在 Dubbo 场景下的探索之路
的资源;8/23 MCP mcpserver demo: https://github.com/champly/mcpserver9/23 Pilot Pilot 负责网格中的流量管理以及控制面和数据面之间的配置下发,在 Istio1.5 之后合并了 Galley、Citadel、Sidecar-Inject 和 Pilot 成为 Istiod。 功能 • 根据不同的平台(Kubernetes、Console) • 记录变化的资源类型 • 根据变化的资源类型整理本地数据 • 根据变化的资源类型判断需要下发的 xDS资源 • 构建 xDS 资源,下发到连接的 Sidecar10/23 xDS Sidecar 通过动态获取服务信息,对服务的发现 API 被称为 xDS。 • 协议部分(ADS、控制发送的顺序以及返回的确认数据) • 数据部分(CDS、EDS、LDS、RDS、SDS)11/23 Peerauthentications Other link: https://github.com/istio/istio12/23 MOSN MOSN 是一款使用 Go 语言开发的网络代理软件,作为云原生的网络数据平面,旨在为服务提供 多协议、模块化、智能化、安全的代理能力。MOSN 是 Modular Open Smart Network 的简称。 MOSN 可以与任何支持 xDS API 的 Service0 码力 | 25 页 | 3.71 MB | 5 月前3Istio控制平面组件原理解析
SDS/CDS/RDS/LDS/HDS/ADS/KDS 和Google强强联手 官方博客:The universal data plane API缓存Istio和k8s配置 ü一个小型的非持久性key/value数据库 ü借助k8s.io/client-go建立缓存 ü缓存Istio:route-rule,virtual-service,gateway等 ü缓存k8s:node,Service,Endpoints等触发配置生效方式 V2通过GRPC双向流,主动推送配置给envoy: ü事件触发 • 当配置有增/删/改事件 ü定时触发 • 可配置环境变量 V2_REFRESH,定时推送配置Mixer——遥测报告 u上报的原始数据 u异步Flush给Adapter u转换成属性词汇 u问题讨论属性词汇 Name Type Description Kubernetes Example source.id string Platform-specific timestamp when the destination receives the request. This should be equivalent to Firebase “now”.上报的原始数据 üreq.Attributes: • "strings":{"131":92,"152":-1,"154":-2,"17":-7,"18":-4,"19":90,"22":92 • "int64s":{"1":333140 码力 | 30 页 | 9.28 MB | 5 月前3探讨和实践基于Istio的微服务治理事件监控
单次链路追踪 可细粒度排查应用单次链路调用 的包括日志、网络数据在内的所 有信息。 宏观下的监控需求 链路总体展示 展示整个服务调用过程中链路上 每一个节点的服务状况,包括延 时、吞吐量等基本信息。 服务器总体展示 展示当前所有服务器的运行状况, 包括CPU、内存、网络、I/O读写 等信息 业务总体展示 展示当前业务相关数据的 从宏观上快速定位问题,在微观上找到问题根因的 监控方案问题二:现有的系统能否完全满足需求 4 5 8 9 Request Response JVM 6 10 7 Class Loader Engine Agent A’.class JavaAgent 监控数据暂 存区 运行时数据区如何基于Istio的现有组件去实现 Kubernetes Cluster MIxer 全链路关联 平台 Cloud Native App POD Agent logfile Check:也叫precondition,前置条件检查, 比如说黑白名单,权限。 • Quota:访问次数 • Report: 日志。Mixer的二次开发流程Mixer插件工作模型 上述的过程中,Envoy所做的数据收集、上传是自动完成的,而Mixer生成模版实例则 可以通过配置来完成。因此,所谓的Mixer插件实际上就是Adapter,开发Mixer插件 也就是开发Adapter。两种开发模式 几种开发模式,以及写一下两种方式的区别0 码力 | 29 页 | 8.37 MB | 5 月前3Istio 在 Free Wheel 微服务中的实践
为Proxy提供动态配置管理 • Citadel: 自动维护mTLS密钥 • Mixer: 在k8s中部署了两组Mixer • Policy提供授权、Quota等能力 • Telemetry提供监控数据收集能力 基本原理 • Istio从架构上可以分为4个板块: • Istio Proxy: Mesh的基础 • 网络安全:兼容Spiffe标准实现 • 配置管理:为C++实现的Proxy接 k8s自动加 载istio-secrets volume • Pilot: 和Sidecar建立连接,管理动态配 置 • Mixer: 和Sidecar建立连接,管理授权 、Quota和审计数据 • Istio的架构和基本原理 • FreeWheel的Istio实践 • 未来工作 • FreeWheel的痛点 FreeWheel的Istio实践 • 在FreeWheel,我们已 右图为Mixer的基本原理,Template 是对Proxy上报的Attribute的特定处 理机制的框架,支持四类: • Preprocess: 汇总流量相关元数据 和环境(k8s)相关的元数据 • Report: 上报数据 • Check: 决策是否允许当前访问 • Quota: 决策容量是否足够 Mixer or Sidecar,这是一个问题 • Mixer提供了一种非常灵活0 码力 | 31 页 | 4.21 MB | 1 年前3百度APP基于Istio实现基础架构升级 - lightning talk - MichaelXu
RPC劫持:可扩展方案 Ø envoy启动后注册port到bns-agent。 Ø rpc框架查询bns-agent IP与治理策略数据。 Ø bns-agent判断否使用envoy进行服务治理。 Ø rpc框架根据反馈的IP,治理策略信息请求对 应IP,会cache数据,需要即时更新。 Ø envoy离线或者被干预则立即通知bns-agent, fallback会使用原有治理策略。 #IstioCon 配置中心:维护模块上下游拓扑,管理路由配 置、通信策略。 ü 上线中心:管理Mesh组件版本,统一上线入口。 l 核心组件 Ø 控制面板:Istio-Pilot组件,路由管理、通信 策略等功能 Ø 数据面板:envoy组件,流量转发、负载均衡 等功能. #IstioCon 收益 主要介绍如下几个方面: l 稳定性方面 (单点,多点,防雪崩,长尾优化,架构故障韧性能力) l 治理效率方面0 码力 | 9 页 | 2.20 MB | 1 年前3
共 12 条
- 1
- 2