云原生Istio架构和组件介绍 2

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 云原生Istio架构和组件介绍

2 Istio组件介绍

2.1 Pilot

Pilot在Istio架构中必须要有

思考: 为什么Envoy能够服务发现?并且Envoy为什么可以流量控制?

就是因为Pilot存在

什么是Pilot

Pilot类似传统C/S架构中的服务端Master,下发指令控制客户端完成业务功能。和传统的微服务架构对比,Pilot 至少涵盖服务注册中心和向数据平面下发规则 等管理组件的功能。

服务注册中心

如图下图所示,Pilot 为 Envoy sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。
Pilot本身不做服务注册,它会提供一个API接口,对接已有的服务注册系统,比如Eureka,Etcd等。
说白了,Pilot可以看成它是Sidecar的一个领导

42666b5263ba4ba4993b635382d622dc.png

(1)Platform Adapter是Pilot抽象模型的实现版本,用于对接外部的不同平台

(2)Polit定了一个抽象模型(Abstract model),处理Platform Adapter对接外部不同的平台, 从特定平台细节中解耦

(3)Envoy API负责和Envoy的通讯,主要是发送服务发现信息和流量控制规则给Envoy


流程总结: service服务C会注册到Pilot注册中心平台适配器(Platform Adapter)模块上(假如对接的是Eureka, 那么service服务C会注册到Eureka里面),然后抽象模型(Abstract model)进行平台细节的解耦并且用于处理Platform Adapter对接外部的不同平台,最后通过Envoy API负责和Envoy的通讯,主要是发送服务发现信息和流量控制规则给Envoy

数据平面下发规则

Pilot 更重要的一个功能是向数据平面下发规则,Pilot 负责将各种规则转换换成 Envoy 可识别的格式,通过标准的 协议发送给 Envoy,指导Envoy完成动作。在通信上,Envoy通过gRPC流式订阅Pilot的配置资源。
Pilot将表达的路由规则分发到 Evnoy上,Envoy根据该路由规则进行流量转发,配置规则和流程图如下所示。

规则如下:

# http请求
http:
-match: # 匹配
 -header: # 头部
   cookie:
   # 以下cookie中包含group=dev则流量转发到v2版本中
    exact: "group=dev"
  route:  # 路由
  -destination:
    name: v2
  -route:
   -destination:
     name: v1 

2.2 Mixer

Mixer在Istio架构中不是必须的

Mixer分为Policy和Telemetry两个子模块,Policy用于向Envoy提供准入策略控制,黑白名单控制,速率限制等相关策略;Telemetry为Envoy提供了数据上报和日志搜集服务,以用于监控告警和日志查询。

Telemetry介绍

Mixer是一个平台无关的组件。Mixer的Telemetry 在整个服务网格中执行访问控制和策略使用,并从 Envoy 代理和其他服务收集遥测数据,流程如下图所示。

  • 遥测报告上报,比如从Envoy中收集数据[请求数据、使用时间、使用的协议等],通过Adapater上

报给Promethues、Heapster等

说白了,就是数据收集,然后通过adapter上传到监控容器里面

policy介绍

policy是另外一个Mixer服务,和istio-telemetry基本上是完全相同的机制和流程。数据面在转发服务的请求前调用istio-policy的Check接口是否允许访问,Mixer 根据配置将请求转发到对应的 Adapter 做对应检查,给代理返回允许访问还是拒绝。可以对接如配额、授权、黑白名单等不同的控制后端,对服务间的访问进行可扩展的控制。

  • 策略控制:检查请求释放可以运行访问

2.3 Citadel

Citadel在Istio架构中不是必须的

Istio的认证授权机制主要是由Citadel完成,同时需要和其它组件一起配合,参与到其中的组件还有Pilot、Envoy、Mixer,它们四者在整个流程中的作用分别为:


Citadel:用于负责密钥和证书的管理,在创建服务时会将密钥及证书下发至对应的Envoy代理中;

Pilot: 用于接收用户定义的安全策略并将其整理下发至服务旁的Envoy代理中;

Envoy:用于存储Citadel下发的密钥和证书,保障服务间的数据传输安全;

Mixer: 负责核心功能为前置条件检查和遥测报告上报;

流程如下

具体工作流程可描述如下:


Kubernetes某集群节点新部署了服务Service,此时集群中有两个Pod被启动,每个Pod由Envoy代理容器和Service容器构成,在启动过程中Istio的Citadel组件会将密钥及证书依次下发至每个Pod中的Envoy代理容器中,以保证后续服务A,B之间的安全通信。

用户通过Rules API下发安全策略至Pilot组件,Pilot组件通过Pilot-discovery进程整理安全策略中Kubernetes服务注册和配置信息并以Envoy API方式暴露给Envoy。

Pod 中的Envoy代理会通过Envoy API方式定时去Pilot拉取安全策略配置信息,并将信息保存至Envoy代理容器中。

当pod内的服务相互调用时,会调用各自Envoy容器中的证书及密钥实现服务间的通信,同时Envoy容器还会根据用户下发的安全策略进行更细粒度的访问控制。

Mixer在整个工作流中核心功能为前置条件检查和遥测报告上报,在每次请求进出服务时,服务中的Envoy代理会向Mixer发送check请求,检查是否满足一些前提条件,比如ACL检查,白名单检查,日志检查等,如果前置条件检查通过,处理完后再通过Envoy向Mixer上报日志,监控等数据,从而完成审计工作。

使用场景:


在有一些场景中,对于安全要求是非常高的,比如支付,所以Citadel就是用来保证安全的。

回顾kubernetes API Server的功能:
* 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
* 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
* 资源配额控制的入口;
* 拥有完备的集群安全机制.

总结:

用于负责密钥和证书的管理,在创建服务时会将密钥及证书下发至对应的Envoy代理中

2.4 Galley

Galley在istio架构中不是必须的

Galley在控制面上向其他组件提供支持。Galley作为负责配置管理的组件,并将这些配置信息提供给管理面的 Pilot和 Mixer服务使用,这样其他管理面组件只用和 Galley打交道,从而与底层平台解耦。


galley优点


配置统一管理,配置问题统一由galley负责

如果是相关的配置,可以增加复用

配置跟配置是相互隔离而且,而且配置也是权限控制,比如组件只能访问自己的私有配置

MCP协议


Galley负责控制平面的配置分发主要依托于一一种协议,这个协议叫(MCP)


MCP提供了一套配置订阅和分发的API,里面会包含这个几个角色:


source: 配置的提供端,在istio中Galley即是source 说白了就是Galley组件,它提供yaml配置

sink:配置的消费端,istio组件中Pilot和Mixer都属于sink

resource: source和sink关注的资源体,也就是yaml配置

b85d496192e642419988d7803a94b6bc.png

Galley 代表其他的 Istio 控制平面组件,用来验证用户编写的 Istio API 配置。Galley 接管 Istio 获取配置、 处理和分配组件的顶级责任。它将负责将其他的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节中隔离开来。
说白了:这样其他控制平面(Pilot和 Mixer)面组件只用和 Galley打交道,从而与底层平台解耦。

2.5 Sidecar-injector

Sidecar-injector 是负责自动注入的组件,只要开启了自动注入,那么在创建pod的时候就会自动调用Sidecar-injector 服务


配置参数:istio-injection=enabled,我们后面会有案例演示


在istio中sidecar注入有两种方式


需要使用istioctl命令手动注入 (不需要配置参数:istio-injection=enabled)

基于kubernetes自动注入(配置参数:istio-injection=enabled)

手动注入和自动注入会在istio安装之后案例演示


两种区别:


手动注入需要每次在执行配置都需要加上istioctl命令


自动注入只需要做一下开启参数即可


sidecar模式具有以下优势


把业务逻辑无关的功能抽取出来(比如通信),可以降低业务代码的复杂度

sidecar可以独立升级、部署,与业务代码解耦

注入流程


在 Kubernetes环境下,根据自动注入配置,Kube-apiserver在拦截到 Pod创建的请求时,会调用自动注入服务 istio-sidecar-injector 生成 Sidecar 容器的描述并将其插入原 Pod的定义中,这样,在创建的 Pod 内, 除了包括业务容器,还包括 Sidecar容器。这个注入过程对用户透明,用户使用原方式创建工作负载。

总结:sidecar模式具有以下优势

  • 把业务逻辑无关的功能抽取出来(比如通信),可以降低业务代码的复杂度
  • sidecar可以独立升级、部署,与业务代码解耦

2.6 Proxy(Envoy)

Proxy是Istio数据平面的轻量代理。
Envoy是用C++开发的非常有影响力的轻量级高性能开源服务代理。作为服务网格的数据面,Envoy提供了动态服务发现、负载均衡、TLS、HTTP/2 及 gRPC代理、熔断器、健康检查、流量拆分、灰度发布、故障注入等功能。
Envoy 代理是唯一与数据平面流量交互的 Istio 组件。

Envoy组件解析

为了便于理解Istio中Envoy与服务的关系,如图所示:

一个pod里面运行了一个Envoy容器和service A容器,而Envoy容器内部包含了两个进程,分别是Pilot-agent和Envoy两个进程

pilot-agent

pilot-agent跟Envoy打包在同一个docker镜像里面

  • pilot-agent作用
* 生成envoy配置
* 启动envoy
* 监控envoy的运行状态,比如envoy出错是pilot-agent负责重启envoy,huozhe envoy配置变更之后reload envoy

Envoy

负责拦截pod流量,负责从控制平面pilot组件获取配置和服务发现,上报数据给mixer组件

2.7 Ingressgateway

ingressgateway 就是入口处的 Gateway,从网格外访问网格内的服务就是通过这个Gateway进行的。ingressgateway比较特别,是一个Loadbalancer类型的Service,不同于其他服务组件只有一两个端口,ingressgateway 开放了一组端口,这些就是网格内服务的外部访问端口。
网格入口网关ingressgateway和网格内的 Sidecar是同样的执行体,也和网格内的其他 Sidecar一样从 Pilot处接收流量规则并执行。因为入口处的流量都走这个服务。

流程图如下

由于gateway暴露了一个端口,外部的请求就可以根据这个端口把请求发给gateway了然后由gateway把请求分发给网格内部的pod上

2.8 其他组件

在Istio集群中一般还安装grafana、Prometheus、Tracing组件,这些组件提供了Istio的调用链、监控等功能,可以选择安装来完成完整的服务监控管理功能。

总结

主要介绍了一些常见的istio组件,其中有一些组件是istio默认就已经使用了,有一些组件我们后面也会来演示。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
23天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
21天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
21天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
21天前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
36 0
|
22天前
|
Cloud Native 持续交付 云计算
云原生架构的崛起:企业数字化转型的加速器
在当今快速发展的技术环境中,企业正面临着前所未有的变革压力。本文深入探讨了云原生架构如何成为推动企业数字化转型的关键力量。通过分析其核心概念、优势以及实施策略,本文旨在为读者提供对云原生技术的全面理解,展示其在现代企业中不可或缺的作用。
26 0
|
1月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
43 3
|
1月前
|
Cloud Native 持续交付 云计算
云原生架构的演进与挑战
随着云计算技术的不断发展,云原生架构已成为企业数字化转型的重要支撑。本文深入探讨了云原生架构的概念、发展历程、核心技术以及面临的挑战,旨在为读者提供一个全面了解云原生架构的视角。通过分析Kubernetes、Docker等关键技术的应用,以及微服务、持续集成/持续部署(CI/CD)等实践案例,本文揭示了云原生架构在提高应用开发效率、降低运维成本、增强系统可扩展性等方面的显著优势。同时,也指出了云原生架构在安全性、复杂性管理等方面所面临的挑战,并提出了相应的解决策略。
|
24天前
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
33 3
|
25天前
|
Cloud Native API 持续交付
云原生时代的微服务架构设计
随着云计算的蓬勃发展,云原生概念逐渐成为IT行业的热点。本文将通过深入浅出的方式,介绍在云原生环境下,如何设计一个高效、可扩展的微服务架构。文章不仅涉及理论概念,还将结合实际代码示例,帮助读者理解微服务架构的核心要素和设计原则,以及如何在云平台上实现这些设计。
|
1月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。