searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

开源ServiceMesh项目istio介绍

2024-05-29 02:47:10
13
0

1. 服务网格(Service Mesh)介绍:

服务网格(Service Mesh)是一种微服务架构中的基础设施层,它提供了一种在微服务之间进行通信和管理的方法。服务网格的核心思想是将网络通信、安全、监控和可扩展性等功能从业务逻辑中解耦出来,使得开发者可以专注于编写业务代码,而不必关心底层的网络通信细节。

特点:

1. 微服务间通信的抽象:服务网格通过代理(通常是 Envoy、Linkerd 等)来处理微服务之间的所有网络通信,使得开发者不需要在业务代码中处理这些细节。

2. 透明性:服务网格对应用来说是透明的,不需要修改业务代码即可实现网络通信、安全策略、监控等功能。

3.控制与数据分离:服务网格将控制平面(负责配置和策略)与数据平面(负责数据传输)分离,使得系统更加灵活和可扩展。

4. 细粒度的流量管理:服务网格允许开发者对服务间的流量进行细粒度的控制,包括路由、负载均衡、故障恢复等。

5. 安全:服务网格提供服务间通信的加密、认证和授权,确保通信的安全性。

6. 可观察性:服务网格可以收集服务间的通信数据,提供日志、监控和追踪信息,帮助开发者了解服务的行为和性能。

7. 多语言和平台支持:服务网格通常与应用程序语言无关,可以支持多种编程语言和平台。

组件:

1. Sidecar 代理:每个微服务实例旁边运行的代理,负责处理该服务的所有入站和出站流量。

2. 控制平面:负责配置和策略管理的组件,可以动态地调整服务网格的行为。

3. 服务发现:服务网格需要一个服务发现机制来动态地了解服务实例的地址和状态。

4. 配置 API:控制平面通过 API 与服务网格的其他组件通信,传递配置和策略。

应用场景:

微服务架构:在微服务架构中,服务网格可以帮助管理和监控服务间的复杂通信。

云原生应用:服务网格与 Kubernetes 等容器编排平台集成,为云原生应用提供网络通信和管理。

多语言和多平台:服务网格支持多种编程语言和平台,使得不同技术栈的应用可以统一管理。

实现:

Istio:提供流量管理、安全、可观察性和策略执行等功能。

Linkerd:由 Buoyant 公司开发,专注于简单性和性能。

Consul:由 HashiCorp 开发,提供服务网格功能和服务发现。

AWS App Mesh:AWS 提供的服务网格,用于微服务架构的应用程序。

 

2. Istio介绍

主要功能:

1.流量管理:Istio 允许开发者对服务间的流量进行细致的控制,包括动态请求路由、负载均衡、故障处理(如超时、重试和熔断)以及流量镜像等。

2.安全:Istio 提供了传输层认证(TLS)和运行时终端用户认证,支持双向 TLS(mTLS)来确保服务间通信的安全。此外,它还提供基于角色的访问控制(RBAC)来对服务访问进行授权。

3. 可观察性:Istio 可以收集和可视化指标,日志和追踪信息,帮助开发者更好地理解服务的行为。

4. 策略执行:Istio 的 Mixer 组件负责在服务间交互时实施策略,如配额管理、ACLs(访问控制列表)等。

架构:

 

Istio的架构分为两个主要部分:数据平面和控制平面。

数据平面:由一组作为 Sidecar 代理与业务服务成对出现的 Envoy 代理构成。这些代理接管服务的网络流量,负责所有的网络通信。

控制平面:由多个组件组成,包括 Pilot、Mixer、Citadel 和 Galley。这些组件负责管理 Envoy 代理的行为,执行安全策略,收集遥测数据等。

Istio 的设计哲学强调透明性、解耦和扩展性,使其能够轻松集成到现有的微服务架构中,而无需对业务代码进行修改。此外,Istio 支持多种平台,包括 Kubernetes,使其能够在不同的云环境中灵活部署。

安装:

1. 转到istio 下载页面,下载针对您操作系统的安装文件, 或用自动化工具下载并提取最新版本(Linux 或 macOS):

2. 转到 Istio 包目录。例如,如果包是 istio-1.22.0:
$ cd istio-1.22.0
安装目录包含:
samples/ 目录下的示例应用程序
bin/ 目录下的 istioctl 客户端二进制文件。


3. 将 istioctl 客户端添加到路径(Linux 或 macOS):
$ export PATH=$PWD/bin:$PATH

4. 安装Istio
$ istioctl install --set profile=demo -y
给命名空间添加标签,指示Istio在部署应用的时候,自动注入Envoy边车代理:
$ kubectl label namespace default istio-injection=enabled  namespace/default labeled

 

istio用例介绍:

1. VirtualService:用于配置流量路由规则,实现流量控制。

创建一个名为 frontend-backend-routing 的 VirtualService,将流量从 frontend 服务到 backend 服务的比例设为 90% 到 10%。配置如下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: frontend-backend-routing
spec:
  hosts:
    - frontend
  http:
    - route:
        - destination:
            host: backend
          weight: 90
        - destination:
            host: frontend

 

2. DestinationRule:用于配置服务间的安全性策略,启用双向 TLS 加密。

创建一个名为 backend-mtls 的 DestinationRule,启用 backend 服务的双向 TLS 加密。示例 YAML 配置如下

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: backend-mtls
spec:
  host: backend
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

3.熔断

创建一个名为 backend-circuit-breaker 的 DestinationRule,配置熔断规则,如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: backend-circuit-breaker
spec:
  host: backend
  trafficPolicy:
    connectionPool:
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1
    outlierDetection:
      consecutiveErrors: 5
      interval: 1s
      baseEjectionTime: 30s
      maxEjectionPercent: 100

在上述配置中,我们配置了 backend 服务的熔断规则。consecutiveErrors 指定了连续错误的阈值。当 backend 服务连续出现 5 次错误时,将触发熔断。interval 指定了检测错误的间隔时间。在本例中,每秒检测一次错误。baseEjectionTime 指定了熔断后服务被隔离的最短时间。在本例中,熔断后服务将被隔离 30 秒。maxEjectionPercent 指定了最大的被熔断的服务实例百分比。在本例中,设置为 100%,表示所有实例都可能被熔断。在 Istio 中配置熔断规则,以防止服务雪崩效应

0条评论
0 / 1000
秦****扬
3文章数
0粉丝数
秦****扬
3 文章 | 0 粉丝