完整系统教程电子书阅读地址: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 使用 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

Istio 入门(六):版本控制的更多相关文章

  1. DevExpress XtraReports 入门六 控件以程序方式创建一个 交叉表 报表

    原文:DevExpress XtraReports 入门六 控件以程序方式创建一个 交叉表 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助 ...

  2. Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...

  3. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  4. 网络编程懒人入门(六):深入浅出,全面理解HTTP协议

    本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广 ...

  5. C#基础入门 六

    C#基础入门 六 静态类进阶 静态构造方法 用于初始化任何静态数据,或用于执行仅需执行一次的特定操作,在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数,静态构造方法是无参数的. publ ...

  6. Python爬虫入门六之Cookie的使用

    大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...

  7. Jmeter Web 性能测试入门 (六):Jmeter 解析 response 并传递 value

    解析response中的内容,并把获取到的value传递到后续的request中,常用的方法就是在想要解析response的request上添加后置处理器 本章介绍两种常用的组件 BeanShell ...

  8. 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息

    title: 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息 date: 2020-03-16 20:00:00 categories: python tags: crawler ...

  9. 服务网格Istio入门-详细记录Kubernetes安装Istio并使用

    我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 服务网格Istio Istio是开源的Service Mesh实现,一般用于Kubernetes ...

  10. 【Istio实际操作篇】Istio入门,10分钟快速安装

    @ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...

随机推荐

  1. TortoiseGit使用Cherry Pick遇到的问题及解决方案

    TortoiseGit的Cherry Pick 比如从master pick某一个commit 记录到其它分支(release) pick的操作方法:切到分支,点击 show log,然后在log d ...

  2. 对敏感操作的二次认证 —— 详解 Sa-Token 二级认证

    一.需求分析 在某些敏感操作下,我们需要对已登录的会话进行二次验证. 比如代码托管平台的仓库删除操作,尽管我们已经登录了账号,当我们点击 [删除] 按钮时,还是需要再次输入一遍密码,这么做主要为了两点 ...

  3. Blazor前后端框架Known功能介绍:系统安装激活及自定义

    本章介绍系统安装与激活及其自定义功能. 概述 框架内置简单的系统安装功能. 录入企业编码.名称.系统名称.产品密钥.管理员密码信息完成安装. 可自定义高级安装功能,如安装数据库等您产品所需的安装信息. ...

  4. 详解nvim内建LSP体系与基于nvim-cmp的代码补全体系

    2023年,nvim以及其生态已经发展的愈来愈完善了.nvim内置的LSP(以及具体的语言服务)加上众多插件,可以搭建出支持各种类型语法检查.代码补全.代码格式化等功能的IDE.网络上关于如何配置的文 ...

  5. Excel 进度图表制作

    Excel 改变图标的形状 最终效果 过程有点杂乱,不再重新整理,基本照着下面的设就完事了. 未完成的想用柱型,和已完成的相结合 右击,更改表类型 选择簇状柱形图.次标轴 注意主.次坐标 进度改为折线 ...

  6. Llama2 论文中译版——开放式基础和微调聊天模型

    Llama 2:开放式基础和微调聊天模型 写在前头 因为最近一直在使用 LLM 工具,所以在学习 Llama 2:开放式基础和微调聊天模型 这篇论文的期间,顺手将内容翻译了过来. 整片译文是由 Cha ...

  7. 牛客小白月赛64 C题 题解

    题目链接 题意描述 这一题的意思其实就是,让你构造一个\(n * k\)的矩阵,使得第 i 列的总和为 i ,同时使得:每一列的任意两个数之间的差不大于1,且任意两行之间的总和差不大于1. \(1 \ ...

  8. [linux]常见内核TCP参数描述与配置

    前言 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),如果需要固化设置,则需要修改/etc ...

  9. 微软面向企业的Private ChatGPT 参考应用 Chat Copilot

    这两天你可能看过这篇文章:微软面向企业的Private ChatGPT 开源!超详细安装流程反馈![1], 这篇文章顶多就是一个Azure OpenAI 服务的简单Demo, 就连插件机制都没有,这也 ...

  10. 操作系统实验——利用Linux的消息队列通信机制实现两个线程间的通信

    目录 一. 题目描述 二.实验思路 三.代码及实验结果 四.遇到问题及解决方法 五.参考文献 一. 题目描述 编写程序创建三个线程:sender1线程.sender2线程和receive线程,三个线程 ...