ABPvNext微服务架构详细教程——项⽬部署
1. 基础配置
登录Kubesphere页⾯,打开⼯作台,在平台资源选项卡中点击“企业空间”,进⼊企业空间管理页⾯,点击“创建”按钮,创建我们⾃⼰的企业空间。
点击进⼊刚刚创建的企业空间,在左侧菜单点击“项⽬”,打开项⽬⾯板,并点击“创建”按钮,创建⼀个新的项⽬,这⾥我们名称
为“demoproject”。
点击进⼊该项⽬,在菜单中到应⽤负载→应⽤,选择⾃制应⽤,点击创建按钮,填⼊应⽤名称,暂时忽略其他步骤⼀直点击“下⼀步”到创建完成。
2. 部署服务
在应⽤负载→应⽤→⾃制应⽤中到第⼀章节中我们创建的应⽤并进⼊该应⽤管理页⾯,点击更多操作→添加服务,选择⽆状态服务。输⼊名称并点击“下⼀步”,在容器组设置中点击“添加容器”,在镜像⼀栏下拉选框选择刚才创建的阿⾥云镜像仓库地址,输⼊框中输⼊【镜像仓库命名空间】/【镜像仓库名称】,例如
zklight/productmanager ,点击回车,即可出现我们之前上传的镜像,在“端⼝设置”选项卡中的名称、容器端⼝、服务端⼝中分别填⼊该服务的端⼝号,例如产品管理服务的端⼝号为5010,则名称为“http-5010”,容器端⼝和服务端⼝均为5010。容器其他配置如果需要可依据实际情况进⾏配置,点击“√”并⼀直点击“下⼀步”完成服务创建。
创建完成后,在项⽬⾯板,应⽤负载→⼯作负载中可到⼯作负载“productmanager-v1”,在应⽤负载→服务中可到服
务“productmanager”。由于⽣产环境和开发环境配置⽂件内容应该不同,所以⼯作负载暂时⽆法运⾏。
在项⽬⾯板左侧菜单中到配置→配置字典,点击“创建”,输⼊名称“productmanagerconfig”,并点击下⼀步。在数据设置中点击添加数据,键我们输⼊ appsettings ,值我们将产品管理服务的配置⽂件appsettings.json的所有内容复制过来,并依据我们实际⽣产环境的配置修改各配置项,修改完成后点击“创建”完成配置项创建。
这⾥,如果我们出现服务间相互调⽤,则使⽤前⾯⾃制应⽤中添加服务后产⽣的服务名称,即应⽤负载→服务中的服务名称代替原IP地址或localhost,其他内容不变,Kubernetes会⾃动完成被调⽤服务的反向代理。
例如⾝份管理服务、订单服务、产品服务名称分别为identitymanager、ordermanager、productmanager,则在商城服务中RemoteServices 配置如下:
"RemoteServices": {
"Default": {
"BaseUrl": "identitymanager:5000/"
},
"ProductManager": {
"BaseUrl": "productmanager:5010/"
},
"OrderManager": {
"BaseUrl": "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": "localhost:4000"
}
}
3. 外部访问
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,都为我们提供了⾮常丰富的功能和扩展空间,可依据⾃⼰的项⽬需求进⾏选择。具体请参考它们各⾃官⽅⽂档。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。