OpenShift 4 之运行Istio的BookInfo微服务应用
《OpenShift 4.x HOL教程汇总》
本文部署Istio的实例BookInfo应用并配置访问路由等功能。在进行操作前,需先完成《OpenShift 4 之通过命令创建Service Mesh环境》。
文章目录
- 部署BookInfo应用的微服务
- 部署应用微服务
- 跟踪微服务请求
- 配置微服务动态路由
- 所有流量发到v1的微服务
- 将流量按照4:1发到v1和v2的reviews微服务
- 将所有流量发到v2的reviews微服务
- 根据浏览器类型路由请求
- 相同微服务不同版本的流量负载
部署BookInfo应用的微服务
部署应用微服务
- 创建bookinfo-red项目
$ BOOKINFO_PROJECT=bookinfo-red
$ oc new-project $BOOKINFO_PROJECT
$ ISTIO_RELEASE=$(curl --silent https://api.github.com/repos/istio/istio/releases/latest |grep -Po '"tag_name": "\K.*?(?=")')
- 将bookinfo-red项目加到ServiceMeshMemberRoll中。
$ oc get smmr default -n istio-system -o json --export | jq '.spec.members += ["'"$BOOKINFO_PROJECT"'"]' | oc apply -n istio-system -f -
$ oc get smmr default -n istio-system -o jsonpath={.spec.members}
[default bookinfo-red]
- 部署bookinfo应用相关的微服务以及资源。
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/istio/istio/${ISTIO_RELEASE}/samples/bookinfo/platform/kube/bookinfo.yaml
- 根据部署的微服务注入sidecar。
for deployment in $(oc get deployments -o jsonpath='{.items[*].metadata.name}' -n $BOOKINFO_PROJECT);dooc -n $BOOKINFO_PROJECT patch deployment $deployment -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar.istio.io/inject": "true"}}}}}'
done
- 创建应用访问网关。
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/istio/istio/${ISTIO_RELEASE}/samples/bookinfo/networking/bookinfo-gateway.yaml
$ oc get gateway.networking.istio.io
NAME AGE
bookinfo-gateway 19m
- 连续通过网关访问应用,确认应用返回运行结果。注意bookinfo-gateway网关对外暴露的route是在istio-system项目中。
$ GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
$ while true; do curl -s http://${GATEWAY_URL}/productpage | grep -o "<title>.*</title>"; done
<title>Simple Bookstore App</title>
<title>Simple Bookstore App</title>
<title>Simple Bookstore App</title>
...
跟踪微服务请求
- 获取监控Kiali控制台访问URL
$ oc -n istio-system get route kiali -o jsonpath='{.spec.host}'
kiali-istio-system.apps-crc.testing
- 在浏览器中访问Kiali控制台。从Overview中进入bookinfo-red项目的Graph,然后查看微服务访问路径。
配置微服务动态路由
所有流量发到v1的微服务
- 执行命令,创建Istio的路由目标(destination-rule-all.yaml)和路由策略(virtual-service-all-v1.yaml)。
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/liuxiaoyu-git/redhat-service-mesh-demo/master/04-Dynamic-Routing/destination-rule-all.yaml
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/liuxiaoyu-git/redhat-service-mesh-demo/master/04-Dynamic-Routing/virtual-service-all-v1.yaml
- 在Kiali中查看流量流经的微服务版本,此时流量全部流到v1版本的微服务上。
将流量按照4:1发到v1和v2的reviews微服务
- 执行命令,将流量按照4:1发到v1和v2的reviews微服
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/liuxiaoyu-git/redhat-service-mesh-demo/master/04-Dynamic-Routing/virtual-service-reviews-80-20.yaml
- 此时在Kiali中可以看到有请求流量进入v2版本的reviews微服务。
将所有流量发到v2的reviews微服务
- 执行命令,将请求全部发到v2版本的reviews微服务
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/liuxiaoyu-git/redhat-service-mesh-demo/master/04-Dynamic-Routing/virtual-service-reviews-v2.yaml
- 在Kiali中查看
根据浏览器类型路由请求
- 执行命令,根据的reviews微服务
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/liuxiaoyu-git/redhat-service-mesh-demo/master/04-Dynamic-Routing/virtual-service-reviews-chrome.yaml
- 执行以下命令,模拟Chrome和一般浏览器按照1:1的比例持续访问应用。
$ while true; do sleep 1; curl -A "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" -s http://${GATEWAY_URL}/productpage | grep -o "color=\"red\""; curl -s http://${GATEWAY_URL}/productpage | grep -o "color=\"black\"";done
- 在Kiali中查看,确认路由到v2和v3版本的reviews微服务请求是一样的。
相同微服务不同版本的流量负载
- 将流量分发给当前微服务的所有版本。
oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/pichuang/redhat-service-mesh-demo/master/05-Traffic-Government/destination-rule-all.yaml
oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/pichuang/redhat-service-mesh-demo/master/05-Traffic-Government/virtual-service-reviews-all.yaml
2. 执行命令,将请求轮训发给reviews微服务的三个版本。
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/pichuang/redhat-service-mesh-demo/master/05-Traffic-Government/destination-rule-reviews-round-robin.yaml
3. 执行命令,将请求随机发给reviews微服务的三个版本。
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/pichuang/redhat-service-mesh-demo/master/05-Traffic-Government/destination-rule-reviews-random.yaml
OpenShift 4 之运行Istio的BookInfo微服务应用相关推荐
- Istio灰度发布:部署Bookinfo微服务项目
对于istio流量管理我们通过灰度发布将流量转移到不同的服务上面,你可以去任意的配置.比如10%流量到新版本,90%到旧版本,这些是都可以去配置的. 1.创建命名空间并开启自动注入 [root@mas ...
- OpenShift 4 - Istio-Tutorial (2) 部署三个微服务
<OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本系列演示的场景使用了基于Java实现的三个微服务:Customer.Preferen ...
- istio bookinfo微服务搭建流程
使用istio的Demo--bookinfo可以很方便的进行配置变更和故障注入,在这篇博客编写之时,博客内贴附的文档皆是有效的,但是文档会有更新和废弃,请按照文章思路自行寻找对应的最新文档. 部分文档 ...
- 新书推荐 | OpenShift在企业中的实践:PaaS DevOps 微服务
新书推荐 <OpenShift在企业中的实践:PaaS DevOps微服务> 长按二维码 了解及购买 多位全球知名企业IT负责人联名推荐,两位红帽和亚马逊AWS云计算和微服务资深架构师和技 ...
- 微服务治理框架的选择:对比Spring Cloud和Istio
导读:目前主流的微服务治理框架主要是Spring Cloud.而Istio作为新一代微服务框架,越来越受到关注.在本文中,我们分享如何选择这两种微服务框架. 作者:魏新宇 宋志麒 杨金锋 来源:大数据 ...
- 使用 Istio 实现基于 Kubernetes 的微服务应用
近两年,随着容器.Kubernetes 等技术的兴起,微服务被广泛提及并被大量使用.本文旨在让读者了解 Istio,通过它与 Kubernetes 相结合,大幅降低微服务的复杂度,以便让开发人员更关注 ...
- istio概述,与微服务、云原生、k8s的关系
1.1简单介绍istio 与k8s紧密结合,适用于云原生场景,service mesh形态,服务治理的开放平台 服务治理,包括:连接.安全.策略执行和可观察性. 连接:通过配置的流量规则控制服务间的流 ...
- 在 Docker 上运行一个 RESTful 风格的微服务
tags: Microservice Restful Docker Author: Andy Ai Weibo: NinetyH GitHub: https://github.com/aiyanbo/ ...
- 微服务等于Spring Cloud?了解微服务架构和框架
作者:TIM XU 来源:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/ 微服务初探 什么 ...
最新文章
- HK-2000 数采仪 航空头接口定义
- Black Hat|英特尔CPU设计漏洞为恶意软件打开后门
- 阿姆斯特朗数_阿姆斯特朗的功能依赖公理 数据库管理系统
- 在CentOS中安装NodeJS
- bzoj 1046: [HAOI2007]上升序列
- channel c3 disabled, job failed on it will be run on another channel
- dfs序七个经典问题[转]
- ORACLE TRUNC()函数
- 【python 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)
- php 生成不重复的会员卡号,php生成一个不重复的会员号
- 台式计算机如何组装,怎样组装基本台式机
- 台式计算机用什么电源线,电脑电源线有什么规格
- 社招和校招有什么不同?阿里美团等大厂JAVA社招面经分享!
- java properties map_为什么java.util.Properties实现Map而不是Map
- NAT 模式下网关设置
- #读书笔记# 《人类简史》Chapter4
- Date类对象与字符串的互相转换
- HashMap中的遍历有序性探究
- flutter permission 问题
- python数据分析实例2012美国总统竞选赞助分析
热门文章
- java三个线程 顺序执行_如何确保三个线程顺序执行
- 电脑键盘关机是哪个键_电脑关机后键盘鼠标还亮着怎么关闭?华硕主板的解决方法...
- createplayer 多次调用 位置错误_Programming in Lualua学习第6期 Lua编译执行与错误
- oracle数字加 39,Oracle数据库之SQL单行函数—数字函数-Oracle
- python测量镜头到目标距离_摄像头单目测距原理及实现
- android 禁用dlsym_一个绕过移动端系统限制的dlopen库: byOpen
- java中为什么还要防止内存泄露_JAVA防止内存的泄漏什么意思,内存还能泄露?...
- 深藏不露!下拉列表设计灵感
- 设计配色专辑,很值得设计师拥有
- java rpc 框架 常用_常用的RPC架构系列---gRPC