Dapr学习(4)之eShopOnDapr部署(Rancher2.63&k3s)

本篇主要讲述一下github上基于Dapr实现的商城demo在(K8s or K3s)环境中的部署实践,本文环境基于k3s&rancher2.6.3

1、eShopOnDapr源代码及概述

  • 源代码地址:

    https://github.com/dotnet-architecture/eShopOnDapr
  • 方案体系结构如下图:

    image
    说明:
      1. 前后端分离项目,前端Blazor项目,系统入口,发送api请求到apigateway
      2. API 网关从前端客户端抽象出后端核心微服务,为后端调用总入口。 它是使用 Envoy(一个高性能的开放源代码服务代理)实现的。 Envoy 将传入请求路由到后端微服务。 大多数请求都是简单的 CRUD 操作(例如,从目录中获取品牌列表),通过直接调用后端微服务进行处理。通过转换uri请求地址,通过Dapr的边车就行通信
      3. 核心后端微服务:购物车,商品管理,订单管理,支付管理
      4. 事件总线包装 Dapr 发布/订阅组件。 它实现了跨微服务异步发布/订阅消息传送。
    
  • ApiGateway Envoy重写uri截图如下:

    image

2、环境准备(k3s&rancher2.6.3)

关于Dapr安装见前面文章:https://www.cnblogs.com/kunwn/p/16271944.html

3、eShopOnDapr部署

  • 下载eShopOnDapr源代码,目录中有deploy文件夹,参考k8s部署模板文件

    image

  • 拷贝文件夹到k3s任意节点上(安装有helm)

    image

  • 方法1:命令行,进入到eShopOnDapr文件夹里,执行命令部署:

      部署:sudo helm install --set hostName=eshop.local.com myeshop .
      卸载:sudo helm uninstall myeshop
      指定路径卸载:sudo helm uninstall myeshop /eShopOnDapr
    

    image

  • 方法2:命令行,本地chart压缩包,执行命令部署:

      压缩包:sudo helm package eShopOnDapr
      部署:sudo helm install eshop eshopondapr-1.0.0.tgz #注意:压缩包名称改为小写,否则会报错
      卸载:sudo helm uninstall eshop eshopondapr-1.0.0.tgz
    

    image

  • 部署成功如下图:

    image

  • 通过rancher界面查看部署状态,等待一段时间,看所有的pod都已创建完毕

    image

  • 我们部署的域名为:eshop.local.com myeshop,我们通过修改hosts文件,指定地址;指定地址:192.168.231.133 eshop.local.com myeshop

      sudo kubectl get ingress -n eshopondapr
    

    image

  • 因为k3s默认的ingress controller使用的traefik,所以我们需要变动template模板文件都设置为traefik;我本地部署集群不能安装nginx ingress controller,不知何故,应该是有冲突的;我想如果是k3s管理的k8s集群,安装nginx ingress controller应该是没问题的;资源有限,只能traefik了,况且如果卸载了traefik,就会导致rancher ui不能使用,慎卸

  • 通过地址访问eshop:http://eshop.local.com/ ,发现报错

    image

  • 点击LOGIN,可以跳到登录界面,且可以登录;证明identity服务是可以访问的

    image

  • 只有通过apigateway调用后端各个微服务的api是报错的,一直没有解决,有traefik配置经验的大佬可以给与指点;如果通过nodeport暴露catalog api服务,是可以调通的,应该是还gateway的配置上出了问题

    image
    image

  • 部署文件模板已上传到地址:https://gitee.com/xujk-27400861/eshopondapr-k3s-template

4、traefik dashboard配置

  • port-forward 直接端口映射到本地访问,生产环境推荐

      sudo kubectl port-forward $(sudo kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name -n kube-system) 9000:9000 -n kube-system
    

    image
    image

    备注:访问本地的 localhost:9000/dashboard/ 即可,dashboard 后边的 /一定要有,否则会报 404;且只能虚拟机内部(k3s节点)查看,不能使用IP地址访问

5、K8s删除无用镜像

sudo crictl images | awk '{print $3}' | xargs crictl rmi #参考命令
sudo crictl images | grep 'eshopdapr' | awk '{print $3}' | xargs sudo crictl rmi # 删除eshopdapr相关的镜像

6、eshopondapr k3s部署解决(traefik2.4.8)

  • 上面已分析出因为apigateway访问不到,不可用,脑补了一下envoy部署,分析原因是因为路径中含有gateway,没有实现流量转发,如:http://eshop.local.com/gateway/c/api/v1/catalog/brands; 多了一个gateway,导致转发失败

  • 我们创建一个traefik Middleware中间件,来过滤掉gateway;

    image

  • 我们在gateway的yaml文件中,添加上中间件处理过滤

    image

  • 此时,我们访问catalog api,发现可以访问

    image

  • eshop主页的显示,也恢复了正常

    image

  • 还有一种方案,感觉麻烦了一些,就是修改envoy.yaml文件,匹配路径添加上gateway前缀,然后重新打包成镜像部署

    image

  • 这样也可以解决问题,仅供参考

  • 后续webstatus与seq log也已配属完毕,模板文件已上传到码云上

    image

    image

    image

  • 本篇完结!

posted @ 2022-08-09 00:02  xjk27400861  阅读(871)  评论(0编辑  收藏  举报