OpenShift 4 - Service Mesh使用入门

36 篇文章 0 订阅
21 篇文章 3 订阅

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

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

  1. 确认当前环境中有名为istio-app的项目,该项目在前面已经被加入到Service Mesh Member Roll的Member。
$ ISTIO_SYSTEM=istio-system
$ 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. 在第二个Terminal窗口执行命令,获取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跟踪到的微服务访问路径。注意:如果图像区域显示 “Empty Graph”,可以将右上方的统计时间选为 Last 5m。
    在这里插入图片描述
  2. 终止 6 步的脚本运行。

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,并在 Display 中显示 Response Time 和 Traffic Animation。确认所有请求都发到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/ACCOUNT-NAME/partner-service:1.0 .
$ podman login quay.io -u REGISTRY-USERNAME -p PASSWORD 
$ podman push quay.io/ACCOUNT-NAME/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/ACCOUNT-NAME/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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值