OpenShift 4之Service Mesh入门

OpenShift 4之Service Mesh入门

  • OpenShift Service Mesh
  • 操作环境
  • 通过Operator安装Red Hat Service Mesh及相关环境
  • 配置Red Hat Service Mesh环境
    • 创建Service Mesh Control Plane
    • 创建Service Mesh Member Roll
  • 部署Istio微服务,并验证访问
  • Istio 动态路由、灰度发布、流量镜像

OpenShift Service Mesh

在OpenShift 4中Red Hat将Istio,Jaeger,Kiali和3scale Istio Adapter集成在Openshift Service Mesh环境中。在OpenShift 4中借助Operator可以通过非常简单的过程创建一套Service Mesh的运行环境,并在此之上部署运行Istio微服务,并使用Kiali监控微服务网格的运行。
OpenShift 4之Service Mesh入门_第1张图片

操作环境

以下操作需要OpenShift 4.2运行环境(OpenShift 4.1或更高版本应该也可以)。

通过Operator安装Red Hat Service Mesh及相关环境

Red Hat OpenShift Service Mesh会用到Kiali Operator、Jaeger Operator。在OpenShift 4.2中无需单独安装Kiali Operator、Jaeger Operator步骤,Service Mesh可自动安装这两个Operator。

  1. 用admin身份的用户登录OpenShift Console的Administrator视图。
  2. 进入Operators->OperatorHub,查找“Red Hat OpenShift Service Mesh”,然后点击进入。
  3. 在Red Hat OpenShift Service Mesh说明界面中点击Install。
  4. 在Create Operator Subscription中接受缺省选项,点击Subscribe。
  5. 界面会跳转的Installed Operators,稍等一会可以看到Jaeger、Kiali、Elasticsearch和OpenShift Service Mesh的Operator已经是Copied状态。
    OpenShift 4之Service Mesh入门_第2张图片

配置Red Hat Service Mesh环境

上一步是安装Operator,本步骤是基于Service Mesh Operator创建Istio的运行环境。

创建Service Mesh Control Plane

  1. 执行命令创建istio-system项目
$ oc new-project istio-system
  1. 进入OpenShift控制台的Administrator视图的Operators->Installed Operators,确认当前是istio-system项目。
  2. 在Installed Operators列表中进入Red Hat Serivce Mesh链接,然后点击Overview的Istio Service Mesh Control Plane下方的Create Instance链接,将https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/service-mesh.yaml文件的内容填入编辑区域,然后点击Create。
  3. OpenShift会创建所有基于Istio的Service Mesh运行资源。这个过程会比较长,完成后会在istio-system项目中创建以下12个pod和5个route。
$ oc get pod -n istio-system
NAME                                      READY   STATUS    RESTARTS   AGE
grafana-b67df64b6-6m254                   2/2     Running   0          118m
istio-citadel-79979464d-n8bbs             1/1     Running   0          146m
istio-egressgateway-7d897695c4-6rwpc      1/1     Running   0          119m
istio-galley-6bb46858c5-zn2b9             1/1     Running   0          142m
istio-ingressgateway-8465bbf788-q286r     1/1     Running   0          119m
istio-pilot-54b65495c4-fhzxt              2/2     Running   0          120m
istio-policy-5fc74b8697-n625g             2/2     Running   0          140m
istio-sidecar-injector-65cd4c8c6f-dd7bs   1/1     Running   0          119m
istio-telemetry-69cb778b9-pzsl8           2/2     Running   0          140m
jaeger-57776787bc-dcf9k                   2/2     Running   0          142m
kiali-6d6f9cf658-l9n9p                    1/1     Running   0          105m
prometheus-b8bdc6b77-jt969                2/2     Running   0          144m

$ oc get route -n istio-system
NAME                   HOST/PORT                                            PATH   SERVICES               PORT    TERMINATION   WILDCARD
grafana                grafana-istio-system.apps-crc.testing                       grafana                <all>   reencrypt     None
istio-ingressgateway   istio-ingressgateway-istio-system.apps-crc.testing          istio-ingressgateway   8080                  None
jaeger                 jaeger-istio-system.apps-crc.testing                        jaeger-query           <all>   reencrypt     None
kiali                  kiali-istio-system.apps-crc.testing                         kiali                  <all>   reencrypt     None
prometheus             prometheus-istio-system.apps-crc.testing                    prometheus             <all>   reencrypt     None

创建Service Mesh Member Roll

  1. 在istio-system项目的Installed Operators列表中进入Red Hat Serivce Mesh链接,点击Overview的stio Service Mesh Member Roll下方的Create Instance链接,然后提供下面内容(其中的istio-tutorial项目会在下一步创建),最后Create。
apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
  name: default
spec:
  members:
    - istio-tutorial

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

  1. 执行以下命令,创建istio-tutorial项目,然后创建测试用的Istio微服务资源。
$ oc new-project istio-tutorial
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/catalog/kubernetes/catalog-service-template.yml 
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/partner/kubernetes/partner-service-template.yml
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/gateway/kubernetes/gateway-service-template.yml
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/catalog/kubernetes/Service.yml 
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/partner/kubernetes/Service.yml 
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/gateway/kubernetes/Service.yml 
  1. 完成后应该可以看到3个pod,每个pod包括2个container,其中一个是微服务,一个是微服务对应的istio-proxy。
$ oc get pod -n istio-tutorial
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
  1. 执行命令创建Gateway和VirtualService对象,构建微服务访问通道。注意:该访问通道是通过运行在istio-system项目中的istio-ingressgateway实现的。
$ oc apply -f https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/service-mesh-gw.yaml -n istio-tutorial
  1. 查找gateway的访问地址GATEWAY_URL,然后访问。返回会显示微服务的访问路径,可以看到当前访问的v1版的catalog微服务。
$ oc -n istio-system get route istio-ingressgateway -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
  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跟踪到的微服务访问路径。

OpenShift 4之Service Mesh入门_第3张图片

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

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

  1. 执行命令,创建v2版的catalog微服务。该为服务也有2个container,其中一个是微服务,一个是微服务对应的istio-proxy。
$ oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/catalog-v2/kubernetes/catalog-service-template.yml
$ oc get pod -l application=catalog -w
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 create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/istiofiles/destination-rule-catalog-v1-v2.yml
oc create -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/istiofiles/virtual-service-catalog-v2.yml 
  1. 还可通过Kiali控制台确认所有请求都发到v2版的catalog微服务上了。
    OpenShift 4之Service Mesh入门_第4张图片
  2. 在第二个Terminal中执行以下命令,修改VirtualService对象配置,然后查看确认请求被全部路由到v1版的catalog上。
$ oc replace -f https://raw.githubusercontent.com/gpe-mw-training/ocp-service-mesh-foundations/master/istiofiles/virtual-service-catalog-v1.yml
  1. 在第二个Terminal中执行以下命令,删除VirtualService对象配置,然后查看确认请求被平均发到v1和v2版的catalog上。
$ oc delete VirtualService catalog
  1. 在Kiali中的Versioned app graph视图可以看到请求平均发到catalog的v1和v2上。
    OpenShift 4之Service Mesh入门_第5张图片
  2. 在第二个Terminal中执行以下命令,使用mirror的VirtualService策略,将请求发给v1的同时通过mirror发给v2。这种策略可以用来在不影响现有v1使用的时候测试v2版本的catalog微服务。
$ oc replace -f https://raw.githubusercontent.com/gpe-mw-training/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个版本的微服务中了。另外也可以在Kiali控制台查看微服务调用过程。
    OpenShift 4之Service Mesh入门_第6张图片
  2. 缺省视图只显示mirror的主目标。双击红色区域后会显示主目标和所有mirror目标的流量。
    OpenShift 4之Service Mesh入门_第7张图片

你可能感兴趣的:(OpenShift,4,Dev)