介绍

在微服务架构中,如何安全、高效地实现服务发布与流量管理是保障业务稳定性的核心挑战。金丝雀发布(Canary Release)、灰度发布等策略通过精细化的流量控制,可有效降低新版本上线风险, Istio 作为主流的服务网格(Service Mesh)工具。

此次Istio 在 Kubernetes 集群中的实战应用展开,从基础环境准备(如系统内核升级以适配 IPVS 模块)到 Istio 的完整部署流程,再到核心功能的实践 —— 包括通过虚拟服务(VirtualService)和目标规则(DestinationRule)实现流量分配(如 10% 流量导向金丝雀版本)、配置熔断机制保护服务稳定性、利用流量镜像实现无感知测试、通过 Ingress Gateway 暴露服务并控制外部访问路径

1.金丝雀发布-安装 Istio

由于 Kubernetes 使用的 IPVS 模块需要系统内核版本支持,试使用提供的软件包(Canary_v1.0.tar.gz 在 http 服务下)将系统内核进行升级,在 Kubernetes 集群上完成 Istio 的安装,并将 default Namespace 设置自动注入。

升级内核

 设置 GRUB_DEFAULT=0,通过上面查询显示的编号为 0 的内核作为默认内核
 [root@master ~]# vi /etc/default/grub
 #GRUB_DEFAULT=0必须在GRUB_DEFAULT=saved下面,否则升级失败(可能),放在首部内核升级失败
 [root@master ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
 [root@masater ~]#tar -zxvf Canary_v1.0.tar.gz 
 [root@master]# cd kernel/
 [root@master kernel]# yum install -y kernel-lt-5.4.119-1.el7.elrepo.x86_64.rpm linux-firmware-20200421-80.git78c0348.el7_9.noarch.rpm
 #重启
 reboot
 #验证
 [root@master ~]# uname -r
 5.4.119-1.el7.elrepo.x86_64

安装Istio

 #导入镜像
 [root@masater ~]# cd images/ 
 #确保harbor启动完成
 [root@masater images]# ./image_push.sh
 导入比较慢,多等等
 #istio环境配置
 [root@master ~]# mv istio-1.9.5/ /usr/local/bin/
 [root@master ~]# cat /etc/profile
 export istio=/usr/local/bin/istio-1.9.5
 export PATH=$PATH:$istio/bin
 [root@master ~]# source /etc/profile
 -------------------------
 检查运行环境:
 [root@master istio-1.9.5]# istioctl x precheck
 #没有报错即可
 安装istio的核心组件:
 #注意修改IP(采用demo的安装方式)
 [root@master istio-1.9.5]# istioctl install -y --set profile=demo --set hub=192.168.30.10/library
 查看安装的资源:
 [root@master istio-1.9.5]# kubectl -n istio-system get pods
 NAME                             READY    STATUS    RESTARTS   AGE
 istio-egressgateway-6f9f4ddc9c-rgtcl     1/1        Running     0          6m46s
 istio-ingressgateway-78b47bc88b-52fd2    1/1        Running     0          6m46s
 istiod-67dbfcd4dd-56n66                  1/1        Running     0          9m10s #将default Namespace设置自动注入(为资源设置标签)
 [root@master istio-1.9.5]# kubectl label namespace default istio-injection=enabled
 namespace/default labeled
 #查看目前开启自动注入的 Namespace:
 [root@master istio-1.9.5]# kubectl get ns --show-labels=true

2.金丝雀发布-流量控制

使用文件(istio-1.9.5/samples/helloworld/helloworld.yaml)在 default 命名空间下完成 hellworld 服务的部署,然后设置路由规则来控制流量分配,创建一个虚拟服务helloworld;再创建一个目标规则 helloworld,将 10%的流量发送到金丝雀版本(v2)。

 ​
 ​
 [root@master ~]# cd /usr/local/bin/istio-1.9.5/samples/
 [root@master samples]# kubectl apply -f helloworld/helloworld.yaml
 [root@master helloworld]# cat helloworld-route.yaml 
 #创建一个虚拟服务helloworld
 apiVersion: networking.istio.io/v1alpha3
 kind: VirtualService     #针对指定服务的流量路由规则
 metadata:
   name: helloworld
 spec:
   hosts:        #必要字段:流量的目标主机
   - helloworld
   http:              #HTTP 流量规则的有序列表
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95842.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95842.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95842.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12.web api 3

定时器-间歇函数

ComfyUI进阶:EchoMimic插件全解析,让静态肖像实现音频驱动的精准口型动画

在数字内容创作中,让静态肖像“开口说话”并做出自然表情,是提升交互感与沉浸感的关键。传统动画制作需专业人员逐帧调整口型与表情,成本高且效率低。ComfyUI的EchoMimic插件通过音频驱动技术,实现了“输入音频→自动生成匹配口型…

链式前向星、vector存图

场景设定 想象你是一个社交达人,要记录你和所有朋友的关系(这就是“图”)。每个朋友是一个节点,关系是一条边。你需要快速回答:“我有哪些朋友?”(遍历邻居)。方式1:链式…

YAML 中定义 List 的几种方式

在 YAML 配置文件中定义 List 并在 Spring 应用中注入是非常常见的操作,下面详细介绍具体写法和注入方式。一、YAML 中定义 List 的几种方式1. 缩进式写法(推荐)最常用的方式,通过短横线 - 加空格表示列表项:yaml# app…

C# 反射和特性(自定义特性)

自定义特性 你或许已经注意到了,应用特性的语法和之前见过的其他语法有很大不同。你可能会觉得特 性是一种完全不同的结构类型,其实不是,特性只是一种特殊的类。 有关特性类的一些要点如下。 用户自定义的特性类叫作自定义特性。所有特性类都…

科目二的四个电路

一.K21电动机单连续运转接线(带点动控制)1.电路图2.主线路这可很明了,是一条直线,从上接到下就OK了,然后从热继电器出来,接到SB3按钮的常闭触点上接着往下走一端接到SB2的常闭触点上,接着往下走,走到接触器的线圈上,从L2借一条火线出来,从熔断器的上端接入,另一端接…

【位运算】查询子数组最大异或值|2693

本文涉及知识点 位运算、状态压缩、枚举子集汇总 3277. 查询子数组最大异或值 给你一个由 n 个整数组成的数组 nums,以及一个大小为 q 的二维整数数组 queries,其中 queries[i] [li, ri]。 对于每一个查询,你需要找出 nums[li…ri] 中任…

HTML DOM 方法

HTML DOM 方法 引言 HTML DOM(文档对象模型)是HTML文档的编程接口,它允许开发者通过JavaScript来操作HTML文档中的元素。DOM 方法是DOM编程的核心,它提供了丰富的操作手段来改变网页的结构、样式和行为。本文将详细介绍HTML DOM中…

w嵌入式分享合集68

自己的原文哦~ https://blog.51cto.com/whaosoft/14133002 一、一键开关机电路的设计方案 方案一:电路图 一键开关机电路分析如下: 电路工作流程如下: Key按下瞬间,Q2、Q1导通,7805输入电压在8.9V左右&…

FFmpeg QoS 处理

FFmpeg 中的 QoS (服务质量) 处理主要关注于实时流媒体传输中的时序控制、丢帧策略和网络适应等方面。以下是 FFmpeg 中 QoS 相关的关键机制和配置方法。1. 基本 QoS 机制丢帧策略 (Frame Dropping)cAVDictionary *options NULL; av_dict_set(&options, "framedrop&q…

TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别

多种LaTeX编译器一、多种LaTeX编译器 1.1 PDFLaTeX(1994年) 默认、最常用的引擎。 输入文件通常是 ASCII 或 UTF-8 编码(但中文需要 CJK 宏包或 ctex 宏包支持)。 字体选择受限:只能使用 TeX 自带的字体或者 Type 1…

容器化部署:用Docker封装机器翻译模型与服务详解

文章目录一、机器翻译容器化的技术栈选型1.1 为什么需要容器化MT模型?1.2 基础镜像选择对比1.3 典型依赖分层方案1.4 性能对比(容器化 vs 原生部署)二、关键部署模式2.1 轻量级API服务封装2.2 模型热更新策略三、Docker镜像构建3.1 编写Docke…

leetcode_42 接雨水

1. 题意 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 2. 题解 这个题不会做,全部是看得题解捏。 不过能看懂题解感觉自己也很棒了! 看完题解后感觉最难的是如何求出有多少…

Spring Boot 整合 Thymeleaf 模板引擎:从零开始的完整指南

引言:为什么选择 Thymeleaf? Thymeleaf 是一个现代化的服务器端 Java 模板引擎,专为 Web 开发而设计。与 JSP 不同,Thymeleaf 模板是纯 HTML 文件,可以直接在浏览器中预览,无需后端服务器支持。这种"…

pytest介绍(python测试框架)(@pytest.mark.parametrize、@pytest.fixtures)

文章目录**1. 核心特点**- **简洁易用**:无需复杂的配置,只需编写简单的函数或类即可进行测试。- **丰富的断言**:直接使用 Python 内置的 assert 语句,失败时提供详细的错误信息。- **自动发现测试**:通过约定的命名规…

[Python 基础课程]继承

在 Python 的面向对象编程(OOP)中,继承(Inheritance) 是一种重要的机制,它允许一个类(称为子类或派生类)从另一个类(称为父类、基类或超类)中继承属性和方法。…

QT之设计器组件功能(8大类55个组件)

组件名称 功能描述关键属性1. Layouts(布局组件)(1) Vertical Layout(垂直布局)将子控件按垂直方向依次排列layoutSpacing:控件之间的间距layoutMargin:布局边缘的边距layoutStretch:设置各控件…

java中list的api详细使用

在Java中,List是集合框架中最常用的接口之一,继承自Collection,代表有序、可重复的元素集合(允许null元素)。其核心实现类有ArrayList(数组实现,随机访问高效)、LinkedList&#xff…

Azure AI Search 探索总结

Azure AI Search 原名 Azure Cognitive Service,是Azure中用来给AI项目构建知识库的组件。知识库本质和数据库很像,但是内部的存储结构和检索算法不一样。比如并不是知识库的每一列都可以用来过滤、检索或group by,而是要根据实际情况配置。A…

高效解决 pip install 报错 SSLError: EOF occurred in violation of protocol

高效解决 pip install 报错 SSLError: EOF occurred in violation of protocol 标签: Python, pip, SSLError, Clash, 网络代理, 问题解决 一、问题描述 在Python开发中,pip 是我们最亲密的伙伴。然而,当你身处需要科学上网的环境&#xff0c…