首页 > 其他分享 >Istio 入门(六):版本控制

Istio 入门(六):版本控制

时间:2023-11-22 10:31:33浏览次数:36  
标签:版本控制 VirtualService 入门 Service Istio 流量 路由 属性

目录

  • VirtualService 和 DestinationRule
  • VirtualService 与 Service 的关系
  • VirtualService 和 DestinationRule 的关系
  • VirtualService 的定义
  • DestinationRule 的定义


完整系统教程电子书阅读地址:https://istio.whuanle.cn/

VirtualService 和 DestinationRule

VirtualService 与 Service 的关系

Istio 的 VirtualService 和 Kubernetes 的 Service 都是服务治理的组件,但它们有不同的作用和关系。

下面是它们之间的关系和区别:

定义和作用

Kubernetes 的 Service 主要负责服务发现和负载均衡,它为一组运行相同应用的 Pod 提供一个统一的访问入口。

而 Istio 的 VirtualService 主要负责定义流量路由规则,实现对服务间流量的细粒度控制。

关系

VirtualService 与 Service 是相互关联的。

在 VirtualService 的定义中,可以指定将流量路由到 Kubernetes 的 Service,VirtualService 会在 Service 的基础上增强流量管理和控制功能

请一定要注意这里。

定义 VirtualService 时,需要将流量路由指向到一个 Service。

route:
    - destination:
        host: productpage
        port:
          number: 9080
route:
    - destination:
        host: productpage.bookinfo.svc.cluster.local
        port:
          number: 9080

但是服务间请求的流量实际上不会到达 Service,因为流量输出到 Envoy 时,Istio 直接间流量转发到对应的 Pod。

强调过很多次,流量实际上不会到达 Service。

这里的 Service 为 Envoy 提供了一些关于 Pod 的基础信息,VirtualService 会在 Service 的基础上增强流量管理和控制功能

Istio 入门(六):版本控制_Pod

虽然 Istio 使用 Envoy 管理流量,但 Kubernetes 的 Service 仍然在 Istio 中发挥作用。Service 用于定义服务的基本属性,例如服务的名称和端口。Istio 使用这些信息从 Kubernetes API 服务器获取服务的端点,并将这些信息传递给 Envoy 。这样,Envoy 就可以知道如何路由到其他服务。

功能差异

Kubernetes 的 Service 提供了基本的负载均衡和服务发现功能,而 Istio 的 VirtualService 提供了更丰富的流量管理能力,如按权重分配流量、请求重试、故障注入、流量镜像等。

兼容性

Istio 可以与 Kubernetes 集群无缝集成,VirtualService 和 Service 可共同工作以实现更强大的服务治理功能。Istio 不仅支持 Kubernetes,还可以与其他平台(如 VM、Consul 等)一起使用。

总之,Istio 的 VirtualService 和 Kubernetes 的 Service 是相辅相成的,它们共同为服务提供了更强大的流量管理和控制功能。在使用 Istio 时,通常需要将 VirtualService 与 Kubernetes 的 Service 结合使用,以实现所需的服务治理目标。

VirtualService 和 DestinationRule 的关系

在 Istio 中,VirtualService 和 DestinationRule 是两个关键的自定义资源定义(CRD),它们用于配置和控制服务间的流量路由。

它们之间的关系可以概括为:VirtualService 定义了流量的路由规则,而 DestinationRule 定义了流量到达目的地后如何进行负载分发和连接池管理

VirtualService 用于定义流量的路由规则。当请求从一个服务到另一个服务时,VirtualService 可以指定如何将流量路由到不同的目的地(例如,不同的服务实例,版本或子集)。VirtualService 还可以根据请求的属性(如请求头、路径、来源等)对流量进行匹配和分发。此外,VirtualService 可以配置复杂的路由行为,如重试、超时和故障注入等。

DestinationRule 被用于控制流量的分发和连接池管理。DestinationRule 定义了服务的子集(即服务的不同版本或变体),并指定如何根据负载均衡策略(如轮询、随机、最少连接等)将流量分发到这些子集。此外,DestinationRule 还可以配置连接池设置(如最大连接数、空闲超时等)和传输层安全策略(如 TLS 设置)。

总之,VirtualService 和 DestinationRule 在 Istio 中共同实现了流量的精细控制。VirtualService 用于定义流量的路由规则,而 DestinationRule 则负责处理流量到达目的地后的负载分发和连接池管理。

VirtualService 的定义

VirtualService 的 spec 一共有五大类属性。

spec:  
  hosts: 
  gateways:  
  http:     
  tls: 
  tcp:

hosts:这是一个字符串列表,用于指定 VirtualService 应用的目标主机。这些主机可以是 Kubernetes Service 名称,也可以是外部服务的域名。流量将根据这些主机进行路由。

hosts:  
  - my-service.example.com

gateways:这是一个字符串列表,用于指定 VirtualService 应用的网关。Istio 网关用于配置进出网格的流量。如果省略此字段,默认情况下,VirtualService 仅适用于网格内部的流量。

gateways:  
  - my-gateway

http:此属性包含一个 HTTPRoute 列表,用于定义 HTTP 流量的路由规则。每个 HTTPRoute 可以包含匹配条件、路由目标、重试、超时等配置。

http 属性是 VirtualService spec 中的一个字段,它包含一个 HTTPRoute 列表,用于定义 HTTP 流量的路由规则。HTTPRoute 包含以下主要属性:

match:此属性包含一个 HTTPMatchRequest 列表,用于定义流量匹配条件。每个 HTTPMatchRequest 可以包含以下匹配条件:

  • uri:请求 URI 的匹配条件,可以是前缀匹配、精确匹配或正则表达式匹配。
  • method:请求方法(如 GET、POST 等)的匹配条件。
  • headers:请求头的匹配条件,可以是前缀匹配、精确匹配或正则表达式匹配。
  • queryParams:查询参数的匹配条件,可以是前缀匹配、精确匹配或正则表达式匹配。
  • sourceLabels:流量来源的 Pod 标签匹配条件。
  • gateways:流量来源的网关列表。

route:此属性包含一个 HTTPRouteDestination 列表,用于定义流量的路由目标。每个 HTTPRouteDestination 包含以下属性:

  • destination:流量的目的地,包括 host(目标主机名)、subset(目标服务子集)和 port(目标端口)。
  • weight:流量分发到此目的地的权重。所有路由目标的权重总和应为 100。

redirect:此属性用于配置 HTTP 重定向。可以指定重定向的 URI、Authority 和状态码。

rewrite:此属性用于配置 URI 和 Authority 的重写规则。

timeout:此属性用于配置请求的超时时间。

retries:此属性用于配置重试策略,包括尝试次数、每次尝试的超时时间和可重试的状态码。

fault:此属性用于配置故障注入,包括延迟注入和异常注入。这对于测试和模拟故障场景非常有用。

mirror:此属性用于配置流量镜像目的地。流量镜像允许将流量复制到另一个服务,用于观察和测试。

corsPolicy:此属性用于配置 CORS 策略,包括允许的来源、允许的方法、允许的头部等。

headers:此属性用于配置请求和响应头的操作,包括添加、修改和删除头部。

tls:此属性包含一个 TLSRoute 列表,用于定义基于 SNI 的 TLS 流量的路由规则。每个 TLSRoute 可以包含匹配条件和路由目标。

tcp:此属性包含一个 TCPRoute 列表,用于定义 TCP 流量的路由规则。每个 TCPRoute 可以包含匹配条件和路由目标。

下面是一个 VirtualService 示例。

apiVersion: networking.istio.io/v1alpha3  
kind: VirtualService  
metadata:  
  name: my-virtual-service  
spec:  
  hosts:  
  - my-service.example.com  
  gateways:  
  - my-gateway  
  http:  
  - match:  
    - uri:  
        prefix: /api/v1  
    route:  
    - destination:  
        host: my-service-v1  
      weight: 90  
    - destination:  
        host: my-service-v2  
      weight: 10  
    retries:  
      attempts: 3  
      perTryTimeout: 2s  
    timeout: 10s  
  - route:  
    - destination:  
        host: my-service-v1

DestinationRule 的定义

DestinationRule 的 spec 中一共有三大类属性。

spec:  
  host: my-service  
  trafficPolicy:  
  subsets:

host:此属性是一个字符串,用于指定目标主机名。它可以是 Kubernetes Service 名称,也可以是外部服务的域名。

trafficPolicy:此属性用于配置全局的流量策略,包括负载均衡策略、连接池设置和传输层安全策略。这些设置将应用于所有子集(除非子集中明确覆盖)。

subsets:此属性包含一个 Subset 列表,用于定义服务的子集(即服务的不同版本或变体)。每个 Subset 包含以下属性:

  • name:子集的名称。
  • labels:子集的标签选择器。这些标签用于选择对应子集的 Kubernetes Pod。
  • trafficPolicy:子集的流量策略。这些设置将覆盖全局的 trafficPolicy

下面是一个示例:

apiVersion: networking.istio.io/v1alpha3  
kind: DestinationRule  
metadata:  
  name: my-destination-rule  
spec:  
  host: my-service  
  trafficPolicy:  
    loadBalancer:  
      simple: LEAST_CONN  
    connectionPool:  
      tcp:  
        maxConnections: 100  
      http:  
        http2MaxRequests: 1000  
    tls:  
      mode: ISTIO_MUTUAL  
  subsets:  
  - name: v1  
    labels:  
      version: v1  
    trafficPolicy:  
      loadBalancer:  
        simple: ROUND_ROBIN  
  - name: v2  
    labels:  
      version: v2

痴者工良(https://whuanle.cn)



标签:版本控制,VirtualService,入门,Service,Istio,流量,路由,属性
From: https://blog.51cto.com/u_10006690/8512721

相关文章

  • Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践
    模板是Walrus的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署。用户可以使用HCL语言自定义创建模板,也可以一键复用Terraform社区中上万个成熟的Module。在本文中,我们将以阿里云EC2为例,介绍如何......
  • 七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境
    前言SQLite的一个重要的特性是零配置的、无需服务器,这意味着不需要复杂的安装或管理。它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。七天.NET8操作SQLite入门到实战详细教程第一天SQLite简介EasySQLite项目源码地址......
  • python入门笔记
    python入门注释,输入输出,分割,删除,f-strings,库注释单行注释#多行注释三对多/单引号包裹输入输出输入input()返回类型是字符串(不能直接运算)-->类型转换输出python每一个print后会默认换行,输出多行三对多/单引号包裹;,end=""不换行,引号里输入的东西可以输出;,sep=......
  • FPGA入门笔记005——阻塞赋值和非阻塞赋值的区别
    定义一个示例模组,代码如下:moduleblock_nonblock( Clk, Rst_n, a, b, c, out); inputClk; inputRst_n; inputa,b,c; outputreg[1:0]out; //out=a+b+c,out最大为3,所以设置为两位; //d=a+b; //out=d+c; reg[1:0]d;阻塞赋值:阻塞赋值1:......
  • Serilog入门- 自主查询官方文档
    Serilog入门:自主查询官方文档这是主代码存储库https://github.com/serilog/serilog这是Youtube一个简单的Serilog介绍https://www.youtube.com/watch?v=QjO2Jac1uQw看主文档,感觉啥都没说.无从下手其实Serilog有很多个功能模块,称为Sink.要实现什么功能去对......
  • FPGA入门笔记004——BCD计数器设计与使用
    1、设置一个最大值为10的四位计数器,Verilog代码如下:moduleBCD_Counter( Clk, Cin, Rst_n, Cout, q); inputClk; //计数器基准时钟 inputCin; //计数器进位输入 inputRst_n; //系统复位 // outputRegCout; //计数器进位输出 outputCout; //计数器进位输出 out......
  • 神经网络入门篇:直观理解反向传播(Backpropagation intuition)
    详细推导反向传播下图是逻辑回归的推导:回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)公式1.38:\[\left. \begin{array}{l} {x}\\ {w}\\ {b} \end{array} \right\} \implies{z={w}^Tx+b} \implies{\alpha=\sigma(z)} \implies{{L}\left(a,y......
  • 入门级Java日期的加减
    1.Date的加减1.1Date加减新手适用  不推荐使用。2.Calendar的日期加减 演示如下: 若不需要显示这样的,就如下: 运行结果,如下:  3.LocalDateTime的日期加减   运行结果如下: ......
  • Redis入门篇(一)
    初学Redis简介以及入门一.Redis的介绍1.什么是redis?Redis(RemoteDictionaryServer)是一个开源的内存数据结构存储系统。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。与传统的关系型数据库相比,Redis是一种更加快速高效的数据存储方式。Redis在内存中存......
  • Python小白入门指南:避免踩雷的10大错误!
    hello,大家好!新手小白踏入Python的大门有点像冒险,但别担心,我已经整理了一个超实用的入门指南,帮你规避学习过程中的十大雷区。这里有关于Python的错误你应该注意的建议,一起来看看吧!1.拼写错误小心prin和print的奇妙之旅!#错误示例prin("Hello,World!")#建议:尽量保......