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

文章目录

  • 部署Istio微服务,并验证访问
  • Istio 动态路由、灰度发布、流量镜像
  • 更新微服务
  • 参考

部署Istio微服务,并验证访问

  1. 确认当前环境中有名为istio-app的项目,该项目在前面已经被加入到Service Mesh Member Roll的Member。
$ export ISTIO_SYSTEM=istio-system
$ export ISTIO_APP=istio-app
$ oc get project ${ISTIO_APP}
  1. 执行以下命令部署Istio微服务资源。
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/catalog/kubernetes/catalog-service-template.yml
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/partner/kubernetes/partner-service-template.yml
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/gateway/kubernetes/gateway-service-template.yml
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/catalog/kubernetes/Service.yml
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/partner/kubernetes/Service.yml
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/gateway/kubernetes/Service.yml
  1. 完成后应该可以看到3个pod,每个pod包括2个container,其中一个是微服务,一个是微服务对应的istio-proxy。
$ oc get pod -n ${ISTIO_APP}
NAME                          READY     STATUS    RESTARTS   AGE
catalog-v1-6b576ffcf8-g6b48   2/2       Running   0          1m
partner-v1-68b4854c79-s5vnd   2/2       Running   0          2m
gateway-7b6bb9dcf7-zb8br      2/2       Running   0          1m$ oc get svc -n ${ISTIO_APP}
NAME      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
catalog   ClusterIP   172.30.112.255   <none>        8080/TCP   9m9s
gateway   ClusterIP   172.30.110.18    <none>        8080/TCP   8m6s
partner   ClusterIP   172.30.104.58    <none>        8080/TCP   4m1s

注意:如果READY只显示“1/1”,说明没有自动注入运行istio-proxy的sidecar容器。需要确认在对应的Deployment中有为Pod声明sidecar.istio.io/inject: "true"的annotations,然后在手动更新一下Deployment。

  1. 执行命令创建Gateway和VirtualService对象,构建微服务访问通道。注意:该访问通道是通过运行在istio-system项目中的istio-ingressgateway实现的。
$ oc -n ${ISTIO_APP} apply -f https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/service-mesh-gw.yaml
  1. 查找gateway的访问地址GATEWAY_URL,然后访问。返回会显示微服务的访问路径,可以看到当前访问的v1版的catalog微服务。
$ GATEWAY_URL=$(oc get route istio-ingressgateway -n ${ISTIO_SYSTEM} -o jsonpath='{.spec.host}')
$ curl ${GATEWAY_URL}
gateway => partner => catalog v1 from '6b576ffcf8-g6b48': 1
  1. 执行命令,持续访问应用
$ while true; do curl ${GATEWAY_URL}; sleep 1;done
gateway => partner => catalog v1 from '56c9c9846d-svwdn': 2
gateway => partner => catalog v1 from '56c9c9846d-svwdn': 3
gateway => partner => catalog v1 from '56c9c9846d-svwdn': 4
gateway => partner => catalog v1 from '56c9c9846d-svwdn': 5
  1. 执行命令,获取Kiali控制台的访问地址KIALI_URL
$ oc get route kiali -n ${ISTIO_SYSTEM} -o template --template='{{.spec.host}}'
  1. 用浏览器访问Kiali控制台,然后使用OpenShift相同的管理员用户和密码登录。在Namespace选择istio-tutorial,然后选择Service graph的Graph,即可看到如下Kiali跟踪到的微服务访问路径。注意:如果图像中没有箭头,可以将右上方的统计时间选为 Last 30m

Istio 动态路由、灰度发布、流量镜像

部署v2版的catalog微服务,然后配置Gateway引流,将请求发给v1和v2。

  1. 执行命令,创建v2版的catalog微服务。该为服务也有2个container,其中一个是微服务,一个是微服务对应的istio-proxy。
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/catalog-v2/kubernetes/catalog-service-template.yml
$ oc get pod -l application=catalog -n ${ISTIO_APP}
NAME                          READY     STATUS    RESTARTS   AGE
catalog-v1-6b576ffcf8-g6b48   2/2       Running   0          31m
catalog-v2-7764964564-hj8xl   2/2       Running   0          49s
  1. 在第一个Terminal中执行以下命令,持续访问GATEWAY_URL。可以看到是catalog轮流用v1和v2的微服务响应请求。
$ while true; do curl ${GATEWAY_URL}; sleep 1; done
  1. 在第二个Terminal中执行以下命令,创建DestinationRule和VirtualService对象,然后查看确认请求被全部路由到v2版的catalog上。
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/istiofiles/destination-rule-catalog-v1-v2.yml
$ oc -n ${ISTIO_APP} create -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/istiofiles/virtual-service-catalog-v2.yml
  1. 还可通过Kiali控制台中查看 Versioned app graph,确认所有请求都发到v2版的catalog微服务上了。
  2. 在第二个Terminal中执行以下命令,修改VirtualService对象配置,然后查看确认请求被全部路由到v1版的catalog上。
$ oc -n ${ISTIO_APP} replace -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/istiofiles/virtual-service-catalog-v1.yml
  1. 在第二个Terminal中执行以下命令,删除VirtualService对象配置,然后查看确认请求被平均发到v1和v2版的catalog上。
$ oc delete VirtualService catalog -n ${ISTIO_APP}
  1. 在Kiali中的Versioned app graph视图,并显示Requ Distribution和Triffic Animation,可以看到请求平均发到catalog的v1和v2上。
  2. 在第二个Terminal中执行以下命令,使用mirror的VirtualService策略,将请求发给v1的同时通过mirror发给v2。这种策略可以用来在不影响现有v1使用的时候测试v2版本的catalog微服务。
$ oc -n ${ISTIO_APP} apply -f https://raw.githubusercontent.com/liuxiaoyu-git/ocp-service-mesh-foundations/master/istiofiles/virtual-service-catalog-v1-mirror-v2.yml
  1. 可以进入OpenShift控制台,在istio-tutorial项目中找到catalog-v1和catalog-v2的Pod,然后查看Logs。可以看到2个Pod都有日志输出,说明请求被mirror到2个版本的微服务中了。
  2. 另外也可以在Kiali控制台查看微服务调用过程,通过Animation可以看到一个请求会发给所有catalog服务的mirror目标。

更新微服务

如果更新微服务代码,可以通过以下过程编译代码、构建镜像和重新部署镜像。

  1. 获取微服务代码。
$ git clone https://github.com/gpe-mw-training/ocp-service-mesh-foundations
  1. 修改微服务代码后执行以下命令编译代码。
$ cd ocp-service-mesh-foundations/partner/java/springboot
$ ls
Dockerfile  mvnw  mvnw.cmd  pom.xml  src  target
$ mvn clean install
  1. 构建镜像,然后推送到Image Registry上(例如quay.io)。
$ podman build -t quay.io/xianliu/partner-service:1.0 .
$ podman login quay.io -u REGISTRY-USERNAME -p PASSWORD
$ podman push quay.io/xianliu/partner-service:1.0
  1. 如果从Image Registry拉镜像需要认证,则执行命令创建对应的Secret对象。
$ oc create secret docker-registry quay-secret --docker-server=quay.io --docker-username=REGISTRY-USERNAME --docker-password=PASSWORD --docker-email=YOUR-EMAIL
$ oc secrets link default quay-secret --for=pull
  1. 修改Deployment文件,使用最新的镜像“quay.io/xianliu/partner-service:1.0”。
  2. 删除原有的Deployment,然后根据修改后的Deployment文件重新部署即可生效。

参考

https://github.com/gpe-mw-training/ocp-service-mesh-foundations
https://cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-openshift-service-mesh
https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.6/html/service_mesh/deploying-applications-ossm

OpenShift 4 - Service Mesh使用入门相关推荐

  1. OpenShift 4 - Service Mesh环境和BookInfo应用安装脚本

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 安装部署 以下安装部署脚本包括OpenShift Service Mesh环境安装脚本 ...

  2. 深入浅出Istio:Service mesh快速入门与实践-读书笔记(By GisonWin)

    01 服务网格历史 (以后补充) 02 服务网格的基本特性 连接 微服务错综复杂,要完成其业务目标,连接问题是首要问题.连接存在于所有服务的整个lifcecycle中,用于维持服务的运行. 安全 保障 ...

  3. 推荐一个 Service Mesh 专栏

    微服务这两年都被说滥了,所以今天不聊旧东西. 我要说说 Service Mesh,从 2018 年成为 Service Mesh 元年开始,国内各家大厂都在落地 Service Mesh(遗憾的是,因 ...

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

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

  5. 浅谈服务治理、微服务与Service Mesh(二) Spring Cloud从入门到精通到放弃

    引言 作为本系列文章的第二篇,本文主要为大家介绍下微服务概念中非常火热的Spring Cloud开发框架.由于网上关于Spring Cloud的文章多如牛毛,为了让大家阅读后能有不一样的收获,因此本文 ...

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

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

  7. OpenShift 4 之Service Mesh教程(6)- 根据Header路由请求

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 场景一 用 VirtualService 访问 Frontend 应用 用 ...

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

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

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

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

最新文章

  1. 关于C#应用的授权认证
  2. flink sql client读取hive时卡住
  3. Nessus安全测试插件编写教程(2)
  4. fpga板子怎么和电脑连_windows7台式电脑怎么连接路由器?台式win7电脑连路由器步骤...
  5. 用IoT放羊养牛,不出门也能知道它们的动向
  6. 求助帖--C++中单引号' '内多个字符是什么意思
  7. 吸烟首先危害是会引起火灾,电子烟较好
  8. 基于单片机的贪吃蛇游戏设计仿真
  9. Linux 关于vmlinux和vmlinuz
  10. C++:使用vector容器中的erase和swap释放内存
  11. Pytorch系列(六):猫狗大战3-MobileNet_V1V2
  12. Nodejs搭建前后端分离开发模式下的微信网页项目
  13. 蛙蛙推荐:蛙蛙浏览器
  14. JPK Data Processing AFM数据处理
  15. 使用click进行对测试工具进行封装
  16. MyBatis-第三章 动态SQL
  17. 怎样在视频画面指定位置编辑马赛克
  18. laydate时间控件在谷歌浏览器中兼容性问题
  19. 二十六、 对偶问题(※※※)
  20. scrapy 保存到mysql_Scrapy保存数据到mysql

热门文章

  1. python getopt_python 5种 statsPython中的getopt函数使用详解
  2. eclipse支持html,让eclipse完全支持HTML/JS/CSS智能提示
  3. odoo13 订单模板设置_免费开源ERP Odoo 13系统E-mail邮件功能设置操作指南
  4. bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
  5. android服务器连接失败,Android Studio服务器连接失败
  6. python程序文件的扩展名称是什么_python程序文件的扩展名称是什么_Python教程,python,扩展名...
  7. Windows核心编程学习笔记
  8. 字符串去空格符(c++)
  9. 思科VPP 20.05 dpdk node源码分析
  10. 成为linux全栈工程师:2019.05.25