istio是什么?

istio是一个用来连接、管理和保护微服务的开源的服务网格,服务网格是用于描述构成应用程序的微服务网络以及应用之间的交互,随着规模和复杂性的增长,服务网格越来越难以理解和管理,它的功能包括服务发现、负载均衡、故障恢复、指标和监控以及更加复杂的运维工作,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端身份验证等,istio解决了开发和运维人员从部署单个应用程序向分布式微服务架构过渡时所面临的挑战,Istio作为微服务网格中的佼佼者,它提供了洞察和操作控制微服务网格的能力,提供完整的解决方案以满足微服务应用程序的各种要求,从较高的层面来说,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力,它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里,它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口,Istio 多样化的特性使大家能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。istio目前仅支持在Kubernetes上的服务部署,但未来版本中将支持其他环境。

一、istio1.5较之前版本的重大更新

istiod 介绍

通过“拥抱单体”升级了 istio,将控制平面整合为一个新的二进制文件——istiod,极大地简化了安装、运行和升级 istio 的流程,更少的组件让运维人员的调试和理解也变得更简单,对于网格用户,istiod 不会改变他们的任何体验,所有 API 和运行时特性均与以前的组件一致。

新的可扩展性模型

Istio一直都是可扩展性最好的服务网格,其 Mixer 插件允许自定义策略和遥测,而 Envoy 扩展则允许数据平面自定义。在Istio1.5中,我们发布了一个新模型,该模型使用WebAssembly(Wasm)将Istio的可扩展性模型与Envoy统一。Wasm将使开发人员能够安全地分发和执行 Envoy 代理中的代码,以便与遥测系统、策略系统、路由控制甚至是消息体转换(transformthe body of a message)进行集成,它将更加灵活和高效,不再需要单独运行 Mixer 组件(这也简化了部署)。

更简单

使用istioctl的Istio命令行安装是安装的测试版,这适用于大多数用户,通过 Operator管理安装的Istio仍处于Alpha状态,关于istioctl,它有十几项改进,可以分析新项、更好的验证规则、更好的与CI系统集成,现在,它是了解正在运行 Istio 系统的状态、确保配置安全更改的必要工具。我们对 Istio 安全性进行了许多增强,使其更易于使用,通过自动 mTLS 的 beat 版 launch,现在配置mTLS 非常简单, 通过 Istio 1.4 中授权策略的beta 版 launch,我们移除了间接访问,并将其合并到单个 CRD,使得访问控制也得到了简化。

更好的可观察性

Telemetry v2 现在会报告原生 TCP 连接(除了HTTP)的度量标准,并且通过在遥测和日志中添加响应状态代码来增强了对 gRPC 工作负载的支持,现在默认使用 Telemetry v2。新的遥测系统将等待时间缩短了一半,90% 的等待时间从 7 毫秒 降低至3.3 毫秒。不仅如此,移除 Mixer 还使总的 CPU 消耗减少了 50%(0.55 vCPU,1000 个请求/每秒)。

二、istio控制面的核心组件

1.Pilot

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

2.Galley

Galley是Istio的配置验证、提取、处理和分发组件,为更好的解耦职责,它在lstio 1.1 后由仅负责配置验证升级成了控制面的配置管理中心,可以对接不同注册中心,用于为服务网格提供配置输入能力,它负责将其余的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。

3.Injector

在 K8s 体系里负责数据面的初始化相关工作,其中 lstio 的核心特性之一 Sidecar 自动注入正是依赖该组件;

4.Mixer

是 ilstio 里负责提供策略控制和遥测收集的组件,内部包含两个子组件 —— Telemetry 和 Policy,其中 Telemetry 负责监控相关的采集信息的数据聚合以用于对接各种监控后端,而Policy 负责在服务相互调用过程中对请求进行策略检查,例如鉴权等

5.Citadel

负责服务网格里安全相关功能,为服务和用户提供认证和鉴权、管理凭据和 RBAC 等相关能力;服务网格控制面各个组件被定义得清楚了然,设计之初就已经考虑到各种组件职责解耦、扩展性、安全性等,架构上看起来也非常清晰优雅。

三、istio架构图

istio1.5安装-较之前版本有重大改进_第1张图片

四、istio为什么回归单体?

简化运维和开发人员的维护成本,之前的Istio按功能整理成如下表格
istio1.5安装-较之前版本有重大改进_第2张图片

回归单体之后按功能整理成表格如下
istio1.5安装-较之前版本有重大改进_第3张图片

经过对比可以看到,Istiod是将原有的的其它组件统统塞入了pilot,而架构调整后的新pilot,即Istiod肩负了相比pilot更多的职责,单个二进制文件在部署方式上变得更加简单。

五、搭建istio的前提条件

在正式安装istio之前,请看下面的前提条件

1.在安装istio之前,需要有一个kubernetes集群

istio1.5已经在Kubernetes版本 1.14, 1.15, 1.16 中测试过。

假如没有kubernetes集群,可按如下链接参考安装:

http://mp.weixin.qq.com/s?__biz=MzU0NjEwMTg4Mg==&mid=2247483938&idx=1&sn=ee88518233ef902651e39b9e6a322c9d&chksm=fb638d37cc1404214209da89028b11cffe35a4d062dfaff51d7b66148c0aed140f14f4851471&token=65296373&lang=zh_CN#rd

2.检查pod和service的要求

官方的一个前提条件,此处理解即可,不需要做任何操作,作为 Istio 服务网格中的一部分,Kubernetes集群中的Pod和Service必须满足以下要求:

命名的服务端口:

Service 的端口必须命名。端口名键值对必须按以下格式:name: <protocol>[-<suffix>]。

Service 关联:

每个 Pod 必须至少属于一个Kubernetes Service,不管这个Pod是否对外暴露端口。如果一个Pod同时属于多个Kubernetes Service,那么这些Service不能同时在一个端口号上使用不同的协议(比如:HTTP 和 TCP)。带有app和version标签(label)的Deployment:建议给Deployment加上app和version标签,给使用 Kubernetes Deployment部署的Pod部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。
app标签:每个部署配置应该有一个不同的app标签并且该标签的值应该有一定意义。app label用于在分布式追踪中添加上下文信息。

version标签:这个标签用于在特定方式部署的应用中表示版本。

应用UID:

确保你的 Pod 不会以用户 ID(UID)为 1337 的用户运行应用。

NET_ADMIN功能:

如果你的集群执行 Pod 安全策略,必须给 Pod 配置NET_ADMIN功能。如果你使用Istio CNI 插件可以不配置。

六、下载 Istio1.5-在k8s集群的master节点操作

1.下载 Istio

下载内容将包含:安装文件、示例和istioctl命令行工具,访问Istio release页面下载与操作系统对应的安装文件,在macOS或Linux 系统中,也可以通过以下命令下载最新版本的 Istio:

curl -L https://istio.io/downloadIstio | sh -

2.切换到Istio包所在目录下

cd istio-1.5.1

3.安装目录包含如下内容:

install/kubernetes目录下,有Kubernetes相关的YAML安装文件

samples/目录下,有示例应用程序

bin/目录下,包含istioctl的客户端文件,istioctl工具用于手动注入 Envoy sidecar 代理。

4.将istioctl客户端路径增加到path环境变量中,macOS或Linux系统的增加方式如下:

export PATH=$PWD/bin:$PATH

七、安装istio-在k8s集群的master节点操作

如果访问不了docker hub,可以手动把镜像上传到kubernetes机器的各个节点上,或者把镜像传到harbor私有镜像仓库,然后

docker load-i istio_pilot_1_5_1.tar.gz

docker load-i istio_pilot_1_5_1.tar.gz

docker load-i istio_proxyv2_1_5_1.tar.gz

解压镜像即可

镜像所在的百度网盘链接如下:

链接:https://pan.baidu.com/s/1U9osuypeUx6ILjYs3K-04g

提取码:a3sm

1.使用istioctl安装istio,官方建议用此方法,此方法安装可用于生产环境

cd /root/istio-1.5.1

使用默认的配置文件安装istio,最简单的安装是使用istio默认的配置文件

istioctl manifest apply

查看是否安装成功

kubectl get pods -n istio-system

显示如下,说明istio安装成功

istio1.5安装-较之前版本有重大改进

istio1.5安装-较之前版本有重大改进_第4张图片

想要了解更多istio的更多生产案例,获取k8s、devops免费视频,可按如下方式进入技术交流群获取哈~~
istio1.5安装-较之前版本有重大改进_第5张图片

istio1.5安装-较之前版本有重大改进_第6张图片