OpenShift 4 之运行Istio的BookInfo微服务应用 - Go语言中文社区

OpenShift 4 之运行Istio的BookInfo微服务应用


OpenShift 4.x HOL教程汇总

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

部署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);do
    oc -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

在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43902588/article/details/103770958
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2022-12-29 20:57:06
  • 阅读 ( 59 )
  • 分类:Go应用

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢