华为云云原生钻石集训营 第十二课:Istio控制面架构深度剖析

举报
菜鸟级攻城狮 发表于 2021/08/08 20:26:00 2021/08/08
【摘要】 华为云云原生钻石集训营 第十二课:Istio控制面架构深度剖析

前言:

通过黄金课程的学习,大家对lstio服务网格有一个整体的概念了解。

服务网格快速入门

如何实现灰度发布

基本的流量治理策略

本节课,将会深度介绍:

1.lstio系统架构和运行机制

2.Sidecar原理机制

课程目标:

学完本课程后,您将能够:

1.理解lstio整体架构及工作原理

2.理解lstio无侵入的Sidecar基本原理

3.理解lstio服务网格基本功能实现原理

目录:

1. lstio整体架构

2.透明的Sidecar原理

3. lstio基本功能实现原理


Pilot基本架构:

1.原生支持Kubernetes,List-Watch Service.Endpoint,Pod,Node,etc

2.扩展支持其他注册中心,以MCP协议的方式

3.xDS服务器向下对所有的数据面Sidecar提供xDS配置。

4.中间内核层负责生成xDS配置,每一种xDS对应有一种生成器,xDS Generator深入理解lstio API 与EnvoyAPI之间的转换。

Citadel基本架构

Citadel是服务网格的安全组件与NodeAgent一起为工作复杂提供证书的签发、轮换。

Citadel对下处理来自NodeAgent的CSR请求Citadel内部签发证书主要有两种形式:

本身作为CA自己签发

作为RA代理CSR请求

Galley基本架构

Galley负责配置管理相关的工作:

Admission Webhook提供配置校验

MCP Sink提供配置的摄取

Pilot-Agent基本架构

1.渲染Envoy的启动模板,生成Bootstrap配置文件,最后启动Envoy进程。

2. Envoy的守护功能

3.代理应用健康检查

4. NodeAgent SDS服务器,与Citadel协作

5. xDS代理

6. Local DNS服务

2.透明的Sidecar原理

Sidecar基本介绍

Sidecar自动注入,由Sidecar Injector负责,支持按照Namespace以及按照应用注入

业务代码不感知Sidecar的存在

Sidecar负责拦截应用的流量,并且提供流量治理、安全、监控三大功能

Sidecar流量拦截

lnitContainer或lstio-CNI设置iptables规则

流量拦截的流程

Envoy流量代理流程

LDS: istioctl pc listener {podname}

RDS: istioctl pc route {podname}

CDS: istioctl pc cluster {podname}

EDS: istioctl pc endpoint {podname}

3. Istio基本功能实现原理

流量治理基本API

ServiceEntry:定义Kubernetes集群外部服务,提供非K8s服务发现或者跨集群的服务发现。

VirtualService:定义一些路由匹配、灰度、故障注入等功能。

DestinationRule:提供目标服务的负载均衡策略以及连接管理,熔断等策略。

Gateway:为服务网格边缘提供基本的流量转发策略。

服务网格监控-Observability

lstio以非侵入的方式提供了以下遥测类型:

1.Metrics

2.Distributed Traces

3.Access Logs

服务网格监控-Trace

应用必须要从接收的请求中采集以下信息,并且发送给下一跳,这一点也证明服务网格并非完全零侵入

·x-request-id

·x-b3-traceid

·x-b3-spanid

·x-b3-parentspanid

·x-b3-sampled

·x-b3-flags

·x-ot-span-context

依赖Envoy Tracer支持多种Trace后端:Zipkin Lightstep Datadog StackdriverOpencensus Skywalking

服务网格监控-Trace

Trace包含一个或者多个Span,Span表示一个逻辑单元,拥有起止时间并且包含Metadata,每个Span又包含:

●Originating service cluster set via --service-cluster

Start time and duration of the request.

.Originating host set via --service-node

·Downstream cluster set via the x-envoy-downstream-service-cluster header.

·HTTPrequest URL, method, protocol and user-agent.

·Additional custom tags set via custom_tags.

·Upstream cluster name, observability name, and addres

·HTTP response status code.

·GRPC response status and message (if available).

·An error tag when HTTPstatus is 5xx or GRPC status is not "OK".

Istio作为一个service mesh开源项目,其中最重要的功能就是对网格中微服务之间的流量进行管理,包括服务发现,请求路由和服务间的可靠通信。Istio实现了service mesh的控制面,并整合Envoy开源项目作为数据面的sidecar,一起对流量进行控制。

Istio体系中流量管理配置下发以及流量规则如何在数据面生效的机制相对比较复杂,通过官方文档容易管中窥豹,难以了解其实现原理。本文尝试结合系统架构、配置文件和代码对Istio流量管理的架构和实现机制进行分析,以达到从整体上理解Pilot和Envoy的流量管理机制的目的。

总结:

1. 自动注入:在创建应用程序时自动注入 Sidecar代理Envoy程序。在 Kubernetes中创建 Pod时,Kube-apiserver调用控制面组件的 Sidecar-Injector服务,自动修改应用程序的描述信息并注入Sidecar。在 真正创建Pod时,在创建业务容器的Pod中同时创建Sidecar容器。
2. 流量拦截:在 Pod 初始化时设置 iptables 规则,基于配置的iptables规则拦截业务容器的Inbound流量和Outbound流量到Sidecar上。而应用程序感知不到Sidecar的存在,还以原本的方式 进行互相访问。上图中,流出frontend服务的流量会被 frontend服务侧的 Envoy拦截,而当流量到达forecast容器时,Inbound流量被forecast 服务侧的Envoy拦截。
3. 服务发现:服务发起方的 Envoy 调用控制面组件 Pilot 的服务发现接口获取目标服务的实例列表。上图中,frontend 服务侧的 Envoy 通过 Pilot 的服务发现接口得到forecast服务各个实例的地址。
4. 负载均衡:服务发起方的Envoy根据配置的负载均衡策略选择服务实例,并连接对应的实例地址。上图中,数据面的各个Envoy从Pilot中获取forecast服务的负载均衡配置,并执行负载均衡动作。
5. 流量治理:Envoy 从 Pilot 中获取配置的流量规则,在拦截到 Inbound 流量和Outbound 流量时执行治理逻辑。上图中, frontend 服务侧的 Envoy 从 Pilot 中获取流量治理规则,并根据该流量治理规则将不同特征的流量分发到forecast服务的v1或v2版本。
6. 访问安全:在服务间访问时通过双方的Envoy进行双向认证和通道加密,并基于服务的身份进行授权管理。上图中,Pilot下发安全相关配置,在frontend服务和forecast服务的Envoy上自动加载证书和密钥来实现双向认证,其中的证书和密钥由另一个管理面组件 Citadel维护。
7. 服务监测:在服务间通信时,通信双方的Envoy都会连接管理面组件Mixer上报访问数据,并通过Mixer将数据转发给对应的监控后端。上图中,frontend服务对forecast服务的访问监控指标、日志和调用链都可以通过这种方式收集到对应的监控后端。
8. 策略执行:在进行服务访问时,通过Mixer连接后端服务来控制服务间的访问,判断对访问是放行还是拒绝。上图中,Mixer 后端可以对接一个限流服务对从frontend服务到forecast服务的访问进行速率控制等操作。
9. 外部访问:在网格的入口处有一个Envoy扮演入口网关的角 色。上图中,外部服务通过Gateway访问入口服务 frontend,对 frontend服务的负载均衡和一些流量治理策略都在这个Gateway上执行。

·本课程讲解重点1: Istio整体架构

·本课程讲解重点2︰透明Sidecar深度剖析

·本课程讲解重点3: lstio的流量治理及监控实现及使用方式

参考链接:

lstio官方网站: https://istio.io/

ASM应用服务网格官方首页: https://support.huaweicloud.com/istio/

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。