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,编辑工作负载配置文件如下:

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

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

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

之后,我们按照相同方式依次对各服务进行部署配置。注意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,都为我们提供了非常丰富的功能和扩展空间,可依据自己的项目需求进行选择。具体请参考它们各自官方文档。

ABP vNext微服务架构详细教程——项目部署的更多相关文章

  1. 基于 abp vNext 微服务开发的敏捷应用构建平台 - 项目介绍

    缘起 目前使用ABP框架已经将近3年了,大大小小的项目也陆陆续续做了很多.由于现有信息系统的架构模式是在底层的技术平台上直接构建信息系统并采用技术主导,使用业务无关的编程工具来开发信息系统的缺陷使得系 ...

  2. [Abp vNext微服务实践] - 添加中文语言

    简介 abp vNext中提供了多语言功能,默认语言是英文,没有提供中文语言包.在业务开发中,定义权限后需要用中文的备注提供角色选择,本篇将介绍如何在abp vNext中加入中文语言. step1:添 ...

  3. [Abp vNext微服务实践] - 文章目录

    简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...

  4. [Abp vNext微服务实践] - 服务通讯

    简介 服务通讯是微服务架构中必不可少的功能,服务通讯的效率决定了微服务架构的优略.常用的微服务通讯策略有两种,分别是rpc.http,其中rpc以gRpc框架为代表使用者最多.abp vNext微服务 ...

  5. [Abp vNext微服务实践] - 启动流程

    前几篇分别介绍了abp vNext微服务框架和微服务CI/CD环境搭建,本篇开始介绍vNext微服务框架的开发环境搭建. 环境准备 官方介绍的系统架构图如下: 上图中身份服务和网关服务已经集成在系统中 ...

  6. [Abp vNext微服务实践] - 业务开发

    前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...

  7. [Abp vNext微服务实践] - 前后端分类

    一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...

  8. abp vNext微服务框架分析

    本文转载自:https://www.cnblogs.com/william-xu/p/11245738.html abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了 ...

  9. [Abp vNext微服务实践] - 框架分析

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

  10. 基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录

    系列文章: <基于 abp vNext 微服务开发的敏捷应用构建平台 - 设计构想> [点击查看] <基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录> [ ...

随机推荐

  1. Vue 解决因网络延时 页面中的{{XXX}}模板直接展示在用户面前,配合v-cloak指令

    v-cloak指令: 1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉 v-cloak属性 2.使用 CSS配合v-cloak可以解决网速慢时,页面展示出{{XXX}}模板的问题 案例: ...

  2. Job for nfs-server.service failed because the control process exited with error code. See "systemctl status nfs-server.service" and "journalctl -xe" for details.

    问题: 解决:

  3. interpreting non ascii codepoint

    ProtoBuf 在Windows VS2019 C++平台上的使用 这两天想着了解一下protobuf,搜索了一篇博客照着弄了一下 https://blog.csdn.net/weixin_4478 ...

  4. Python切换中英文输入法

    要实现中英文切换,首先Windows系统必须要有中文语言和英文语言,才能实现输入法(语言)切换. import win32api import win32gui from win32con impor ...

  5. vue项目的两种构建工具Vue CLI和Vite

    Vue CLI官方项目搭建工具,使用的打包器是webpack,webpack使用的模块化规范是commonjs模块: Vite主要特点是开发环境启动迅速,因为是使用的ES模块,这是在现代浏览器开始原生 ...

  6. 第四章:基本Git概念(重点)

    本章通过讨论Git的基本架构组成和一些重要概念,来探讨Git的不同之处和原因. 一: 基本概念 1.版本库. 1]Git版本库只是一个简单的数据库,包含所有用来维护与管理项目的修订版本和历史记录. 2 ...

  7. Unity Random

    Random 不仅可以随机值,还可以随机其它属性,用了这么久,刚知道... 譬如: rotation  随机Rotation onUnitSphere  球体表面随机点 insideUnitCircl ...

  8. idea引入ojdbc包报错

    网上下载或者让同事传两个jar过来,ojdbc6-11.2.0.7.0.jar 以及jconn3.0.jar 放入同一个文件夹中: 在此文件夹中cmd如下:回车,进入cmd控制台. 输入如下两个命令: ...

  9. vue 和react 不同之我见

    1数据是不是可变的 2通过js操作一切还是各自的处理方式 react的思路是all in js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-componen ...

  10. Linux系统安装&VMware安装三

    第十四步: 开始安装