云原生Istio案例实战 3

简介: 云原生Istio案例实战

2.6 流量管理

2.6.1 放开bookinfo自定义路由权限

这个文件也是起到了一个路由的功能,必须先执行这个文件之后gateway路由规则才可以自定义
  • 执行destination-rule-all.yaml
kubectl apply -f destination-rule-all.yaml -n bookinfo-ns
  • 查看
kubectl get DestinationRule -n bookinfo-ns
  • 打开destination-rule-all.yaml 分析一下

里面定义了各个微服务的路由资源

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule # 声明了一个资源,这个资源也是需要依赖于crd
metadata:
 name: productpage
spec:
 host: productpage
 subsets:
 - name: v1
   labels:
     version: v1 # 版本
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule  # 声明了一个资源,这个资源也是需要依赖于crd
metadata:
 name: reviews
spec:
 host: reviews
 subsets:
 - name: v1
   labels:
     version: v1 # 版本
 - name: v2
   labels:
     version: v2 # 版本
 - name: v3
   labels:
     version: v3 # 版本
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: ratings
spec:
 host: ratings
 subsets:
 - name: v1
   labels:
     version: v1
 - name: v2
   labels:
     version: v2
 - name: v2-mysql
   labels:
     version: v2-mysql
 - name: v2-mysql-vm
   labels:
     version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: details
spec:
 host: details
 subsets:
 - name: v1
   labels:
     version: v1
 - name: v2
   labels:
     version: v2

2.6.2 基于版本方式控制

只需要在/home/tools/istio-1.0.6/samples/bookinfo/networking下执行virtual-service-reviews-v3.yaml即可


打开virtual-service-reviews-v3.yaml文件

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v3

此时会把所有的路由的流量全部都切换到v3版本也就是全部都是红星的版本

  • 执行命令
kubectl apply -f virtual-service-reviews-v3.yaml -n bookinfo-ns
  • 再次刷新页面
http://192.168.187.137:31380/productpage

  • 删除版本控制命令
kubectl delete -f virtual-service-reviews-v3.yaml -n bookinfo-ns

再次刷新页面有其它版本了,这是基于版本的方式来控制流量

2.6.3 基于权重的流量版本控制

只需要在/home/tools/istio-1.0.6/samples/bookinfo/networking下执行virtual-service-reviews-50-v3.yaml即可

  • 打开virtual-service-reviews-50-v3.yaml文件
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 50 # 50%的流量到v1
    - destination:
        host: reviews
        subset: v3
      weight: 50 # 50%的流量到v3

此时会把所有的路由的流量会在v1和v3之间进行切换,也就是无星和红星页面

  • 执行命令
kubectl apply -f virtual-service-reviews-50-v3.yaml -n bookinfo-ns
  • 再次刷新页面
http://192.168.187.137:31380/productpage

无星页面和红星页面之间切换

  • 删除命令
kubectl delete -f virtual-service-reviews-50-v3.yaml -n bookinfo-ns

2.6.4 基于用户来控制流量版本

只需要在/home/tools/istio-1.0.6/samples/bookinfo/networking下执行virtual-service-reviews-jason-v2-v3.yaml即可


打开virtual-service-reviews-jason-v2-v3.yaml文件

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v3

在登录的时候会在header头部增加一个jason,如果是jason登录那么会访问v2版本,其它的人访问的是v3

  • 执行命令
kubectl apply -f virtual-service-reviews-jason-v2-v3.yaml -n bookinfo-ns
  • 再次刷新页面
http://192.168.187.137:31380/productpage

全是红星页面,因为我不是jason用户所以流量全都在v3版本

  • 删除命令
kubectl delete -f virtual-service-reviews-jason-v2-v3.yaml -n bookinfo-ns

2.7 故障注入

为了测试微服务应用程序 Bookinfo 的弹性,在访问的的时候会在header头部增加一个jason,如果是jason访问那么会访问v2版本,其它的人访问的是v3。 访问v3版本的人会注入一个50%几率的延迟2S请求访问。


故障注入:可以故意引发Bookinfo 应用程序中的 bug。尽管引入了 2 秒的延迟,我们仍然期望端到端的流程是没有任何错误的。


创建故障注入规则-执行:test.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - fault:
      delay:
        percent: 50
        fixedDelay: 2s
    route:
    - destination:
        host: reviews
        subset: v3
  • 执行:test.yaml
kubectl apply -f test.yaml -n bookinfo-ns

测试


1.通过浏览器打开 Bookinfo 应用。


2.使用headers头部不包含jason关机键, 访问到 /productpage 页面。


3.你期望 Bookinfo 主页在有50%几率大约 2 秒钟加载完成并且没有错误,有50%的几率正常加载


4.查看页面的响应时间:


打开浏览器的 开发工具 菜单

打开 网络 标签

重新加载 productpage 页面。你会看到页面加载实际上用了大约 6s。

2.8 流量的迁移

一个常见的用例是将流量从一个版本的微服务逐渐迁移到另一个版本。在 Istio 中,您可以通过配置一系列规则来实现此目标, 这些规则将一定百分比的流量路由到一个或另一个服务。在本任务中,您将会把 50% 的流量发送到 reviews:v1,另外 50% 的流量发送到 reviews:v3。然后,再把 100% 的流量发送到 reviews:v3 来完成迁移。(1)让所有的流量都到v1

kubectl apply -f virtual-service-all-v1.yaml

(2)将v1的50%流量转移到v3

kubectl apply -f virtual-service-reviews-50-v3.yaml

(3)确保v3版本没问题之后,可以将流量都转移到v3

kubectl apply -f virtual-service-reviews-v3.yaml

4)访问测试,看是否都访问的v3版本

2.9 体验Istio的Observe(观察)

观察mixer组件上报的服务数组

采集指标:自动为Istio生成和收集的应用信息,可以配置的YAML文件

进入bookinfo/telemetry目录下面

  • 如果需要metrics收集日志,需要先执行
kubectl apply -f metrics-crd.yaml
  • 检查一下
kubectl get instance -n istio-system

多次属性页面让metrics收集数据:http://192.168.187.137:31380/productpage

现在需要访问普罗米修斯看看有没有拿到metrics收集到的数据,我们可以通过ingress来访问

  • 检查普罗米修斯ingress存不存在
kubectl get ingress -n istio-system
  • 不存在则启动ingress
kubectl apply -f prometheus-ingress.yaml
  • 访问普罗米修斯域名
prometheus.istio.qy.com
  • 检查一下有没有数据筛选选择: istio_requests_total
  • 收集原理:

  • 启动grafana来可视化查看,检查grafana的ingress存不存在
kubectl get ingress -n istio-system
  • 启动
kubectl apply -f grafana-ingress.yaml
• 1
  • 访问grafana域名
grafana.istio.qy.com
  • 配置grafana对应的普罗米修斯ip
  • 查找普罗米修斯ip
kubectl get svc -o wide -n istio-system

  • 访问istio mixer

这边就可以看到内存和CPU使用情况了

目录
相关文章
|
消息中间件 存储 Cloud Native
云消息队列 Kafka 版 V3 系列荣获信通院“云原生技术创新标杆案例”
2024 年 12 月 24 日,由中国信息通信研究院(以下简称“中国信通院”)主办的“2025 中国信通院深度观察报告会:算力互联网分论坛”,在北京隆重召开。本次论坛以“算力互联网 新质生产力”为主题,全面展示中国信通院在算力互联网产业领域的研究、实践与业界共识,与产业先行者共同探索算力互联网产业未来发展的方向。会议公布了“2024 年度云原生与应用现代化标杆案例”评选结果,“云消息队列 Kafka 版 V3 系列”荣获“云原生技术创新标杆案例”。
640 114
|
10月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
974 0
|
人工智能 运维 监控
阿里云携手神州灵云打造云内网络性能监测标杆 斩获中国信通院高质量数字化转型十大案例——金保信“云内网络可观测”方案树立云原生运维新范式
2025年,金保信社保卡有限公司联合阿里云与神州灵云申报的《云内网络性能可观测解决方案》入选高质量数字化转型典型案例。该方案基于阿里云飞天企业版,融合云原生引流技术和流量“染色”专利,解决云内运维难题,实现主动预警和精准观测,将故障排查时间从数小时缩短至15分钟,助力企业降本增效,形成可跨行业复制的数字化转型方法论。
849 6
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
20036 30
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
运维 Cloud Native Serverless
Serverless Argo Workflows大规模计算工作流平台荣获信通院“云原生技术创新标杆案例”
2024年12月24日,阿里云Serverless Argo Workflows大规模计算工作流平台荣获由中国信息通信研究院颁发的「云原生技术创新案例」奖。
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
309 18