深入理解Istio服务网格(一)数据平面Envoy

一、服务网格概述(service mesh)

在传统的微服务架构中,服务间的调用,业务代码需要考虑认证、熔断、服务发现等非业务能力,在某种程度上,表现出了一定的耦合性
在这里插入图片描述
服务网格追求高级别的服务流量治理能力,认证、熔断、服务发现这些能力更多的是平台测的能力。将业务测和平台测能力解耦,开发人员只关心业务测的能力。每个服务实例都有一个代理,服务的入站流量、出站流量都先经过代理,代理不进行业务处理,只做流量转发,因此,传统微服务架构,服务到服务间的调用,转成了proxy到proxy的调用。
在这里插入图片描述
Proxy通常是一种反向代理软件,有强大的流量转发能力。我们前面讲kube-proxy做负载均衡,是利用Linux内核配置iptables规则,做的L4负载均衡,实际上是能力比较弱的负载均衡。由于所有的流量都经过Proxy,基于此,很容易做到监控、熔断、重试、超时处理、负载均衡、认证等能力。

二、Istio架构

在这里插入图片描述
基于Istio的流量治理,控制平面是其istiod组件,而这个proxy角色就是反向代理软件Envoy。istiod负责生成并下发Envoy的配置。通过丰富的路由规则,对流量行为进行细粒度的控制。

三、Envoy

3.1 优势

Envoy在L4和L7都提供了丰富的Filter能力,并且还提供一组可以通过控制平面管理的API(XDS API)。云原生是一个动态的系统,pod的ip并不是固定的,传统的基于静态配置文件加载的方式并不适用。因此Envoy的API可配置性具有很大的优势,控制平面监听到配置需要变更时,控制平面可以主动下发envoy配置,而envoy不需要重新启动,支持hot reload。

3.2 Envoy典型配置

在这里插入图片描述
listener定义了本机监听ip和端口,route_config配置了转发规则,cluster对应的是service,endpoint对应的是转发的pod。

3.3 Envoy架构

在这里插入图片描述
Main Thread通过XDS API接收控制平面下发的配置,然后将listener、route_config、cluster等各配置项下发至Worker Thread,Worker Thread负责真正接收处理请求流量。

3.4 发布应用

1、创建envoy的配置configmap

kubectl create configmap envoy-config --from-file=envoy.yaml

envoy.yaml:

admin:address:socket_address: { address: 127.0.0.1, port_value: 9901 }static_resources:listeners:- name: listener_0address:socket_address: { address: 0.0.0.0, port_value: 10000 }filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerstat_prefix: ingress_httpcodec_type: AUTOroute_config:name: local_routevirtual_hosts:- name: local_servicedomains: ["*"]routes:- match: { prefix: "/" }route: { cluster: some_service }http_filters:- name: envoy.filters.http.routerclusters:- name: some_serviceconnect_timeout: 0.25stype: LOGICAL_DNSlb_policy: ROUND_ROBINload_assignment:cluster_name: some_serviceendpoints:- lb_endpoints:- endpoint:address:socket_address:address: httpserver-svcport_value: 80

2、部署envoy,并将configmap mount进去
envoy-deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:labels:run: envoyname: envoy
spec:replicas: 1selector:matchLabels:run: envoytemplate:metadata:labels:run: envoyspec:containers:- image: envoyproxy/envoy:v1.21.5name: envoyvolumeMounts:- name: envoy-configmountPath: "/etc/envoy"readOnly: truevolumes:- name: envoy-configconfigMap:name: envoy-config

3、通过envoy访问应用
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于NSGA-II的深度迁移学习

深度迁移学习 迁移学习是一种机器学习技术,它允许一个预训练的模型被用作起点,在此基础上进行微调以适应新的任务或数据。其核心思想是利用从一个任务中学到的知识来帮助解决另一个相关的任务,即使这两个任务的数据分布不完全相同。这种方法…

idea修改项目git地址

大家好,今天给大家分享的知识是如何在idea中修改项目的git地址。 一、修改地址 首先我们先找到菜单栏中Git选项,然后点击管理远程(Manage Remote) 之后双击origin之后就可以定义名称或者URL了。

边缘计算网关在智能制造中有哪些应用?-天拓四方

在智能制造和工业生产环境中,数据已经成为新的生产要素,工业生产对实时性、灵活性和智能化也提出了更高的要求。而在这个过程中,边缘计算网关发挥着不可或缺的作用。它作为设备层与网络层之间的关键桥梁,确保了数据的实时、高效处…

SpringCloud-生产者和消费者

一、生产者和消费者的定义 在 Spring Cloud 中,术语 "生产者" 和 "消费者" 用于描述微服务架构中的两种基本角色。 角色定义生产者 Provider生产者是提供具体服务或功能的模块。它将业务逻辑封装成服务,供其他模块调用。生产者向服…

有趣的CSS - 鼠标悬浮线条动态变化

鼠标悬浮线条动态变化 整体效果核心代码html 代码:css 部分代码: 完整代码如下html 页面:css 样式:页面渲染效果: 整体效果 这个链接悬浮效果主要用 css3 的 animation 属性配合 :hover 伪选择器来实现的。 此效果可以…

Rust 本地文档的使用:rustup doc

Rust 是一种系统级编程语言,以其安全性、速度和内存控制能力而闻名。为了方便开发者更好地了解并利用 Rust 标准库和工具链中的功能,Rust 提供了一种内置的文档浏览方式——通过 rustup doc 命令。 安装 rustup 在查阅 Rust 文档之前,确保你…

08:LED点阵

LED点阵 1、什么是LED点阵2、如何驱动LED点整3、原理图分析4、74HC595的接法分析5、74HC595芯片分析6、编程实践(全屏点亮) 1、什么是LED点阵 如图为16x16的LED点阵,每一个点里面都有一个LED灯 上图为一个8x8点阵LED原理图(横向为…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 机器学习海啸 2006 年,Geoffrey Hinton 等人发表了一篇论文,展示了如何训练一个能够以最先进的精度…

CodeFuse成功支持通义千问算法大赛,评测方案已开源

前段时间, 首届通义千问AI挑战赛成功举办,CodeFuse 为大赛提供技术支持,模型微调框架 MFTCoder 和 CodeFuseEval 评测框架为大赛保驾护航,助力大赛圆满完成。我们基于leetcode 阿里和蚂蚁最新面试题库建设了“模型赛马”在线打榜的…

【GAMES101】Lecture 15 全局光照

本节继承上一节的难度并继续加深,讲这个BRDF,然后理解反射方程和渲染方程,最终实现全局光照,以下内容很抽象……如果想要深入理解建议到隔壁基于物理着色:BRDF - 知乎 (zhihu.com)或者多看几遍视频,我也是回…

VScode+PlatformIO 物联网Iot开发平台环境搭建

1.vscode (1)安装platformIO插件 (2)新建项目或导入已有的arduino项目 Name:需要填写你项目的名称; Board:点开是一个下拉框,但是可以输入你想要的开发板,这里选择&quo…

华为配置OSPF与BFD联动示例

配置OSPF与BFD联动示例 组网图形 图1 配置OSPF与BFD联动组网图 OSPF与BFD联动简介配置注意事项组网需求配置思路操作步骤配置文件 OSPF与BFD联动简介 双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测…