istio 服务跟踪和流量管理

2024-06-04 22:48

本文主要是介绍istio 服务跟踪和流量管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

创建目标规则和默认路由

使用Istio来管理这两个服务的流量

定义一个名称为nginx-web的DestinationRule 目标规则,

利用Pod标签把nginx-web服务分成两个subset, 分别命名为v1和v2

# nginx-destinationRule.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: nginx-web
spec:host: nginx-websubsets:- name: v1labels:version: v1- name: v2labels:version: v2#### 部署到集群上kubectl apply -f nginx-destinationRule.yaml          
创建默认的路由规则VirtualService 不论是否进行进一步的流量控制,都建议为网格中的服务创建默认的路由规则

定义一个VirtualService对象,它负责接管对 “nginx-web”这一主机名的访问,
将流量都转发到DestinationRule定义的v2 subset上

# cat nginx-virtual-service-reviews-v2.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: nginx-web-v2
spec:hosts:- nginx-webhttp:- route: - destination: host: nginx-websubset: v2#### 部署到集群上
kubectl apply -f nginx-virtual-service-reviews-v2.yaml 

再次进入客户端Pod, 看看新定义的流量管理规则是否生效

### 结果可以看出,访问只返回 v2 版本
# kubectl exec -it sleep-7995b95fdb-8vzmx sh
Defaulting container name to sleep.
Use 'kubectl describe pod/sleep-7995b95fdb-8vzmx -n default' to see all of the containers in this pod.
/ # while true; do curl http://nginx-web:80 ; sleep 1; done
<h1>Welcome to V2 !</h1>
<h1>Welcome to V2 !</h1>
<h1>Welcome to V2 !</h1>
<h1>Welcome to V2 !</h1>

金丝雀部署

金丝雀(Canary)部署指的是让少量用户使用应用新版本的一个过程,
借助这一过程能够验证新版本是否存在问题,然后能够确保以更高的质量发布给更多的受众
将 20% 的用户发送至带有缺陷的 v2 版本(这就是金丝雀发布),
并将 80% 的用户发送至正常的服务 v1 版本
这可以通过如下的 VirtualService 来实现

# cat nginx-virtual-service-reviews-80-20.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: nginx-web
spec:hosts:- nginx-webhttp:- route: - destination: host: nginx-websubset: v1weight: 80- destination: host: nginx-websubset: v2weight: 20#### 部署到集群上
kubectl apply -f nginx-virtual-service-reviews-80-20.yaml

再次进入客户端Pod, 看看新定义的流量管理规则是否生效

### 结果可以看出,大部分结果返回 v1 版本
# kubectl exec -it sleep-7995b95fdb-8vzmx sh
Defaulting container name to sleep.
Use 'kubectl describe pod/sleep-7995b95fdb-8vzmx -n default' to see all of the containers in this pod.
/ # while true; do curl http://nginx-web ; sleep 1; done
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V2 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V1 !</h1>
<h1>Welcome to V2 !</h1>

带有缺陷的服务版本会有三分之一的概率在生成响应时耗费过长的时间,
三分之一的概率遇到服务器内部错误,其余的请求均能正常完成。

为了降低这些缺陷的影响并给用户带来更好的用户体验,我们会采取如下的措施:

  • 如果服务耗时超过了 8 秒钟,将会超时;
  • 对于失败的请求进行重试。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: nginx-web
spec:hosts:- nginx-webhttp:- route: - destination: host: nginx-websubset: v1weight: 80- destination: host: nginx-websubset: v2weight: 20timeout: 8sretries:attempts: 3perTryTimeout: 3s

这篇关于istio 服务跟踪和流量管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031343

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess