《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证

文章目录

  • 场景一
    • 用 VirtualService 访问 Frontend 应用
    • 用 Gateway 的路由访问 Frontend 应用
  • 场景二
    • 用Kiali控制台实现配置

场景一

本文的请求通过Gateway进入Istio,并通过VirtualService对不同header的请求分别发给frontend-v1和frontend-v2微服务。
有关Gateway可以查看https://istio.io/docs/reference/config/networking/gateway/

用 VirtualService 访问 Frontend 应用

本文可在完成《OpenShift 4 之Service Mesh教程(2)- 用Kiali监控微服务运行》后进行操作。在开始正式操作前需要运行以下命令将运行应用的my-istio-app项目里的内容清空即可(注意需要将脚本中的“USERID“替换为本文中的”my-istio-app“)。

$ source scripts/teardown.sh
  1. 执行命令,创建frontend-v1和frontend-v2微服务和相关资源,并删除所有VirtualService和DestinationRule对象。
$ oc apply -n my-istio-app -f ocp/frontend-v1-deployment.yaml
$ oc apply -n my-istio-app -f ocp/frontend-v2-deployment.yaml
$ oc apply -n my-istio-app -f ocp/frontend-service.yaml
$ oc apply -n my-istio-app -f ocp/frontend-route.yaml
$ oc apply -n my-istio-app -f ocp/backend-v1-deployment.yaml
$ oc apply -n my-istio-app -f ocp/backend-service.yaml
$ oc delete -n my-istio-app istio-io --all
  1. 运行命令,然后在Kiali的控制台查看请求的微服务调用路径。
$ source scripts/run-50.sh


4. 执行命令创建Virtual Service和Destination Rule,其中VirtualService定义了基于header的路由条件。

$ oc apply -n my-istio-app -f istio-files/destination-rule-frontend-v1-v2.yaml
$ cat << EOF | oc apply -n my-istio-app -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: frontend
spec:hosts:- '*'gateways:- frontend-gatewayhttp:- match:- headers:foo:exact: barroute:- destination:host: frontendsubset: v1- route:- destination:host: frontendsubset: v2
EOF

5.用缺省和指定header访问frontend路由(其中“FRONTEND_URL”是本系列第一节创建的route对象),确认是流经了不同的Frontend。

$ curl $FRONTEND_URL -w "\n"
Frontend version: 2.0.0 => [Backend: http://backend:8080, Response: 200, Body: Backend version:v1, Response:200, Host:backend-v1-f4dbf777f-wl7vn, Status:200, Message: Hello, Quarkus]
$ curl -H foo:bar $FRONTEND_URL -w "\n"
Frontend version: 1.0.0 => [Backend: http://backend:8080, Response: 200, Body: Backend version:v1, Response:200, Host:backend-v1-f4dbf777f-5qjqw, Status:200, Message: Hello, Quarkus]
  1. 在Kiali控制台中查看微服务调用路径。

用 Gateway 的路由访问 Frontend 应用

除了使用以上VirtualService对应的路由(该路由名为frontend,是本系列第一步创建的,在my-istio-app项目中)地址访问,还可使用本步Gateway自动生成对应的route(该route会在istio-system项目中)访问Frontend应用。

  1. 查看“istio-files/gateway.yaml”文件,然后将以下“hosts”的内容替换一个可用的主机名,例如“frontend-header-my-istio-app.apps.apps-crc.testing”。
$ cat << EOF | oc apply -n my-istio-app -f -
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: frontend-gateway
spec:servers:- hosts:- 'frontend-istio-USERID.apps.DOMAIN'port:name: httpnumber: 80protocol: HTTPselector:istio: ingressgateway
EOF
  1. 在创建完Gateway对象后,会在Istio的控制项目中(本文是istio-system项目)创建一个对应的route,其中该route的访问地址就是上一步Gateway中由“hosts”定义的地址。
$ GATEWAY_URL=$(oc -n istio-system get route $(oc get route -n istio-system | grep my-istio-app | awk '{print $1}')  -o jsonpath='{.spec.host}')
$ curl -H foo:bar $GATEWAY_URL -w "\n"
Frontend version: 1.0.0 => [Backend: http://backend:8080, Response: 200, Body: Backend version:v1, Response:200, Host:backend-v1-f4dbf777f-5qjqw, Status:200, Message: Hello, Quarkus]
$ curl  $GATEWAY_URL -w "\n"
Frontend version: 2.0.0 => [Backend: http://backend:8080, Response: 200, Body: Backend version:v1, Response:200, Host:backend-v1-f4dbf777f-5qjqw, Status:200, Message: Hello, Quarkus]

场景二

用Kiali控制台实现配置

  1. 确认已经部署相关的前后端应用和相关服务,同时删除所有已有的VirtualService、DestinationRule、Gateway。
$ oc apply -n my-istio-app -f ocp/frontend-v1-deployment.yaml
$ oc apply -n my-istio-app -f ocp/frontend-v2-deployment.yaml
$ oc apply -n my-istio-app -f ocp/frontend-service.yaml
$ oc apply -n my-istio-app -f ocp/frontend-route.yaml
$ oc apply -n my-istio-app -f ocp/backend-v1-deployment.yaml
$ oc apply -n my-istio-app -f ocp/backend-v1-deployment.yaml
$ oc apply -n my-istio-app -f ocp/backend-service.yaml
$ oc delete -n my-istio-app istio-io --all
  1. 在Kiali控制台中进入Services的菜单,然后进入frontend。在页面中右侧点击“Actions”中进入“Request Routing”。
  2. 在“Create Request Routing”对话框中先在“Request Matching”中按照下图配置,即“headers,User-Agent,prefix,curl”,最后点击“Add Match”。
  3. 然后在“Route To”栏中按照下图调整frontend-v1和frontend-v2的比例,然后点击“Add Rule”。
  4. 然后再回到“Request Matching”,按照下图清除“Matching Selected”的内容。
  5. 再回到“Route To”栏,按照下图调整frontend-v1和frontend-v2的比例,然后点击“Add Rule”。
  6. 点开对话框下方的“Show Advanced Options”,先进入“Gateways”。在打开“Add Gateway”后按照下图配置Gateway,其中为“Gateway Hosts”配置为"frontend-curl.apps.apps-crc.testing",注意:“apps-crc.testing”为OpenShift集群的域名,可以通过以下命令获得。
$ oc whoami --show-console | awk -F'apps.' '{print $2}'


8. 确认“Hosts”栏中的“VirtualService Hosts”也自动为上一步的“Gateway Hosts”地址。

9. 查看VirtualService、DestinationRule和Gateway。

$ oc get istio-io -n my-istio-app
NAME                                          GATEWAYS                            HOSTS                                              AGE
virtualservice.networking.istio.io/frontend   ["my-istio-app/frontend-gateway"]   ["frontend-curl.apps.apps-crc.testing"]   31sNAME                                           HOST                                      AGE
destinationrule.networking.istio.io/frontend   frontend-curl.apps.apps-crc.testing   31sNAME                                           AGE
gateway.networking.istio.io/frontend-gateway   31s
  1. 查看由frontend-gateway的Gateway自动生成的Route。
$ oc get route -n istio-system -l maistra.io/gateway-name=frontend-gateway
NAME                                             HOST/PORT                                    PATH   SERVICES        PORT    TERMINATION   WILDCARD
my-istio-app-frontend-gateway-a43e9c0ad2061665   frontend-curl.apps.apps-crc.testing          istio-ingressgateway   http2                 None
  1. 使用不同的header访问Gateway对应的Route地址,确认是由不同的frontend响应的。
$ GATEWAY_URL=$(oc get route -n istio-system | grep my-istio-app | awk '{print $2}')
$ curl -H 'User-Agent: curl' ${GATEWAY_URL}
Frontend version: 1.0.0 => [Backend: http://backend:8080, Response: 200, Body: Backend version:v2, Response:200, Host:backend-v2-5758c6c584-d244h, Status:200, Message: {  "args": {},   "data": "",   "files": {},   "form": {},   "headers": {    "Accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2",     "Host": "httpbin.org",     "User-Agent": "Java/11.0.12",     "X-Amzn-Trace-Id": "Root=1-6149c4c8-770539d858da509a18baa482",     "X-B3-Parentspanid": "99841a4c4bdfe8a4",     "X-B3-Sampled": "1",     "X-B3-Spanid": "240d772083c6373a",     "X-B3-Traceid": "3507c659dceb09c06a3375a7dcdfd38e"  },   "origin": "116.228.156.11",   "url": "https://httpbin.org/delay/5"}] $ curl -H 'User-Agent: foo' ${GATEWAY_URL}
Frontend version: 2.0.0 => [Backend: http://backend:8080, Response: 200, Body: Backend version:v2, Response:200, Host:backend-v2-5758c6c584-d244h, Status:200, Message: {  "args": {},   "data": "",   "files": {},   "form": {},   "headers": {    "Accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2",     "Host": "httpbin.org",     "User-Agent": "Java/11.0.12",     "X-Amzn-Trace-Id": "Root=1-6149c4de-5c80147a460c13c355e9becb",     "X-B3-Parentspanid": "bd328e330e03e829",     "X-B3-Sampled": "1",     "X-B3-Spanid": "751e13b0a1f6331c",     "X-B3-Traceid": "4ed25401bd63c5922f8f061657b4a83f"  },   "origin": "116.228.156.11",   "url": "https://httpbin.org/delay/5"}]

OpenShift 4 之Service Mesh教程(6)- 根据Header路由请求相关推荐

  1. OpenShift 4 之Service Mesh教程(5)- 断路器Circuit Breaker

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本文将模拟一个运行了backend-v1的Pod出问题,并在发给backend-v1微 ...

  2. OpenShift 4 之Service Mesh教程(4)- 跟踪访问后端服务超时

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本文说明如何在Istio中的VirtualService中设置访问的timeout特性 ...

  3. OpenShift 4 之Service Mesh教程(1)- 创建ServiceMesh环境,部署Istio的微服务

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 创建ServiceMesh环境 部署Istio的微服务 参考 创建Servi ...

  4. OpenShift 4 之Service Mesh教程(3)- 访问流量管理

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 按比例分发流量 流量镜像 按比例分发流量 本节要配置Fontend微服务的流 ...

  5. OpenShift 4 之Service Mesh教程(2)- 用Kiali监控微服务运行

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 获得Kiali访问地址,然后用浏览器访问并登陆. $ oc get route kia ...

  6. OpenShift 4 - 创建Service Mesh运行环境

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 安装 OpenShift Service Mesh 和相关依赖 Opera ...

  7. OpenShift 4 之通过命令创建Service Mesh环境

    <OpenShift 4.x HOL教程汇总> 本文使用命令行方式在OpenShift 4上创建Service Mesh运行环境,然后进行验证. 图形化方式创建Service Mesh运行 ...

  8. 蚂蚁金服 Service Mesh 实践探索

    作者 | 敖小剑 本文整理自蚂蚁金服高级技术专家在 QCon 上海 2018 上的演讲. 大家好,我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的PD.我同时也是 ...

  9. 从蚂蚁金服实践入手,带你深入了解 Service Mesh

    本文整理自蚂蚁金服高级技术专家敖小剑在 QCon 上海 2018 上的演讲. 我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的 PD.我同时也是 Serviceme ...

最新文章

  1. 客户端相关知识学习(四)之H5页面如何嵌套到APP中
  2. SpringMVC-自定义转换器
  3. 区块链随想:共识不等于信用
  4. 【pyqt5学习】——进度条progressBar
  5. [转载]--- 开箱即用的springboot分库分表sharding-JDBC
  6. java 网页正文抽取算法_GitHub - hfut-dmic/ContentExtractor: 自动抽取网页正文的算法,用JAVA实现...
  7. 必须要掌握的七种谈话技巧
  8. servlet的doPost 和doGet和web文件结构
  9. 蓝桥杯 ALGO-116算法训练 最大的算式
  10. 微软纸牌服务器慢,微软为何设计纸牌和扫雷?真是用心良苦
  11. Stm32串口通信基础实验
  12. 忘记Mac开机密码处理方法
  13. Take me to your heart(English Song)
  14. 设计一个圆形的类即Circle类。
  15. 【LeetCode】Day51-打家劫舍 III变形
  16. 20170711 通过阿里云与国家气象局合作的api读取历史辐照数据
  17. 受邀参加2009中国电子商务创新发展高峰论坛
  18. NLP学习笔记-FastText文本分类(四)
  19. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第五集
  20. 世界一流企业,谁不是靠模仿起家的?

热门文章

  1. android 内存分析 郭霖_android 内存泄漏(OOM)问题总结
  2. python多重继承super父类参数_多重继承如何处理super()和不同的参数?
  3. gitlab php自动化测试,自动化发布-GitLab WEB Hooks 配置
  4. java 一个线程运行_Java并发(基础知识)—— 创建、运行以及停止一个线程
  5. python中socket怎么用_Python 之socket的应用
  6. python数据结构实验目的_图的基本操作实现(数据结构实验)
  7. nmos导通流向_技术参数详解,MOS管知识最全收录!
  8. 计算机系毕业生自我评价,计算机系应届毕业生自我评价范文
  9. 资源分享|平面设计师可参考的素材网站
  10. UI设计素材模板|完美日期选择器