云原生Istio案例实战 3

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
可观测可视化 Grafana 版,10个用户账号 1个月
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 云原生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使用情况了

目录
相关文章
|
5月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes 你真的学废了吗---实战k8s 一(jsonpath实战)
云原生|kubernetes 你真的学废了吗---实战k8s 一(jsonpath实战)
67 0
|
2月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
14 0
|
2月前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
40 0
|
2月前
|
Cloud Native Linux 虚拟化
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
45 0
|
2月前
|
Dubbo Cloud Native 应用服务中间件
【Dubbo3 终极特性】「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心、注册中心的原理及开发实战(中)
【Dubbo3 终极特性】「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心、注册中心的原理及开发实战(中)
21 1
|
5月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes 你真的学废了吗---实战k8s 二(命令行创建各类资源)
云原生|kubernetes 你真的学废了吗---实战k8s 二(命令行创建各类资源)
79 1
|
5月前
|
存储 关系型数据库 MySQL
猿创征文|云原生|kubernetes实务---部署MySQL--实战(一)
猿创征文|云原生|kubernetes实务---部署MySQL--实战(一)
53 0
|
5月前
|
运维 Prometheus 监控
云原生可观测实战
云原生可观测实战
|
6月前
|
机器学习/深度学习 自然语言处理 Cloud Native
探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。
大数据索引: Google使用大数据索引来构建其搜索引擎,并实时处理全球各种语言的文本数据。 云原生基础设施: Google Cloud提供了强大的云原生基础设施,支持大规模数据存储和处理。 自然语言处理: Google使用自然语言处理技术来理解和索引文本数据,从而提供高质量的搜索结果。 实时搜索: Google的
131 0
|
7月前
|
存储 Kubernetes Cloud Native
基于 Kyma 的企业级云原生应用的扩展案例分享 2
基于 Kyma 的企业级云原生应用的扩展案例分享
63 0

热门文章

最新文章