Dapr学习(4)之eShopOnDapr部署(Rancher2.63&k3s)
本篇主要讲述一下github上基于Dapr实现的商城demo在(K8s or K3s)环境中的部署实践,本文环境基于k3s&rancher2.6.3
1、eShopOnDapr源代码及概述
-
源代码地址:
https://github.com/dotnet-architecture/eShopOnDapr -
方案体系结构如下图:
说明:
1. 前后端分离项目,前端Blazor项目,系统入口,发送api请求到apigateway 2. API 网关从前端客户端抽象出后端核心微服务,为后端调用总入口。 它是使用 Envoy(一个高性能的开放源代码服务代理)实现的。 Envoy 将传入请求路由到后端微服务。 大多数请求都是简单的 CRUD 操作(例如,从目录中获取品牌列表),通过直接调用后端微服务进行处理。通过转换uri请求地址,通过Dapr的边车就行通信 3. 核心后端微服务:购物车,商品管理,订单管理,支付管理 4. 事件总线包装 Dapr 发布/订阅组件。 它实现了跨微服务异步发布/订阅消息传送。
-
ApiGateway Envoy重写uri截图如下:
2、环境准备(k3s&rancher2.6.3)
关于Dapr安装见前面文章:https://www.cnblogs.com/kunwn/p/16271944.html
3、eShopOnDapr部署
-
下载eShopOnDapr源代码,目录中有deploy文件夹,参考k8s部署模板文件
-
拷贝文件夹到k3s任意节点上(安装有helm)
-
方法1:命令行,进入到eShopOnDapr文件夹里,执行命令部署:
部署:sudo helm install --set hostName=eshop.local.com myeshop . 卸载:sudo helm uninstall myeshop 指定路径卸载:sudo helm uninstall myeshop /eShopOnDapr
-
方法2:命令行,本地chart压缩包,执行命令部署:
压缩包:sudo helm package eShopOnDapr 部署:sudo helm install eshop eshopondapr-1.0.0.tgz #注意:压缩包名称改为小写,否则会报错 卸载:sudo helm uninstall eshop eshopondapr-1.0.0.tgz
-
部署成功如下图:
-
通过rancher界面查看部署状态,等待一段时间,看所有的pod都已创建完毕
-
我们部署的域名为:eshop.local.com myeshop,我们通过修改hosts文件,指定地址;指定地址:192.168.231.133 eshop.local.com myeshop
sudo kubectl get ingress -n eshopondapr
-
因为k3s默认的ingress controller使用的traefik,所以我们需要变动template模板文件都设置为traefik;我本地部署集群不能安装nginx ingress controller,不知何故,应该是有冲突的;我想如果是k3s管理的k8s集群,安装nginx ingress controller应该是没问题的;资源有限,只能traefik了,况且如果卸载了traefik,就会导致rancher ui不能使用,慎卸
-
通过地址访问eshop:http://eshop.local.com/ ,发现报错
-
点击LOGIN,可以跳到登录界面,且可以登录;证明identity服务是可以访问的
-
只有通过apigateway调用后端各个微服务的api是报错的,一直没有解决,有traefik配置经验的大佬可以给与指点;如果通过nodeport暴露catalog api服务,是可以调通的,应该是还gateway的配置上出了问题
-
部署文件模板已上传到地址: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
备注:访问本地的 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;
-
我们在gateway的yaml文件中,添加上中间件处理过滤
-
此时,我们访问catalog api,发现可以访问
-
eshop主页的显示,也恢复了正常
-
还有一种方案,感觉麻烦了一些,就是修改envoy.yaml文件,匹配路径添加上gateway前缀,然后重新打包成镜像部署
-
这样也可以解决问题,仅供参考
-
后续webstatus与seq log也已配属完毕,模板文件已上传到码云上
-
本篇完结!