《OpenShift 4.x HOL教程汇总》

本文部署Istio的实例BookInfo应用并配置访问路由等功能。在进行操作前,需先完成《OpenShift 4 之通过命令创建Service Mesh环境》。

文章目录

  • 部署BookInfo应用的微服务
    • 部署应用微服务
    • 跟踪微服务请求
  • 配置微服务动态路由
    • 所有流量发到v1的微服务
    • 将流量按照4:1发到v1和v2的reviews微服务
    • 将所有流量发到v2的reviews微服务
    • 根据浏览器类型路由请求
    • 相同微服务不同版本的流量负载

部署BookInfo应用的微服务

部署应用微服务

  1. 创建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.*?(?=")')
  1. 将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]
  1. 部署bookinfo应用相关的微服务以及资源。
$ oc apply -n $BOOKINFO_PROJECT -f https://raw.githubusercontent.com/istio/istio/${ISTIO_RELEASE}/samples/bookinfo/platform/kube/bookinfo.yaml
  1. 根据部署的微服务注入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
  1. 创建应用访问网关。
$ 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
  1. 连续通过网关访问应用,确认应用返回运行结果。注意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>
...

跟踪微服务请求

  1. 获取监控Kiali控制台访问URL
$ oc -n istio-system get route kiali -o jsonpath='{.spec.host}'
kiali-istio-system.apps-crc.testing
  1. 在浏览器中访问Kiali控制台。从Overview中进入bookinfo-red项目的Graph,然后查看微服务访问路径。

配置微服务动态路由

所有流量发到v1的微服务

  1. 执行命令,创建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
  1. 在Kiali中查看流量流经的微服务版本,此时流量全部流到v1版本的微服务上。

将流量按照4:1发到v1和v2的reviews微服务

  1. 执行命令,将流量按照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
  1. 此时在Kiali中可以看到有请求流量进入v2版本的reviews微服务。

将所有流量发到v2的reviews微服务

  1. 执行命令,将请求全部发到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
  1. 在Kiali中查看

根据浏览器类型路由请求

  1. 执行命令,根据的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
  1. 执行以下命令,模拟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
  1. 在Kiali中查看,确认路由到v2和v3版本的reviews微服务请求是一样的。

相同微服务不同版本的流量负载

  1. 将流量分发给当前微服务的所有版本。
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微服务应用相关推荐

  1. Istio灰度发布:部署Bookinfo微服务项目

    对于istio流量管理我们通过灰度发布将流量转移到不同的服务上面,你可以去任意的配置.比如10%流量到新版本,90%到旧版本,这些是都可以去配置的. 1.创建命名空间并开启自动注入 [root@mas ...

  2. OpenShift 4 - Istio-Tutorial (2) 部署三个微服务

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本系列演示的场景使用了基于Java实现的三个微服务:Customer.Preferen ...

  3. istio bookinfo微服务搭建流程

    使用istio的Demo--bookinfo可以很方便的进行配置变更和故障注入,在这篇博客编写之时,博客内贴附的文档皆是有效的,但是文档会有更新和废弃,请按照文章思路自行寻找对应的最新文档. 部分文档 ...

  4. 新书推荐 | OpenShift在企业中的实践:PaaS DevOps 微服务

    新书推荐 <OpenShift在企业中的实践:PaaS DevOps微服务> 长按二维码 了解及购买 多位全球知名企业IT负责人联名推荐,两位红帽和亚马逊AWS云计算和微服务资深架构师和技 ...

  5. 微服务治理框架的选择:对比Spring Cloud和Istio

    导读:目前主流的微服务治理框架主要是Spring Cloud.而Istio作为新一代微服务框架,越来越受到关注.在本文中,我们分享如何选择这两种微服务框架. 作者:魏新宇 宋志麒 杨金锋 来源:大数据 ...

  6. 使用 Istio 实现基于 Kubernetes 的微服务应用

    近两年,随着容器.Kubernetes 等技术的兴起,微服务被广泛提及并被大量使用.本文旨在让读者了解 Istio,通过它与 Kubernetes 相结合,大幅降低微服务的复杂度,以便让开发人员更关注 ...

  7. istio概述,与微服务、云原生、k8s的关系

    1.1简单介绍istio 与k8s紧密结合,适用于云原生场景,service mesh形态,服务治理的开放平台 服务治理,包括:连接.安全.策略执行和可观察性. 连接:通过配置的流量规则控制服务间的流 ...

  8. 在 Docker 上运行一个 RESTful 风格的微服务

    tags: Microservice Restful Docker Author: Andy Ai Weibo: NinetyH GitHub: https://github.com/aiyanbo/ ...

  9. 微服务等于Spring Cloud?了解微服务架构和框架

    作者:TIM XU 来源:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/ 微服务初探 什么 ...

最新文章

  1. HK-2000 数采仪 航空头接口定义
  2. Black Hat|英特尔CPU设计漏洞为恶意软件打开后门
  3. 阿姆斯特朗数_阿姆斯特朗的功能依赖公理 数据库管理系统
  4. 在CentOS中安装NodeJS
  5. bzoj 1046: [HAOI2007]上升序列
  6. channel c3 disabled, job failed on it will be run on another channel
  7. dfs序七个经典问题[转]
  8. ORACLE TRUNC()函数
  9. 【python 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)
  10. php 生成不重复的会员卡号,php生成一个不重复的会员号
  11. 台式计算机如何组装,怎样组装基本台式机
  12. 台式计算机用什么电源线,电脑电源线有什么规格
  13. 社招和校招有什么不同?阿里美团等大厂JAVA社招面经分享!
  14. java properties map_为什么java.util.Properties实现Map而不是Map
  15. NAT 模式下网关设置
  16. #读书笔记# 《人类简史》Chapter4
  17. Date类对象与字符串的互相转换
  18. HashMap中的遍历有序性探究
  19. flutter permission 问题
  20. python数据分析实例2012美国总统竞选赞助分析

热门文章

  1. java三个线程 顺序执行_如何确保三个线程顺序执行
  2. 电脑键盘关机是哪个键_电脑关机后键盘鼠标还亮着怎么关闭?华硕主板的解决方法...
  3. createplayer 多次调用 位置错误_Programming in Lualua学习第6期 Lua编译执行与错误
  4. oracle数字加 39,Oracle数据库之SQL单行函数—数字函数-Oracle
  5. python测量镜头到目标距离_摄像头单目测距原理及实现
  6. android 禁用dlsym_一个绕过移动端系统限制的dlopen库: byOpen
  7. java中为什么还要防止内存泄露_JAVA防止内存的泄漏什么意思,内存还能泄露?...
  8. 深藏不露!下拉列表设计灵感
  9. 设计配色专辑,很值得设计师拥有
  10. java rpc 框架 常用_常用的RPC架构系列---gRPC