1

基础配置

在之前的文章中,我们已经配置了Kubernetes集群并安装了管理工具Kubesphere,文章地址为:https://mp.weixin.qq.com/s/MgpdMv5A-fYxN7XY8N9Djw

登录Kubesphere页面,打开工作台,在平台资源选项卡中点击“企业空间”,进入企业空间管理页面,点击“创建”按钮,创建我们自己的企业空间。

点击进入刚刚创建的企业空间,在左侧菜单点击“项目”,打开项目面板,并点击“创建”按钮,创建一个新的项目,这里我们名称为“demoproject”。

点击进入该项目,在菜单中找到应用负载→应用,选择自制应用,点击创建按钮,填入应用名称,暂时忽略其他步骤一直点击“下一步”到创建完成。

2

服务部署

在demoproject项目菜单中找到配置→保密字典,点击“创建”,名称输入aliyungit,用于配置阿里云镜像仓库用户名密码,输入名称后点击下一步,类型选择“镜像仓库信息”。仓库地址选择“https://”,后面输入框中输入镜像仓库公网地址以‘/’分割的第一段文字,例如镜像公网地址为 registry.cn-beijing.aliyuncs.com/zklight/productmanager ,则我们在输入框中输入 registry.cn-beijing.aliyuncs.com 。后面我们输入镜像仓库的用户名、密码,点击验证通过后点击“创建”完成该项配置。

在应用负载→应用→自制应用中找到第一章节中我们创建的应用并进入该应用管理页面,点击更多操作→添加服务,选择无状态服务。输入名称并点击“下一步”,在容器组设置中点击“添加容器”,在镜像一栏下拉选框选择刚才创建的阿里云镜像仓库地址,输入框中输入【镜像仓库命名空间】/【镜像仓库名称】,例如 zklight/productmanager ,点击回车,即可出现我们之前上传的镜像,在“端口设置”选项卡中的名称、容器端口、服务端口中分别填入该服务的端口号,例如产品管理服务的端口号为5010,则名称为“http-5010”,容器端口和服务端口均为5010。容器其他配置如果需要可依据实际情况进行配置,点击“√”并一直点击“下一步”完成服务创建。

创建完成后,在项目面板,应用负载→工作负载中可找到工作负载“productmanager-v1”,在应用负载→服务中可找到服务“productmanager”。由于生产环境和开发环境配置文件内容应该不同,所以工作负载暂时无法运行。

在项目面板左侧菜单中找到配置→配置字典,点击“创建”,输入名称“productmanagerconfig”,并点击下一步。在数据设置中点击添加数据,键我们输入 appsettings ,值我们将产品管理服务的配置文件appsettings.json的所有内容复制过来,并依据我们实际生产环境的配置修改各配置项,修改完成后点击“创建”完成配置项创建。

这里,如果我们出现服务间相互调用,则使用前面自制应用中添加服务后产生的服务名称,即应用负载→服务中的服务名称代替原IP地址或localhost,其他内容不变,Kubernetes会自动完成被调用服务的反向代理。

例如身份管理服务、订单服务、产品服务名称分别为identitymanager、ordermanager、productmanager,则在商城服务中RemoteServices配置如下:

"RemoteServices": {"Default": {"BaseUrl": "http://identitymanager:5000/"},"ProductManager": {"BaseUrl": "http://productmanager:5010/"},"OrderManager": {"BaseUrl": "http://ordermanager:5011/"}
}

在项目面板应用负载→工作负载中找到之前创建的工作负载productmanager-v1并点击进入,点击更多操作→编辑配置。找到存储卷选项卡,点击“挂载配置字典或密保字典”,在配置字典选项卡点击“选择配置字典”,选择刚才创建的productmanagerconfig。选择“只读”,并输入 /app/appsettings.json 。勾选“选择特定键值”,键选择appsettings(如果一个配置项设置多个Key/Value也是再次区分,建议每个项目一个配置项,每个配置文件一个Key/Value),值输入 appsettings.json ,如下图:

点击“√”并点击“确认”。

点击更多操作→编辑YAML,编辑工作负载配置文件如下:

1. 在containers选项中找到imagePullPolicy,值设置为Always,标识每次构建重新拉去镜像。

2.在containers选项中找到volumeMounts,在其中 mountPath: /app/appsettings.json 这一行下面添加同级内容 subPath: appsettings.json 。

3.点击“确定”,工作负载可运行成功则表示配置无误。

之后,我们按照相同方式依次对各服务进行部署配置。注意API网关中只配置聚合服务层和身份认证服务登录、刷新Token接口的映射。其将Routes中DownstreamHostAndPorts的Host改为对应服务在Kubernetes的service名称。具体如下:

{"Routes": [{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "identityserver","Port": 4100}],"UpstreamPathTemplate": "/ids/{url}","UpstreamHttpMethod": [ "Get","Post","Put","Delete" ]},{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "admin","Port": 6001}],"UpstreamPathTemplate": "/admin/{url}","UpstreamHttpMethod": [ "Get","Post","Put","Delete" ],"AuthenticationOptions": {"AuthenticationProviderKey": "DemoAuth","AllowedScopes": []}},{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "store","Port": 6002}],"UpstreamPathTemplate": "/store/{url}","UpstreamHttpMethod": [ "Get","Post","Put","Delete" ],"AuthenticationOptions": {"AuthenticationProviderKey": "DemoAuth","AllowedScopes": []}}],"GlobalConfiguration": {"BaseUrl": "https://localhost:4000"}
}

3

外部访问

Kubesphere提供了两种Kubernetes集群对外提供服务的方式,分别是NodePort和LoadBalancer,详细介绍请参照官方文档:https://kubesphere.com.cn/docs/project-administration/project-gateway/

LoadBalancer方式需要配置负载均衡器,通常使用云服务商提供的负载均衡器实现。所以我这里只简单介绍NodePort方式,如果需要使用LoadBalancer方式可按文档自行配置。

这里我们只需要为API网关项目配置外部访问,集群外部所有访问必须通过API网关,不能直接访问其他服务。

在之前配置的demo项目中,找到应用负载→服务,在列表中找到API网关对应的服务,点击右侧 按钮,选择“编辑外网访问”,在访问方式中选择NodePort并点击“确定”。Kubesphere会随机分配一个端口号,我们也可以在服务列表中点击“编辑配置文件”来指定端口号,端口号的范围必须在30000-32767之间。

之后,我们可以通过IP地址端口号来访问我们的服务集群,IP地址可以为集群中任意一台服务器的IP地址,或者我们配置的弹性EIP的地址,端口号即为上一步分配的端口号。

4

补充说明

作为微服务架构系统,我们通常希望每一个服务都可以部署多个节点,并实现弹性伸缩。Kubesphere为我们提供了非常简单方便的配置方式,只需要在应用负载→工作负载,点击进入对应的工作负载,并点击更多操作→弹性伸缩,并按需求配置我们的副本数和伸缩规则即可。

身份认证服务如果想实现多个服务之间Token互认,也就是说A服务签发的Token在B服务也可以认证通过,一方面需要所有服务具有统一的接入地址,另一方面需要私钥文件一致。这里我们使用Kubernetes的Service作为反向代理,保证了入口统一。而ABP vNext框架生成的身份认证服务已经将私钥文件单独存放出来(tempkey.rsa),默认情况下部署时不需要做任何额外处理。

这里我们只使用了Kubernetes很少的一部分功能,无论是Kubernetes或是Kubesphere,都为我们提供了非常丰富的功能和扩展空间,可依据自己的项目需求进行选择。具体请参考它们各自官方文档。

end

更多精彩

关注我获得

ABP vNext微服务架构详细教程——项目部署相关推荐

  1. ABP vNext微服务架构详细教程——结束语

    ABP vNext微服务架构详细教程--简介 ABP vNext微服务架构详细教程--架构介绍 ABP vNext微服务架构详细教程--身份管理服务 ABP vNext微服务架构详细教程--基础服务层 ...

  2. ABP vNext微服务架构详细教程——分布式权限框架(上)

    1 简介 ABP vNext框架本身提供了一套权限框架,其功能非常丰富,具体可参考官方文档:https://docs.abp.io/en/abp/latest/Authorization 但是我们使用 ...

  3. ABP vNext微服务架构详细教程——简介

    简介 该系列文章主要展示ABP vNext框架在微服务架构下的用法,提供一套可落地的技术实现思路,并演示各服务在Kubernetes下的部署方案. 基础概念 ABP vNext 基于ASP.NET C ...

  4. ABP vNext微服务架构详细教程——架构介绍

    总体架构 所有应用服务.API网关.身份认证服务均部署在Kubernetes容器中,由Kubernetes提供应用配置.服务治理.服务监控等功能. 客户端所有访问均通过Kubernetes的Nginx ...

  5. ABP vNext微服务架构详细教程——身份管理服务

    1 框架搭建 ABP vNext创建包含app和module两种模板,其中app方式所创建的模板包含用户.角色.权限管理,ABP基础配置IdentityServer的基础配置数据等功能.module模 ...

  6. ABP vNext微服务架构详细教程——基础服务层

    1 服务创建 在除身份管理相关服务以外的其他业务服务中,我们不需要包含用户角色权限管理功能模块,ABP vNext框架为我们提供了模块模式,其默认模板不包含身份管理相关模块,更适合用于搭建普通的业务微 ...

  7. ABP vNext微服务架构详细教程——分布式权限框架(下)

    3 公共组件 添加公共类库Demo.Permissions,编辑Demo.Permissions.csproj文件,将 <Project Sdk="Microsoft.NET.Sdk& ...

  8. abp vNext微服务框架分析

    abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究.我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.net人员来 ...

  9. 【转】abp vNext微服务框架分析

    abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究.我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.net人员来 ...

最新文章

  1. ZwQueryVirtualMemory暴力枚举进程模块
  2. 2020 操作系统第二次习题
  3. Silverlight Expression[转]
  4. Go基础编程:格式化输出、类型转换、类型别名
  5. js ajax数据的获取小示例 天气信息填充表格
  6. 游戏AI –行为树简介
  7. 【RK3399Pro学习笔记】十二、ROS参数的使用与编程方法
  8. 怎么用python算单价和总价_用python计算最高投标限价
  9. MVC进阶学习--HtmlHelper控件解析(三)
  10. 几种c++字符串split 函数实现的比较
  11. rman异机恢复数据库
  12. MAC共享目录让WINDOWS访问
  13. 学生抗疫HTML网页设计作品 学生疫情网页模板 大学生抗疫感动专题网页设计作业 HTML学生抗疫网站作业设计
  14. 单模光纤最大传输距离为多少_单模光纤的最长传输距离有多远?单模,多模光纤有什么不同呢?...
  15. KGB知识图谱的功能和特色介绍
  16. linux 鼠标滚轮 太快,Linux - 微软无线鼠标滚动过快问题
  17. 《就这样享用word》word实用技巧总结-更新中
  18. Swing + MySQL实现汽车租赁系统4.0
  19. 如何一天深度睡眠4个小时
  20. icheck 动态设置选中,判断是否选择

热门文章

  1. iOS - OC Copy 拷贝
  2. Extjs 中的cookie设置
  3. JavaScript方法
  4. wepack环境配置1之node的安装
  5. iOS-生成二维码图片【附中间带有小图标二维码】(QRCode)
  6. 添加ASP.NET网站资源文件夹
  7. java反射--注解的定义与运用以及权限拦截
  8. 部署webservice到远程服务器
  9. 世界杯,世界共同的游戏!
  10. ubuntu取消主目录加密_如何在Ubuntu上恢复加密的主目录