热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【连载】微服务网格Istio(一)

Istio基础服务网格是用于描述构成应用程序的微服务网络以及应用之间的交互,服务网格的功能包括服务发现、负载均衡、故障恢复、指标和监控以及更加复杂的运维工作,例如AB测试、金丝雀发

Istio基础

服务网格是用于描述构成应用程序的微服务网络以及应用之间的交互,服务网格的功能包括服务发现、负载均衡、故障恢复、指标和监控以及更加复杂的运维工作,例如A/B测试、金丝雀发布、限流、访问控制和端到端身份验证等。

什么是微服务

微服务是用于构建应用程序的架构风格,一个大的系统可由一个或者多个微服务组成,微服务架构可将应用拆分成多个核心功能,每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作和出现故障的时候不会相互影响,简单来说,微服务架构是把一个大的系统按照不同的业务单元分解成多个职责单一的小系统,并利用简单的方法使多个小系统相互协作,组合成一个大系统,各个小的系统是独立部署的,它们之间是松耦合的。

什么是istio

​ istio是一个用来连接、管理和保护微服务的开源的服务网格, istio解决了开发和运维人员从部署单个应用程序向分布式微服务架构过渡时所面临的挑战,istio作为微服务网格中的佼佼者,它提供了洞察和操作控制微服务网格的能力,提供了完整的解决方案来满足微服务应用程序的各种要求,从较高的层面来说,istio有助于降低这些部署的复杂性,并减轻开发和运维团队的压力,istio它也是一个平台,可以集成任何日志、遥测和策略系统等API接口,istio多样化的特性使大家能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法,istio目前仅支持在Kubernetes上部署,未来版本中将支持其他环境。

为什么使用istio

​ 通过负载均衡、服务间的身份验证、监控等方法,istio可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改,通过在整个环境中部署一个特殊的sidecar代理为服务添加istio的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理istio,这包括:

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

istio的核心特性

Istio以统一的方式提供了许多跨服务网络的关键功能,核心功能如下:

流量管理

​ istio简单的规则配置和流量路由允许你控制服务之间的流量和API调用过程。istio简化了服务级属性(如熔断器、超时和重试)的配置,并且让它轻而易举的执行重要的任务(如 A/B 测试、金丝雀发布和按流量百分比划分的分阶段发布)。有了更好的对流量的可视性和开箱即用的故障恢复特性,这样就可以在问题产生之前捕获它们,无论面对什么情况都可以使调用更可靠,网络更健壮。详细内容参考后面流量管理章节(https://istio.io/latest/zh/docs/concepts/traffic-management/)。

安全

​ istio的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。istio提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。有了istio,服务通信在默认情况下就是受保护的,可以让你在跨不同协议和运行时的情况下实施一致的策略,而所有这些都只需要很少甚至不需要修改应用程序。istio是独立于平台的,可以与Kubernetes(或基础设施)的网络策略一起使用。但它更强大,能够在网络和应用层面保护pod到pod或者服务到服务之间的通信。详细内容参考后面安全章节(https://istio.io/latest/zh/docs/concepts/traffic-management/)。

可观察性

​ istio健壮的追踪、监控和日志特性让你能够深入的了解服务网格部署。通过istio的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的;而它的定制Dashboard 提供了对所有服务性能的可视化能力,并让你看到它如何影响其他进程。istio的Mixer(Mixer在istio1.5版本已经废弃了,功能整合到了istiod中) 组件负责策略控制和遥测数据收集。它提供了后端抽象和中介,将一部分istio与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。所有这些特性都使你能够更有效地设置、监控和加强服务的SLO。当然,底线是你可以快速有效地检测到并修复出现的问题。详细内容参考后面可观察行章节(https://istio.io/latest/zh/docs/concepts/observability/)。

平台支持

​ istio独立于平台,被设计为可以在各种环境中运行,包括跨云、内部环境、kubernetes、Mesos等等。你可以在Kubernetes或是装有Consul的Nomad环境上部署 istio。istio 目前支持:

  1. Kubernetes上的服务部署
  2. 基于Consul的服务注册
  3. 服务运行在独立的虚拟机上

整合和定制

​ Istio的策略实施组件可以扩展和定制,与现有的ACL、日志、监控、配额、审查等解决方案集成。

istio的架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBUNfeuA-1627395821673)(istio%E5%9F%BA%E7%A1%80.assets/image-20210707191635427.png)]

istio服务网格从逻辑上分为数据平面和控制平面。

  1. 数据平面由一组智能代理Envoy(Envoy参考https://www.envoyproxy.io/docs/envoy/latest/start/start)组成,被部署成sidecar。这些代理通过一个通用的策略和遥测中心Mixer(Mixer在istio1.5已经被废弃了,默认关闭Mixer,Mixer参考https://istio.io/zh/docs/reference/config/policy-and-telemetry/)传递和控制微服务之间的所有网络通信。
  2. 控制平面管理并配置代理来进行流量路由。此外,控制平面配置Mixer (Mixer已经在istio1.5中被废弃)来执行策略和收集遥测数据。
  3. istio1.5+中使用了一个全新的部署模式,重建了控制平面,将原有的多个组件整合为一个单体结构istiod,这个组件是控制平面的核心,负责处理配置、证书分发、sidecar 注入等各种功能。istiod是新版本中最大的变化,以一个单体组件替代了原有的架构,在降低复杂度和维护难度的同时,也让易用性得到提升。需要注意的一点是,原有的多组件并不是被完全移除,而是在重构后以模块的形式整合在一起组成了istiod。
  4. istio中的流量分为数据平面流量和控制平面流量。数据平面流量是指工作负载的业务逻辑发送和接收的消息。控制平面流量是指istio组件之间发送的配置和控制消息用来编排网格的行为。istio中的流量管理特指数据平面流量。

Istio组件

Envoy

​ istio使用Envoy代理(Envoy参考https://www.envoyproxy.io/docs/envoy/latest/)的扩展版本。Envoy是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy代理是唯一与数据平面流量交互的istio 组件。

Envoy代理被部署为服务的sidecar,在逻辑上为服务增加了Envoy的许多内置特性,例如:

  • 动态服务发现
  • 负载均衡
  • TLS终端
  • HTTP/2与gRPC代理
  • 熔断器
  • 健康检查
  • 基于百分比流量分割的分阶段发布
  • 故障注入
  • 丰富的指标

​ 这种sidecar部署允许istio提取大量关于流量行为的信号作为属性。反之,istio可以在Mixer(Mixer在istio1.5已经被废弃,这里就不介绍了)中使用这些属性来执行决策,并将它们发送到监控系统,以提供整个网格的行为信息。sidecar代理模型还允许向现有的部署添加istio功能,而不需要重新设计架构或重写代码。

由Envoy代理启用的一些istio的功能和任务包括:

  • 流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。
  • 网络弹性特性:重试设置、故障转移、熔断器和故障注入。
  • 安全性和身份验证特性:执行安全性策略以及通过配置 API 定义的访问控制和速率限制。

Pilot

​ Pilot为Envoy sidecar提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。Pilot将控制流量行为的高级路由规则转换为特定于环境的配置,并在运行时将它们传播到sidecar。Pilot将特定于平台的服务发现机制抽象出来,并将它们合成为任何符合Envoy API的sidecar都可以使用的标准格式。

下图展示了平台适配器和Envoy代理如何交互。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bGKTckAk-1627395821681)(istio%E5%9F%BA%E7%A1%80.assets/image-20210707192507850-5657109.png)]

  1. 平台启动一个服务的新实例,该实例通知其平台适配器。
  2. 平台适配器使用Pilot抽象模型注册实例。
  3. Pilot将流量规则和配置派发给Envoy代理,来传达此次更改。

​ 这种松耦合允许istio在Kubernetes、Consul或Nomad等多种环境中运行,同时维护相同的operator接口来进行流量管理。也可以使用istio的流量管理API来指示Pilot优化Envoy配置,以便对服务网格中的流量进行更细粒度地控制。

Galley

Galley是istio的配置验证、提取、处理和分发组件。它负责将其余的istio组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。

istio架构的设计目标

几个关键的设计目标形成istio的架构。这些目标对于使系统能够大规模和高性能地处理服务是至关重要的。

透明度最大化

​ 为了采用istio,运维人员或开发人员需要做尽可能少的工作,才能从系统中获得真正的价值。为此,istio可以自动将自己注入到服务之间的所有网络路径中。istio使用sidecar代理来捕获流量,并在可能的情况下,在不更改已部署的应用程序代码的情况下,自动对网络层进行配置,以实现通过这些代理来路由流量。在 Kubernetes中,代理被注入到pods中,通过编写‘iptables’规则来捕获流量。一旦 sidecar代理被注入以及流量路由被编程,istio就可以协调所有的流量。这个原则也适用于性能。当将istio应用于部署时,运维人员会看到所提供功能的资源成本增加地最小。组件和API的设计必须考虑到性能和可伸缩性。

可扩展性

​ 随着运维人员和开发人员越来越依赖于istio提供的功能,系统必须随着他们的需求而增长。当我们继续添加新特性时,最大的需求是扩展策略系统的能力,与其他策略和控制源的集成,以及将关于网格行为的信号传播到其他系统进行分析的能力。策略运行时支持用于接入其他服务的标准扩展机制。此外,它允许扩展其词汇表,允许根据网格生成的新信号执行策略。

可移植性

​ 使用istio的生态系统在许多方面都有所不同,istio 必须在任何云环境或本地环境中通过最小的努力就能运行起来。将基于istio的服务移植到新环境的任务必须是容易实现的。使用istio,你可以操作部署到多个环境中的单个服务。例如,可以在多个云上部署来实现冗余。

策略一致性

​ 将策略应用于服务之间的API调用提供了对网格行为的大量控制。然而,将策略应用在区别于API层上的资源也同样重要。例如,在机器学习训练任务消耗的CPU 数量上应用配额比在发起任务的请求调用上应用配额更有用。为此,istio使用自己的 API将策略系统维护为一个独立的服务,而不是将策略系统集成到sidecar代理中,从而允许服务根据需要直接与之集成。

安装Istio

在安装istio之前,需要一个Kubernetes集群,istio 1.10 已经在 Kubernetes 版本 1.14, 1.15, 1.16 、1.17、1.18、1.19、1.20中测试过。

下载istio

下载 Istio,下载内容将包含:安装文件、示例和istioctl命令行工具。

[root@kubernetes-master-01 ~]# wget https://github.com/istio/istio/releases/download/1.10.2/istio-1.10.2-linux-amd64.tar.gz
[root@kubernetes-master-01 ~]# tar -xf istio-1.10.2-linux-amd64.tar.gz  
[root@kubernetes-master-01 ~]# mv istio-1.10.2/bin/istioctl /usr/local/bin/

部署istio

[root@kubernetes-master-01 istio-1.10.2]# istioctl manifest apply --set profile=demo
This will install the Istio 1.10.2 demo profile with ["Istio core" "Istiod" "Ingress gateways" "Egress gateways"] components into the cluster. Proceed? (y/N) y
✔ Istio core installed                                                                                                                                                                                        
✔ Istiod installed                                                                                                                                                                                            
✔ Egress gateways installed                                                                                                                                                                                   
✔ Ingress gateways installed                                                                                                                                                                                  
✔ Installation complete                                                                                                                                                                                       Thank you for installing Istio 1.10.  Please take a few minutes to tell us about your install/upgrade experience!  https://forms.gle/KjkrDnMPByq7akrYA

卸载

# 安装时不需要执行
[root@kubernetes-master-01 ~]# istioctl manifest generate --set profile=demo | kubectl delete -f -

查看部署状态

[root@kubernetes-master-01 ~]# kubectl get pods -n istio-system 
NAME                                    READY   STATUS    RESTARTS   AGE
istio-egressgateway-78cb6c4799-nn2zw    1/1     Running   0          9m34s
istio-ingressgateway-59644976b5-z8vmd   1/1     Running   0          9m34s
istiod-664799f4bc-7w8vr                 1/1     Running   0          10m

安装kiali图形化界面

[root@kubernetes-master-01 istio-1.10.2]# kubectl apply -f samples/addons/kiali.yaml 
[root@kubernetes-master-01 istio-1.10.2]# kubectl apply -f samples/addons/prometheus.yaml 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfIvZKi1-1627395821683)(istio%E5%9F%BA%E7%A1%80.assets/image-20210708130300179-5720581.png)]

连载Istio, 请贯注微信公众号:新猿技术生态圈,及时学习更高级内容。


推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
  • linux系统重装win7 磁盘格式为gpt,怎么更改为,win10改win7怎么将硬盘格式由gpt转mbr?...
    [文章导读]随着近两年发布的笔记本、台式机等预装的全是win10系统,但有些用户还是想用win7,所以就有很多用户问win10怎么改win7系统呀&#x ... [详细]
  • 弹性云服务器ECS弹性云服务器(ElasticCloudServer)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境 ... [详细]
author-avatar
手机用户2602909133
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有