Istio:架构与技术

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Istio:架构与技术

大纲

  • 前言
  • 为什么使用 Istio?
  • Service Mesh
  • Istio 架构基础
  • Istio 基本概念
  • Istio & Kubernetes:架构结合
  • 运行第一个Istio集群


前言:

在后 Kubernetes 时代,服务网格(Service Mesh)技术已完全取代了使用软件库实现网络运维(例如 Hystrix 断路器)的方式。

听说过 Service Mesh 并试用过 Istio 的人可能都会有以下几个疑问:

  • 为什么 Istio 一定要绑定 Kubernetes 呢?
  • Kubernetes 和 Service Mesh 分别在云原生中扮演什么角色?
  • Istio 扩展了 Kubernetes 的哪些方面?解决了哪些问题?
  • Kubernetes、Envoy(xDS 协议)与 Istio 之间又是什么关系?
  • 到底该不该上 Service Mesh?

这是因为

  • Kubernetes 的本质是应用的生命周期管理,具体来说就是部署和管理(扩缩容、自动恢复、发布)。
  • Kubernetes 为微服务提供了可扩展、高弹性的部署和管理平台。
  • Service Mesh 的基础是透明代理,通过 sidecar proxy 拦截到微服务间流量后再通过控制平面配置管理微服务的行为。
  • Service Mesh 将流量管理从 Kubernetes 中解耦,Service Mesh 内部的流量无需 kube-proxy 组件的支持,通过为更接近微服务应用层的抽象,管理服务间的流量、安全性和可观察性。
  • Envoy xDS 定义了 Service Mesh 配置的协议标准。
  • Service Mesh 是对 Kubernetes 中的 service 更上层的抽象,它的下一步是 serverless。

Istio 是一个功能十分丰富的 Service Mesh,它包括如下功能:

  • 流量管理:这是 Istio 的最基本的功能。
  • 策略控制:通过 Mixer 组件和各种适配器来实现,实现访问控制系统、遥测捕获、配额管理和计费等。
  • 可观测性:通过 Mixer 来实现。
  • 安全认证:Citadel 组件做密钥和证书管理


为什么使用 Istio?

Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。

Kubernetes提供了部署、升级和有限的运行流量管理能力,但并不具备熔断、限流降级、调用链治理等能力。Istio是基于Kubernetes构建的开放平台,它很好的补齐了Kubernetes在微服务治理上的诸多能力

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

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

Istio 为可扩展性而设计,可以满足不同的部署需求。

 

Service Mesh

Kubernetes

Kubernetes 提供平台基础设施层强大的容器编排与调度能力

  • – 服务部署与弹性伸缩: Deployment
  • – 服务拆分与服务发现: Service

Kubernetes 提供简单的负载均衡

  • – 负载均衡:基于IPVS或Iptables的简单均衡机制


Service Mesh

  • 治理能力独立( Sidecar)
  • 应用程序无感知
  • 服务通信的基础设施层


Istio问世

连接--Connect

支持智能控制服务流量以及服务间的API调用,通过灰度发布和持续测试优雅逐步的升级。

安全--Secure

智能化管理服务间通信的认证、鉴权和加密,为服务通信提供安全保障。

控制--Control

下发并执行流量控制策略,确保网络链路资源在客户侧的公平分配。

遥测--Observe

为服务提供丰富的、自动化的链路跟踪、监控和日志监控,可视化服务运行状态。


Istio关键能力


Istio 架构基础

Istio 架构基础

Istio service mesh 架构图

服务网格中分为控制平面数据平面,当前流行的两款开源的服务网格 Istio 和 Linkerd 实际上都是这种架构,只不过 Istio 的划分更清晰,而且部署更零散,很多组件都被拆分,控制平面中包括 Mixer、Pilot、Citadel,数据平面默认是用 Envoy;而 Linkerd 中只分为 Linkerd 做数据平面,namerd 作为控制平面。


控制平面

Istio 中的安全性涉及多个组件:

  • Citadel 用于密钥和证书管理
  • Pilot 将授权策略和安全命名信息分发给代理 -- 主要用于服务发现和服务配置(服务访问规则维护),Pilot中的adapter机制可以适配各种服务发现组件(Eureka、Consul、Kubenetes),最好的是Kubernetes
  • galley 验证规则(Pilot、Mixer、Citadel配置的规则)
  • Mixer 管理授权和审计

控制平面的特点:

  • 不直接解析数据包
  • 与数据平面中的代理通信,下发策略和配置
  • 负责网络行为的可视化
  • 通常提供 API 或者命令行工具可用于配置版本化管理,便于持续集成和部署


数据平面

数据平面的特点:

  • 通常是按照无状态目标设计的,但实际上为了提高流量转发性能,需要缓存一些数据,因此无状态也是有争议的
  • 直接处理入站和出站数据包,转发、路由、健康检查、负载均衡、认证、鉴权、产生监控数据等
  • 对应用来说透明,即可以做到无感知部署
  • Proxy默认就是Envoy
  • Sidecar 和周边代理 实现客户端和服务器之间的安全通信


Pilot

Pilot


Mixer

Mixer


Citadel

Citadel


Istio & Kubernetes: 架构结合

Istio & Kubernetes: 架构结合

 

 

Envoy:xDS 协议

下面这张图大家在了解 Service Mesh 的时候可能都看到过,每个方块代表一个服务的示例,例如 Kubernetes 中的一个 Pod(其中包含了 sidecar proxy),xDS 协议控制了 Istio Service Mesh 中所有流量的具体行为即将下图中的方块链接到了一起

xDS 协议是由 Envoy 提出的,在 Envoy v2 版本 API 中最原始的 xDS 协议只指 CDS、EDS、LDS 和 RDS。

下面我们以两个 service,每个 service 都有两个实例的例子来看下 Envoy 的 xDS 协议

Envoy xDS 协议

xDS 协议要点

最后总结下关于 xDS 协议的要点:

  • CDS、EDS、LDS、RDS 是最基础的 xDS 协议,它们可以分别独立更新的。
  • CDS 设置 Service Mesh 中有哪些服务。
  • EDS 设置哪些实例(Endpoint)属于这些服务(Cluster)。
  • LDS 设置实例上监听的端口以配置路由。
  • RDS 最终服务间的路由关系,应该保证最后更新 RDS。
  • 所有的发现服务(Discovery Service)可以连接不同的 Management Server,也就是说管理 xDS 的服务器可以是多个。
  • Envoy 在原始 xDS 协议的基础上进行了一些列扩充,增加了 SDS(秘钥发现服务)、ADS(聚合发现服务)、HDS(健康发现服务)、MS(Metric 服务)、RLS(速率限制服务)等 API。
  • 为了保证数据一致性,若直接使用 xDS 原始 API 的话,需要保证这样的顺序更新:CDS --> EDS --> LDS --> RDS,这是遵循电子工程中的先合后断(Make-Before-Break)原则,即在断开原来的连接之前先建立好新的连接,应用在路由里就是为了防止设置了新的路由规则的时候却无法发现上游集群而导致流量被丢弃的情况,类似于电路里的断路。


Envoy 配置文件


Istio 基本概念

Istio 中定义了如下的 CRD 来帮助用户进行流量管理:

  • Gateway:Gateway 描述了在网络边缘运行的负载均衡器,用于接收传入或传出的HTTP / TCP连接。
  • VirtualServiceVirtualService 实际上将 Kubernetes 服务连接到 Istio Gateway。它还可以执行更多操作,例如定义一组流量路由规则,以便在主机被寻址时应用。
  • --服务如何被访问?访问的时候给他做什么控制(虚拟服务让您配置如何在服务网格内将请求路由到服务,这基于 Istio 和平台提供的基本的连通性和服务发现能力。)
  • 虚拟服务在增强 Istio 流量管理的灵活性和有效性方面,发挥着至关重要的作用,通过对客户端请求的目标地址与真实响应请求的目标工作负载进行解耦来实现。
  • 虚拟服务同时提供了丰富的方式,为发送至这些工作负载的流量指定不同的路由规则。
  • DestinationRuleDestinationRule 所定义的策略,决定了经过路由处理之后的流量的访问策略。简单的说就是定义流量如何路由。这些策略中可以定义负载均衡配置、连接池尺寸以及外部检测(用于在负载均衡池中对不健康主机进行识别和驱逐)配置。
  • --目标服务的策略,包括目标服务的负载均衡,连接池管理等
    -- Istio延续了Kubernetes的语义,他是一个描述性的,不同于以前配置信息像维护数据样机械死板排列,通过背后或自身的逻辑组织起来。
  • EnvoyFilterEnvoyFilter 对象描述了针对代理服务的过滤器,这些过滤器可以定制由 Istio Pilot 生成的代理配置。这个配置初级用户一般很少用到。
  • ServiceEntry:默认情况下 Istio Service Mesh 中的服务是无法发现 Mesh 外的服务的,ServiceEntry 能够在 Istio 内部的服务注册表中加入额外的条目,从而让网格中自动发现的服务能够访问和路由到这些手工加入的服务。

Istio 中的流量管理


VirtualService


DestinationRule


Gateway


ServiceEntry


运行第一个Istio集群

helm方式安装

vim setup-istio.yaml

# istio就是一个插件化部署到k8s上

# 第一步:建立CRD规则

kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml

# 第二步:通过helm把istio的配置写入一个配置文件

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml

# 第三步:创建分区:istio-system

kubectl create namespace istio-system

# 第四步:创建istio

kubectl apply -f $HOME/istio.yaml

# 第五步:允许pod进来自动注入sidecar

kubectl label namespace default istio-injection=enabled

Istioctl

  • proxy-status:状态同步情况
  • proxy-config: envoy中具体规则查询
  • listener
  • route
  • cluster
  • endpoint
  • kube-inject



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1天前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
119 70
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
1月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
1月前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
175 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
2月前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
6天前
|
存储 缓存 关系型数据库
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
微信红包本质是小额资金在用户帐户流转,有发、抢、拆三大步骤。在这个过程中对事务有高要求,所以订单最终要基于传统的RDBMS,这方面是它的强项,最终订单的存储使用互联网行业最通用的MySQL数据库。支持事务、成熟稳定,我们的团队在MySQL上有长期技术积累。但是传统数据库的扩展性有局限,需要通过架构解决。
49 18
|
23天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
2月前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的转型力量####
本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的关键作用与实践路径。通过具体案例分析,展示了云原生如何赋能企业实现更高效的资源利用、更快的迭代速度以及更强的系统稳定性,为读者提供了一套可借鉴的实施框架与策略。 ####
35 0
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
89 1

热门文章

最新文章