ABP vNext微服务架构详细教程——项目部署
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微服务架构详细教程——项目部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET6之MiniAPI(十七):缓存
- 下一篇: C# 11 中的参数 null 检查