服务网格——Istio

一、什么是服务网格

服务网格(Service Mesh)是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。

服务网格中体架构为控制平面+数据平面,控制平面负责与代理通信,下发策略和配置。数据平面就是直接处理入站和出战数据包,转发、路由、健康检查、负载均衡、认证、鉴权、产生监控数据等

服务网格部署网络结构图

其中绿色方块为应用服务,蓝色方块为Sidecar Proxy,应用服务之间通过Sidecar Proxy进行通信,图中所有蓝色部分就是形成的Service Mesh

二、Istio介绍

Istio出自名门,是一个由Google和IBM等公司开源的,最初设计目标实在kuberneters的基础上,以非侵入的方式为运行在集群中的微服务提供流量管理、安全加固、服务监控和策略管理等功能。

  • 流量管理:提供统一的流量治理功能,包括失败重试、超时、熔断/限流、路由管理、灰度发布、网关等功能。
  • 可观测性:透明化的实现指标监控、日志】链路追踪等功能
  • 策略控制:实现访问控制系统、遥测捕获、配额管理和计费等
  • 安全认证:无侵入式地为服务增加认证鉴权和加密通信的能力
  • 故障注入:支持随机像服务通信中注入故障(如模拟延时/网络中断),检测服务的可靠性

三、Istio架构

Istio在逻辑上分为控制平面和数据平面

控制平面:主要包括了 Pilot、Mixer、Citadel 和 Galley 共 4 个组件,主要功能是通过配置和管理 Sidecar 代理来进行流量控制,并配置 Mixer 去执行策略和收集遥测数据(Telemetry)

数据平面:由一组和业务服务成对出现的 Sidecar 代理(Envoy)构成,它的主要功能是接管服务的进出流量,传递并控制服务和 Mixer 组件的所有网络通信(Mixer 是一个策略和遥测数据的收集器,稍后会介绍)

Istio 选择Envoy作为Sidecar代理,Envoy本质上是一个为面向服务的建构而设计的7层代理和通信总线。Envoy将流量的行为和数据提取出来发送给Mixer组件,用以进行监控。

Envoy在网络控制方面的主要功能为:HTTP 7层路由、支持gRPC、HTTP/2、服务发现和动态配置,健康检查、高级负载均衡

在Kubernetes环境中,同一个Pod内的不同容器间共享网络栈,这一特性使得Sidecar可以接管进出这些容器的网络流量,这就是Sidecar模式的实现基础。Envoy是目前Istio默认的数据平面,实际上因为Istio灵活的架构,完全可以选择其他兼容的产品作为Sidecar。目前很多服务网格产品都可以作为Istio的数据平面并提供集成。

Pilot:是Istio实现流量管理的核心组件,它主要的作用是配置和管理Envoy代理。比如:可以为代理之间设置特定的流量规则,或者配置超时、重试、熔断这样的弹性能力。Pilot 会将控制流量行为的路由规则转换为 Envoy 的配置,并在运行时将它们广播到 Envoy。另外,Pilot 还能够把服务发现机制抽象出来并转换成 API 分发给 Envoy,使得后者具有服务发现的能力。
Pilot从平台获取服务信息,完成服务发现,获取istio的各项配置,转换成Envoy大力可读的格式并分发

Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS 协议。

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

四、Istio安装

4.1 使用istioctl安装

下载istio

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

转到 Istio 包目录

cd istio-1.22.2

安装目录包含:

  • samples/ 目录下的示例应用程序
  • bin/ 目录下的 istioctl 客户端二进制文件。

将 istioctl 客户端添加到路径(Linux 或 macOS):

$ export PATH=$PWD/bin:$PATH

安装istio。对于本次安装,我们采用 demo 配置组合。 选择它是因为它包含了一组专为测试准备的功能集合,另外还有用于生产或性能测试的配置组合。

istioctl install --set profile=demo -y

给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理:

kubectl label namespace default istio-injection=enabled

4.2 helm安装

配置Helm存储库

helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update

Helm 安装的一般语法是:

helm install <release> <chart> --namespace <namespace> --create-namespace [--set <other_parameters>]
  • <chart>:一个打好包的 Chart 路径,也可以是一个未打包的 Chart 目录或 URL。
  • <release>:一个用于标识和管理安装后的 Helm Chart 的名称。
  • <namespace>:要安装 Chart 的命名空间。

为 Istio 组件,创建命名空间 istio-system

kubectl create namespace istio-system

安装 Istio Base Chart,它包含了集群范围的自定义资源定义 (CRD),这些资源必须在部署 Istio 控制平面之前安装:

helm install istio-base istio/base -n istio-system --set defaultRevision=default

使用 helm ls 命令验证 CRD 的安装情况:

helm ls -n istio-system

安装 Istio Discovery Chart,它用于部署 istiod 服务:

helm install istiod istio/istiod -n istio-system --wait

验证 Istio Discovery Chart 的安装情况:

 helm ls -n istio-system

获取已安装的 Helm Chart 的状态,确保它已部署:

helm status istiod -n istio-system

检查 istiod 服务是否安装成功,确认其 Pod 是否正在运行:

kubectl get deployments -n istio-system --output wide

安装 Istio 的入站网关:

kubectl create namespace istio-ingress
helm install istio-ingress istio/gateway -n istio-ingress --wait

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叽叽喳喳323

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值