33.云原生之Istio管理任何七层流量

云原生专栏大纲

文章目录

  • Istio存在的问题
  • Aeraki介绍
  • Aeraki 的解决方案
    • 支持的协议
    • 支持的特性
  • 安装Aeraki
  • Aeraki教程
    • 采用 ServiceEntry 的 Demo 应用
    • 使用 Dubbo2Istio 对接 Dubbo 注册表 的 Demo 应用(Interface 级流量治理)

Service Mesh 中有大量的七层协议流量,包括 RPC、Database、Cache、Messaging 等类型的七层协议,但 Istio 只提供了 HTTP 和 gRPC 的七层管理能力,对其他七层协议的支持非常有限。Aerkai 开源项目通过非侵入的方式为 Istio 提供了任意七层协议的支持能力,并提供了面向用户的高级配置 CRD,可以很方便地对这些协议的流量进行管理,实现灰度发布等高级流量管理能力。目前 Aeraki 已经支持了 Thrift、Dubbo、Redis、Kafka、Zookeeper,并即将支持更多的协议。Aeraki 的定位是做成一个非侵入式 Istio 功能增强工具集,除了协议扩展之外,还会关注解决在 Istio 使用过程中遇到的其他常见问题,包括效率优化、配置简化、第三方服务发现接入、功能扩展等。

Istio存在的问题

  1. Istio 和其他流行的服务网格实现对 HTTP 和 gRPC 协议之外的7层协议的支持非常有限。
  2. Envoy RDS (Route Discovery Service) 是专为 HTTP 设计的。而其他的协议,如 Dubbo 和 Thrift 等,只能使用监听器内联路由来进行流量管理,当路由改变时,需要重建监听器,导致存量链接上的请求被中断而出现错误。
  3. 在服务网格中引入一个专有协议需要花费很多精力。需要编写一个 Envoy 过滤器来处理网络层的流量,以及一个专有控制面来管理这些 Envoy 代理。

这些问题使得用户难以在服务网格中管理微服务中其他广泛使用的7层协议的流量。例如,在一个微服务应用中,我们可能使用以下协议。

  • RPC: HTTP, gRPC, Thrift, Dubbo, 私有 RPC 协议 …
  • 消息队列: Kafka, RabbitMQ …
  • 缓存: Redis, Memcached …
  • 数据库: MySQL, PostgreSQL, MongoDB …

Aeraki介绍

https://github.com/aeraki-framework/aeraki
Aeraki 是一个开源的 Istio 外部服务网格扩展,专门设计用于支持异构服务和跨网格通信。它的目标是扩展 Istio,使其能够更好地支持多种不同类型的服务,包括 Dubbo、Spring Cloud、Thrift 等,以及不同的通信协议,如 gRPC、HTTP 和 TCP。
以下是 Aeraki 的一些主要特点和功能:

  1. 支持异构服务和协议:Aeraki 扩展了 Istio,使其能够与 Dubbo、Spring Cloud、Thrift 等异构服务框架进行集成,实现这些服务之间的流量管理和通信。
  2. 跨网格通信:Aeraki 支持不同 Istio 网格之间的通信,使得在多个 Istio 网格之间进行服务发现、流量控制和安全管理变得更加容易。
  3. 自动化配置:Aeraki 提供了自动化的配置功能,可以根据服务的类型和协议自动配置 Istio 的流量路由、策略和安全功能,简化了管理和维护工作。
  4. 可观测性:Aeraki 集成了 Istio 的监控和跟踪功能,可以帮助用户实时监控和诊断异构服务之间的通信和性能问题。

总的来说,Aeraki 扩展了 Istio 的功能,使其能够更好地适应复杂的微服务环境,支持不同类型和协议的服务,并提供跨网格通信的能力。这为用户提供了更灵活、可扩展和安全的微服务治理解决方案。

Aeraki 的解决方案

https://github.com/aeraki-mesh/aeraki/blob/master/README.zh-CN.md
为了解决这些问题,Aeraki Mesh 提供了一种非侵入性的、高度可扩展的方式来管理任何服务网中的7层流量。
Aeraki Mesh 由以下几部分组成。

  • Aeraki: Aeraki 为运维提供了高层次的、用户友好的流量管理规则,将规则转化为 envoy 代理配置,并利用 Istio 的EnvoyFilter API 将配置推送给数据面的 sidecar 代理。 Aeraki 还在控制面中充当了 MetaProtocol Proxy 的 RDS(路由发现服务)服务器。不同于专注于 HTTP 的 Envoy RDS,Aeraki RDS 旨在为所有七层协议提供通用的动态路由能力。
  • MetaProtocol Proxy: MetaProtocol Proxy 是一个七层代理框架,为七层协议提供了常用的流量管理能力,如负载均衡、熔断、路由、本地/全局限流、故障注入、指标收集、调用跟踪等等。我们可以基于 MetaProtocol Proxy 提供的通用能力创建自己专有协议的七层代理。要在服务网格中加入一个新的协议,唯一需要做的就是实现 编解码器接口 (通常只需数百行代码)和几行 yaml 配置。如果有特殊的要求,而内置的功能又不能满足,MetaProtocol Proxy 还提供了一个扩展机制,允许用户编写自己的七层过滤器,将自定义的逻辑加入 MetaProtocol Proxy 中。

MetaProtocol Proxy 中已经支持了 Dubbo, Thrift ,bRPC 和一系列私有协议。如果你正在使用一个闭源的专有协议,也可以在服务网格中管理它,只需为它编写一个 MetaProtocol 编解码器即可。
大多数请求/响应式的无状态协议和流式调用都可以建立在 MetaProtocol Proxy 之上。但是,由于有些协议的路由策略过于 “特殊”,无法在 MetaProtocol 中规范化。例如,Redis 代理使用 slot number 将客户端查询映射到特定的Redis服务器节点,slot number 是由请求中的密钥计算出来的。只要在 Envoy Proxy 中有一个可用的 TCP filter,Aeraki 仍然可以管理这些协议。目前,对于这一类的协议,Aeraki 支持 Redis 和 Kafka。

支持的协议

Aeraki 已经支持下述协议:

  • Dubbo (Envoy 原生过滤器)
  • Thrift (Envoy 原生过滤器)
  • Kafka (Envoy 原生过滤器)
  • Redis (Envoy 原生过滤器)
  • MetaProtocol-Dubbo
  • MetaProtocol-Thfirt
  • MetaProtocol-bRPC(百度开源 RPC 协议)
  • MetaProtocol-tRPC(腾讯内部 RPC 协议)
  • MetaProtocol-qza(腾讯音乐内部协议)
  • MetaProtocol-videoPacket(腾讯融媒体内部协议)
  • MetaProtocol-其他协议:灵雀云、腾讯游戏人生等的内部协议…
  • MetaProtocol-私有协议:需要在服务网格中接入你的私有协议?没有问题,几乎任何七层协议都可以基于 MetaProtocol 实现,并在 Aeraki Mesh 中进行流量管理

支持的特性

  • 流量管理
    • 请求级负载均衡/地域感知负载均衡(支持一致哈希算法/会话保持)
    • 熔断
    • 灵活的路由匹配条件(任何从7层数据包中提取的属性,都可作为匹配条件)
    • 通过 Aeraki MetaRDS 实现动态路由更新
    • 基于版本的路由
    • 流量分流
    • 本地流量限制
    • 全局流量限制
    • 消息修改
    • 流量镜像
  • 可观测性
    • 请求级指标 (请求级延迟、计数、错误等)
    • 分布式追踪
  • 安全性
    • 基于接口/方法的对等授权
    • 授权请求

请注意: 建立在 MetaProtocol 之上的协议实现支持 Aeraki Mesh 的上述所有功能,Envoy 原生 filter 只支持部分上述功能,这取决于原生 filter 的能力。

安装Aeraki

参考:https://www.aeraki.net/docs/v1.x/install/

  1. MetaProtocol 和 Istio 兼容性

确定要安装的版本,小编Istio版本为1.11.2,这种中间本部建议向下选择Aeraki版本
或者升级istio,参考https://istio.io/latest/zh/docs/setup/upgrade/helm/#canary-upgrade
image.png

  1. 修改 Istio 配置

请修改 istio ConfigMap 以添加以下内容。

  • 启用 Istio DNS catpure
  • 启用 Aeraki 托管协议的指标
kubectl edit cm istio -n istio-system

原始配置

defaultConfig:discoveryAddress: istiod-1-11-2.istio-system.svc:15012proxyMetadata: {}tracing:zipkin:address: jaeger-collector.istio-system.svc:9411
enablePrometheusMerge: true
rootNamespace: istio-system
trustDomain: cluster.local

添加配置

apiVersion: v1
data:mesh: |-defaultConfig:proxyMetadata:ISTIO_META_DNS_CAPTURE: "true"proxyStatsMatcher:inclusionPrefixes:- thrift- dubbo- kafka- meta_protocolinclusionRegexps:- .*dubbo.*- .*thrift.*- .*kafka.*- .*zookeeper.*- .*meta_protocol.*    
  1. 安装 Aeraki
git clone https://github.com/aeraki-mesh/aeraki.git
cd aeraki
export AERAKI_TAG=1.3.0
make install
  1. 安装 AerakiCtl(可选)
git clone https://github.com/aeraki-mesh/aerakictl.git ~/aerakictl;
source ./aerakictl.shCommand
Aeraki Debugging
aerakictl_aeraki_log
Istiod Debugging
aerakictl_istiod_debug
aerakictl_istiod_config
aerakictl_istiod_registry
aerakictl_istiod_endpoint
aerakictl_istiod_instances
aerakictl_istiod_ads
aerakictl_istiod_logGateway Debugging
aerakictl_gateway_config
aerakictl_gateway_logSidecar Debugging
aerakictl_sidecar_log
aerakictl_sidecar_config
aerakictl_sidecar_route
aerakictl_sidecar_statsaerakictl_sidecar_enable_debug
aerakictl_sidecar_enable_traceaerakictl_sidecar_disable_debug
aerakictl_sidecar_admin
aerakictl_app_log
  1. 查看Aeraki安装情况

image.png image.png

Aeraki教程

https://www.aeraki.net/zh/docs/v1.x/tutorials/

  1. 安装示例应用
git clone https://github.com/aeraki-mesh/aeraki.git
cd aeraki-mesh/demo
# 会安装Aeraki, Istio 和 demo 应用(此处不这样安装)
make demo
# 进入demo中相应目录进行安装
  1. 查看demo示例有那些
cd aeraki-mesh/demo
[root@ksmaster21 demo]# ll
总用量 76
drwxr-xr-x. 2 root root  4096 511 2022 dubbo
drwxr-xr-x. 2 root root  4096 511 2022 gateway
-rw-r--r--. 1 root root 28367 511 2022 grafana-dashboard.json
-rwxr-xr-x. 1 root root   821 511 2022 install-aeraki.sh
-rwxr-xr-x. 1 root root  1637 511 2022 install-demo.sh
drwxr-xr-x. 2 root root  4096 511 2022 kafka
drwxr-xr-x. 3 root root  4096 511 2022 metaprotocol-dubbo
drwxr-xr-x. 2 root root  4096 511 2022 metaprotocol-qza
drwxr-xr-x. 5 root root  4096 511 2022 metaprotocol-thrift
drwxr-xr-x. 2 root root  4096 511 2022 metaprotocol-trpc
drwxr-xr-x. 2 root root  4096 511 2022 metaprotocol-videopacket
drwxr-xr-x. 2 root root  4096 511 2022 thrift
-rwxr-xr-x. 1 root root  1312 511 2022 uninstall-demo.sh

采用 ServiceEntry 的 Demo 应用

https://zhuanlan.zhihu.com/p/361811537

  1. 安装dubbo示例(Interface 级流量治理)
cd dubbo
# 修改其中install.sh脚本,自动注入改为如下内容
kubectl label namespace dubbo istio-injection=enabled --overwrite=true
kubectl label namespace dubbo istio.io/rev=1-11-2 --overwrite=true
# 安装示例dubbo应用
./install.sh
  1. 查看部署情况

image.pngimage.png

  1. 访问测试

使用 Dubbo2Istio 对接 Dubbo 注册表 的 Demo 应用(Interface 级流量治理)

  1. 部署
git clone https://github.com/aeraki-mesh/dubbo2istio.git
cd dubbo2istiokubectl create ns meta-dubbo
kubectl label namespace meta-dubbo istio-injection=enabled --overwrite=true
kubectl label namespace meta-dubbo istio.io/rev=1-11-2 --overwrite=true
kubectl apply -f demo/k8s/zk -n meta-dubbo
kubectl apply -f demo/traffic-rules/destinationrule.yaml -n meta-dubbo

上面的脚本安装的是 ZooKeeper 注册表,你也可以选择安装 nacos 或者 etcd 注册表。Dubbo Demo 应用程序源码可以从 https://github.com/aeraki-mesh/dubbo-envoyfilter-example 下载。

  1. 查看部署情况
kubectl get pod -n meta-dubbo
NAME                                        READY   STATUS    RESTARTS   AGE
dubbo-sample-consumer-5cf9f6f878-qxwwp      2/2     Running   0          97s
dubbo-sample-provider-v1-6b7cc9b6f8-j9dvl   2/2     Running   0          97s
dubbo-sample-provider-v2-7546478cbf-l2l74   2/2     Running   0          97s
dubbo2istio-5c4cf7f847-d7kf2                1/1     Running   0          97s
zookeeper-77c844c5b9-7p47v                  1/1     Running   0          96s

可以看到 dubbo namespace中有下面的 pod:

  • dubbo-sample-consumer: Dubbo 客户端应用
  • dubbo-sample-provider-v1: Dubbo 服务器端应用(v1版本)
  • dubbo-sample-provider-v2: Dubbo 服务器端应用(v2版本)
  • zookeeper: Dubbo ZooKeeper 服务注册表
  • dubbo2istio: 服务同步组件,负责将 Dubbo 服务同步到服务网格中

安装好 Dubbo Demo 程序后,你可以参考 Aeraki Mesh 的 教程 体验 Aeraki Mesh 为 Dubbo 应用提供的七层流量治理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2804759.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

智能光耦合器的特点概述

在不断发展的技术领域,光耦合器在确保无缝通信和可靠信号传输方面的作用变得越来越关键。本文深入探讨了光耦合器的复杂性,阐明了其重要性,探索了进步,并解决了光耦合器技术人员面临的常见问题。 光耦合器基础知识: 光…

力扣hot100题解(python版1-6题)

1、两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按…

SpringBoot和SpringCloud的区别,使用微服务的好处和缺点

SpringBoot是一个用于快速开发单个Spring应用程序的框架,通过提供默认配置和约定大于配置的方式,快速搭建基于Spring的应用。让程序员更专注于业务逻辑的编写,不需要过多关注配置细节。可以看成是一种快速搭建房子的工具包,不用从…

List集合之UML、特点、遍历方式、迭代器原理、泛型、装拆箱及ArrayList、LinkedList和Vector的区别

目录 ​编辑 一、什么是UML 二、集合框架 三、List集合 1.特点 2.遍历方式 3.删除 4.优化 四、迭代器原理 五、泛型 六、装拆箱 七、ArrayList、LinkedList和Vector的区别 ArrayList和Vector的区别 LinkedList和Vector的区别 一、什么是UML UML(Unif…

C# winfroms使用socket客户端服务端代码详解

文章目录 1️⃣ 通信相关说明1.1服务端与客户端1.2 信息发送原理1.3 信息接收原理 2️⃣ socket代码2.1 客户端代码2.2 服务端代码 3️⃣ 定时任务处理报文3.1 Timers定时任务 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4315141…

【扩散模型】【网络结构探索】神经网络扩散:Neural Network Diffusion(论文解读)

项目地址:https://github.com/NUS-HPC-AI-Lab/Neural-Network-Diffusion 文章目录 摘要一、前言二、Nerual Network Diffusion (神经网络扩散)2.1扩散模型(预备知识)2.2 总览2.3 参数自动编码器2.4 参数生成 三、实验3…

RocketMQ快速实战以及集群架构原理详解

RocketMQ快速实战以及集群架构原理详解 组成部分 启动Rocket服务之前要先启动NameServer NameServer 提供轻量级Broker路由服务,主要是提供服务注册 Broker 实际处理消息存储、转发等服务的核心组件 Producer 消息生产者集群,通常为业务系统中的一个功…

xff注入 [CISCN2019 华东南赛区]Web111

打开题目 看见smarty 想到模板注入 又看见ip 想到xff注入 一般情况下输入{$smarty.version}就可以看到返回的smarty的版本号。该题目的Smarty版本是3.1.30 在Smarty3的官方手册里有以下描述: Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1&#xff…

07 MyBatis之高级映射 + 懒加载(延迟加载)+缓存

1. 高级映射 例如有两张表, 分别为班级表和学生表 自然, 一个班级对应多个学生 像这种数据 , 应该如果如何映射到Java的实体类上呢? 这就是高级映射解决的问题 以班级和学生为例子 , 因为一个班级对应多个学生 , 因此学生表中必定有一个班级编号字段cid 但我们在学生的实体…

HarmonyOS学习--三方库

文章目录 一、三方库获取二、常用的三方库1. UI库:2. 网络库:3. 动画库: 三、使用开源三方库1. 安装与卸载2. 使用 四、问题解决1. zsh: command not found: ohpm 一、三方库获取 在Gitee网站中获取 搜索OpenHarmony-TPC仓库,在t…

Day20_网络编程(软件结构,网络编程三要素,UDP网络编程,TCP网络编程)

文章目录 Day20 网络编程学习目标1 软件结构2 网络编程三要素2.1 IP地址和域名1、IP地址2、域名3、InetAddress类 2.2 端口号2.3 网络通信协议1、OSI参考模型和TCP/IP参考模型2、UDP协议3、TCP协议 2.4 Socket编程 3 UDP网络编程3.1 DatagramSocket和DatagramPacket1、Datagram…

强大的文本绘图——PlantUML

PlantUML是一款开源工具,它允许用户通过简单的文本描述来创建UML图(统一建模语言图)。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言(DSL)&am…

PostMan使用自带js库base64编码、sha256摘要、环境变量的使用

目录 1、环境变量的使用2、base64编码、sha256摘要、以及脚本的使用3、脚本代码 在请求调试接口的过程中,因为要使用大量相同的参数,使用变量的方式能很大程度上减轻接口调用的工作量 版本说明:Postman for Windows,Version&#…

BUGKU-WEB 备份是个好习惯

题目描述 题目截图如下: 进入场景看看: 解题思路 看源码看提示:备份是个好习惯扫描目录md5弱比较 相关工具 御剑md5解密:https://www.somd5.com/ 解题步骤 看到的这串字符,有点像md5? d41d8cd98…

【PCL】(十二)使用ConditionalRemoval或RadiusOutlierRemoval滤波器对点云进行滤波

(十二)使用ConditionalRemoval 或 RadiusOutlierRemoval滤波器对点云进行滤波 RadiusOutlierRemove滤波器删除PointCloud中在指定半径的邻域范内,邻点没能达到指定数量的点。下图中,如果指定了邻点数为1,则黄色点将从…

亿道丨三防平板电脑厂家推荐丨三防平板PAN智能化赋能

随着科技的不断进步和人们对智能化产品的需求日益增长,三防平板迎来了智能化赋能的时代。通过融合创新科技,三防平板实现了更高的性能、更智能的功能以及更广泛的应用场景,引领着未来的发展潮流。 一、智能化技术提升性能 随着技术的进步&…

Nginx网络服务四-----日志、Nginx压缩和ssl

1.自定义访问日志 如果访问出错---404,可以去看error.log日志信息 访问日志是记录客户端即用户的具体请求内容信息,而在全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此两者是不同的,而且…

openssl 生成nginx自签名的证书

1、命令介绍 openssl req命令主要的功能有,生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书。 主要参数 主要命令选项: -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已…

计算机网络面经-从浏览器地址栏输入 url 到显示主页的过程?

大概的过程比较简单,但是有很多点可以细挖:DNS解析、TCP三次握手、HTTP报文格式、TCP四次挥手等等。 DNS 解析:将域名解析成对应的 IP 地址。TCP连接:与服务器通过三次握手,建立 TCP 连接向服务器发送 HTTP 请求服务器…

JS基础(一)

一 JS概述 1. 历史 1995年 JS出现在网景浏览器中 1996年 IE也开始出现了JS 1997年 指定了JS的标准规范ECMAScript 目前是ES6 2009年 JS开始向后端发展&#xff0c;出现了Node.js 二 JS入门 1. JS的运行方式 1. 内部写法 <script>J…