【kubernetes/k8s概念】istio 原理与架构

2023-05-16

看着有点蒙,摘录一下,待有时间分析源码

WHY Istio

     当应用被拆分为多个微服务后,进程内的方法调用变成了进程间的远程调用。引入了对大量服务的连接、管理和监控的复杂性。随着微服务出现,微服务的连接、管理和监控成为难题

      该变化带来了分布式系统的一系列问题,例如:

  • 如何找到服务的提供方?
  • 如何保证远程方法调用的可靠性?
  • 如何保证服务调用的安全性?
  • 如何降低服务调用的延迟?
  • 如何进行端到端的调试?

        生产部署中的微服务实例也增加了运维的难度,例如:

  • 如何收集大量微服务的性能指标已进行分析?
  • 如何在不影响上线业务的情况下对微服务进行升级?
  • 如何测试一个微服务集群部署的容错和稳定性?

     Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信:

  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
  • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
  • 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。
  • 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

WHAT istio

      一个用来连接、管理和保护微服务的开放平台

      Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志记录平台、遥测或策略系统的 API。Istio 的多样化功能集使您能够成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

  • 流量管理(Pilot):控制服务之间的流量和API调用的流向,使得调用更灵活可靠,并使网络在恶劣情况下更加健壮。
  • 可观察性:过集成zipkin等服务,快速了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。
  • 策略执行(mixer):将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码。
  • 服务身份和安全(Istio-auth):为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。

1. istio架构

Istio 服务网格逻辑上分为数据平面控制平面

  • 数据平面由一组以 sidecar 方式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务及 Mixer 之间所有的网络通信。
  • 控制平面负责管理和配置代理来路由流量。此外控制平面配置 Mixer 以实施策略和收集遥测数据。

 

 

1 Envoy

      Istio 使用 Envoy 代理的扩展版本,Envoy 是以 C++ 开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy 的许多内置功能被 istio 发扬光大,例如:

  • 动态服务发现
  • 负载均衡
  • TLS 终止
  • HTTP/2 & gRPC 代理
  • 熔断器
  • 健康检查、基于百分比流量拆分的灰度发布
  • 故障注入
  • 丰富的度量指标

        Envoy 被部署为 sidecar,和对应服务在同一个 Kubernetes pod 中。这允许 Istio 将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在 Mixer 中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。

        Sidecar 代理模型还可以将 Istio 的功能添加到现有部署中,而无需重新构建或重写代码。可以阅读更多来了解为什么我们在设计目标中选择这种方式。

 1.1 手动注入

   istioctl命令更改配置文件
$ istioctl  kube-inject  -f  <your-app>.yaml -o <your-app-addEnvoy>.yaml

    部署应用
$ kubectl create -f <your-app-addEnvoy>.yaml

  1.2 注入后的文件

Annotation: 标注了这一部署和pod是否已经被注入,被什么版本注入

proxy container :容器是envoy代理容器。容器两个进程,父进程为守护进程传入启动参数给子进程。子进程proxy负责转发流量

InitContainer: 容器初始化,对iptables做一些配置。使其跳过和proxy进程用户一致的用户进程的流量处理,跳过Loopback流量处理,其余所有流量转发到15001端口
Envoy 实现了过滤和路由,并在pilot,mixer协助下服务发现、健康检查,提供了具有弹性的负载均衡。

 

2. Mixer

       Mixer 是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据。代理提取请求级属性,发送到 Mixer 进行评估。有关属性提取和策略评估的更多信息,请参见 Mixer 配置。

       Mixer 中包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出 Envoy 代理和 Istio 管理的服务。

 

3. Pilot

      控制面中负责流量管理的组件为Pilot

        Pilot 为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 sidecar。

        Pilot 将平台特定的服务发现机制抽象化并将其合成为符合 Envoy 数据平面 API 的任何 sidecar 都可以使用的标准格式。这种松散耦合使得 Istio 能够在多种环境下运行(例如,Kubernetes、Consul、Nomad),同时保持用于流量管理的相同操作界面。

  • Platform Adapter: 平台适配器。针对多种集群管理平台实现的控制器,得到API server的DNS服务注册信息(即service名与podIP的对应表)、入口资源以及存储流量管理规则的第三方资源
  • Abstract Model:维护了envoy中对service的规范表示。接收上层获取的service信息转化为规范模型
  • Envoy API:下发服务发现、流量规则到envoy上
  • Rules API:由运维人员管理。可通过API配置高级管理规则

                                                                   Pilot Architecture(官网文档[1])

 

4. Citadel

         Citadel 通过内置身份和凭证管理可以提供强大的服务间和最终用户身份验证。可用于升级服务网格中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。从 0.5 版本开始,Istio 支持基于角色的访问控制,以控制谁可以访问您的服务。

 

istio安装

    https://github.com/istio/istio,本文使用1.02版本,安装没有auth验证版本

    kubectl apply -f install/kubernetes/istio-demo.yaml

 

示例Bookinfo 应用

        部署一个样例应用,它由四个单独的微服务构成,用来演示多种 Istio 特性。这个应用模仿在线书店的一个分类,显示一本书的信息。页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。

    Bookinfo 应用分为四个单独的微服务:

  • productpage :productpage 微服务会调用 details 和 reviews 两个微服务,用来生成页面。
  • details :这个微服务包含了书籍的信息。
  • reviews :这个微服务包含了书籍相关的评论。它还会调用 ratings 微服务。
  • ratings :ratings 微服务中包含了由书籍评价组成的评级信息。

   reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

    下图展示了这个应用的端到端架构。

    

     启动应用:

        运行示例samples/bookinfo/platform/kube目录中 kubectl apply -f <(istioctl kube-inject -f bookinfo.yaml),结果如下:

    给应用定义 Ingress gateway:

       运行示例samples/bookinfo/networking目录中,kubectl apply -f bookinfo-gateway.yaml    

 

参考:

    https://istio.io/zh/docs/concepts/what-is-istio

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【kubernetes/k8s概念】istio 原理与架构 的相关文章

  • 百度移动软件开发面试题(20131018)

    1 new与malloc的区别 xff1f 分析 xff1a 一 new和malloc都是用于申请动态内存 new使用delete释放空间 xff0c malloc使用free释放 new和delete是C 43 43 中的运算符 xff0
  • Ubuntu 中apt update和upgrade 的区别

    转自https blog csdn net csdn duomaomao article details 77802673 简要说明 xff1a apt update xff1a 只检查 xff0c 不更新 xff08 已安装的软件包是否有
  • ubuntu下域名解析出问题的解决办法

    内网服务器配置了固定ip xff0c 未配置dns xff0c 临时需要接入外网时 xff0c 域名解析失败 xff0c 需要临时添加域名解析 操作如下 xff1a sudo vim etc resolv conf 然后底下插入你的好用的d
  • Git clone wiringPi出现Connection reset by peer的解决办法

    Git clone wiringPi出现Connection reset by peer的解决办法 小伙伴们按照正常的方法来安装强大的GPIO库wiringPi一般为如下几步 xff1a git span class hljs keywor
  • Linux内存占用过高?非也

    前言 今天在我的RPi2上测试GPIO程序 xff0c 忽然发现机器超卡 xff0c 重启之后依然如此 于是我top了一下发现了一个问题就是内存爆满 xff01 xff01 可我还啥都没干呢这是咋了 xff1f 于是我呵呵地开始查资料 xf
  • MPC控制笔记(一)

    转自 我的博客 笔记参考1 xff1a Understanding Model Predictive Control Youtube 带自动生成字幕 笔记参考2 xff1a Understanding Model Predictive Co
  • [强化学习笔记专题(二)]Nature DQN

    转自 我的博客 DQN Nature 一 算法流程 xff1a 定义可配置参数 episode 数量 M最大仿真时间 T xff0c g r
  • [强化学习论文] (HDQN) Integrating Temporal Abstraction and Intrinsic Motivation

    转自我的博客 论文 题目 Hierarchical Deep Reinforcement Learning Integrating Temporal Abstraction and Intrinsic Motivation 作者 Tejas
  • 强化学习专题笔记(一) 强化学习基础

    一 长期回报 对于问题的简化 xff0c 采用理想的MDP xff0c 简化问题到具有马尔科夫性 xff0c 对于马尔科夫决策过程而言 xff0c 在理想状态下 xff0c 每一个行动都要为最终的目标最大化长期回报 而努力 max t
  • [马士兵] 一. 初识JAVA 10.notepad++的安装_配置系统环境变量path

    1 安装记事本 xff1a notepad 2 安装 xff1a 一直下一步 3 打开记事本进行设置 xff1a 设置 首选项 xff1a 设置 语言格式设置 xff1a 4 打开notepad 43 43 xff08 1 xff09 方式
  • MPC控制笔记(一)

    转自 我的博客 笔记参考1 xff1a Understanding Model Predictive Control Youtube 带自动生成字幕 笔记参考2 xff1a Understanding Model Predictive Co
  • 【简单数学概念】为什么傅里叶变换能把时域变为频域?

    一 定义 频率 xff1a 在1秒时间内 xff0c 完成相同变化的次数 周期 xff1a 完成1次变化所消耗的时间 两者的关系为 xff1a 频率 61 1 周期 时域 xff1a 描述数学函数或物理信号对时间的关系 xff08 横轴是时
  • 一文彻底搞懂嵌入式中UART、RS232、RS485、CAN协议

    一文彻底搞懂嵌入式中UART RS232 RS485 CAN协议 之前分享过一些使用UART RS232 RS485 CAN协议进行传感器数据读取 伺服电机控制的文章 xff0c 但这些协议之间到底有什么不同 xff0c 工作原理又到底是什
  • ROS回调函数传参

    一 回调函数仅含单个参数 C 43 43 代码 void chatterCallback const std msgs String ConstPtr amp msg ROS INFO 34 I heard s 34 msg gt data
  • eclipse更改tomcat部署路径

    eclipse中默认的项目部署路径是在项目的路径 xff0c 不像myeclipse那样部署后项目在Tomcat的安装路径webapps下 这样虽然可以运行 xff0c 但是不方便开发和调试 xff0c 本文将介绍如何改变eclipse中T
  • OpenStack Neutron 对接OVN 使用 networking-ovn

    OVN是OVS的控制平面 xff0c 它给 OVS 增加了对虚拟网络的原生支持 xff0c 大大提高了 OVS 在实际应用环境中的性能和规模 使用neutron 配置mechanism drivers 为OVN时 xff0c 会有以下优点
  • Openstack Neutron 集成 SDN控制器

    Neutron 集成SDN控制器 一 xff0e Neutron的组成元素 Neutron server 可以理解为一个专门用来接收Neutron REST API 调用的服务器 xff0c 然后负责将不同的REST API分发到不同的ne
  • OpenStack云平台网络模式(flat\flatdhcp\vlan)及其工作机制

    网络 xff0c 是OpenStack的部署中最容易出问题的 xff0c 也是其结构中难以理清的部分 经常收到关于 OneStack部署网络方面问题和OpenStack网络结构问题的邮件 下面根据自己的理解 xff0c 谈一谈OpenSta
  • Openstack卷迁移状态图

  • OpenStack 存储热迁移

    随着存储技术的不断发展 xff0c 云计算中的存储后端种类越来越多 而在不同存储后端之间进行存储热迁移则是和普遍的需求 在 OpenStack 中 xff0c 云硬盘 xff08 volume xff09 支持在不同后端之间进行数据移 具体

随机推荐