1 Nacos配置管理模型
對於Nacos配置管理,通過Namespace、group、Data ID能夠定位到一個配置集。
配置集(Data ID)
在系統中,一個配置文件通常就是一個配置集,一個配置集可以包含了系統的各種配置信息,例如,一個配置集可
能包含了數據源、線程池、日志級別等配置項。每個配置集都可以定義一個有意義的名稱,就是配置集的ID即DataID。
配置項
配置集中包含的一個個配置內容就是配置項。它代表一個具體的可配置的參數與其值域,通常以 key=value 的形
式存在。例如我們常配置系統的日志輸出級別(logLevel=INFO|WARN|ERROR) 就是一個配置項。
配置分組(Group)
配置分組是對配置集進行分組,通過一個有意義的字符串(如 Buy 或 Trade )來表示,不同的配置分組下可以有
相同的配置集(Data ID)。當您在 Nacos 上創建一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱默
認采用 DEFAULT_GROUP 。配置分組的常見場景:可用於區分不同的項目或應用,例如:學生管理系統的配置集
可以定義一個group為:STUDENT_GROUP。
命名空間(Namespace)
命名空間(namespace)可用於進行不同環境的配置隔離。例如可以隔離開發環境、測試環境和生產環境,因為
它們的配置可能各不相同,或者是隔離不同的用戶,不同的開發人員使用同一個nacos管理各自的配置,可通過
namespace隔離。不同的命名空間下,可以存在相同名稱的配置分組(Group) 或 配置集。
最佳實踐
Nacos抽象定義了Namespace、Group、Data ID的概念,具體這幾個概念代表什么,取決於我們把它們看成什
么,這里推薦給大家一種用法,如下圖:
Namespace :代表不同環境,如開發、測試、生產環境。
Group:代表某項目,如XX醫療項目、XX電商項目
DataId:每個項目下往往有若干個工程,每個配置集(DataId)是一個工程的主配置文件
獲取配置集需要指定:
1、nacos服務地址,必須指定
2、namespace,如不指定默認public
3、group,如不指定默認 DEFAULT_GROUP
4、dataId,必須指定
代碼如下:
看懂即可不用運行。
// 初始化配置服務, String serverAddr = "127.0.0.1:8848"; String namespace = "ee247dde‐d838‐425c‐b371‐029dab26232f"; //開發環境 String group = "DEFAULT_GROUP"; //默認組 String dataId = "nacos‐simple‐demo.yaml"; Properties properties = new Properties(); properties.put("serverAddr", serverAddr); properties.put("namespace", namespace); ConfigService configService = NacosFactory.createConfigService(properties); //獲取配置,並輸出控制台 String content = configService.getConfig(dataId, group, 5000); System.out.println(content);
以上代碼說明將從地址為127.0.0.1:8848的nacos配置中心獲取配置,通過以下信息定位配置集:
namespace:ee247dde-d838-425c-b371-029dab26232f
注意:namespace需要指定id。
group:DEFAULT_GROUP
Data Id:nacos-simple-demo.yaml
2 命名空間管理
2.1namespace 隔離設計
namespace 的設計是 nacos 基於此做多環境以及多租戶(多個用戶共同使用nacos)數據(配置和服務)隔離的。
從一個租戶 (用戶)的角度來看,如果有多套不同的環境,那么這個時候可以根據指定的環境來創建不同的
namespce,以此來實現多環境的隔離。例如,你可能有開發,測試和生產三個不同的環境,那么使用一套
nacos 集群可以分別建以下三個不同的 namespace。如下圖所示:
從多個租戶 (用戶)的角度來看,每個租戶(用戶)可能會有自己的 namespace,每個租戶(用戶)的配置數據以及注冊的服務數據都會歸屬到自己的 namespace 下,以此來實現多租戶間的數據隔離。例如超級管理員分配了三
個租戶,分別為張三、李四和王五。分配好了之后,各租戶用自己的賬戶名和密碼登錄后,創建自己的命名空間。如下圖所示:
2.2 命名空間管理
前面已經介紹過,命名空間(Namespace)是用於隔離多個環境的(如開發、測試、生產),而每個應用在不同環
境的同一個配置(如數據庫數據源)的值是不一樣的。因此,我們應針對企業項目實際研發流程、環境進行規划。
如某軟件公司擁有開發、測試、生產三套環境,那么我們應該針對這三個環境分別建立三個namespace。
建立好所有namespace后,在配置管理與服務管理模塊下所有頁面,都會包含用於切換namespace(環境)的tab按鈕,如下圖:
如果您在編寫程序獲取配置集過程中沒有感知到這個參數的輸入,那么 nacos 統一會使用一個默認的 namespace
作為輸入,nacos config 會使用一個空字符串作為默認的參數來初始化,對應界面上就是public命名空間。
// 初始化配置服務, String serverAddr = "127.0.0.1:8848"; String namespace = "ee247dde‐d838‐425c‐b371‐029dab26232f"; //開發環境 String group = "DEFAULT_GROUP"; //默認組 String dataId = "nacos‐simple‐demo.yaml"; Properties properties = new Properties(); properties.put("serverAddr", serverAddr); properties.put("namespace", namespace); ConfigService configService = NacosFactory.createConfigService(properties); //獲取配置,並輸出控制台 String content = configService.getConfig(dataId, group, 5000); System.out.println(content);
配置管理
Nacos支持基於Namespace和Group的配置分組管理,以便用戶更靈活的根據自己的需要按照環境或者應用、模
塊等分組管理微服務的大量配置,在配置管理中主要提供了配置歷史版本、回滾、訂閱者查詢等核心管理能力。
配置列表
點擊Nacos控制台的 配置管理 ->配置列表 菜單,即可看到以下界面展示:
界面中展示了不同namespace下的配置集列表,可點擊左上角的不同namespace進行切換。右上角“+"號或點擊某配置集后的 編輯 按鈕可進入配置集編輯器。
多配置格式編輯器
Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常見配置格式在線編輯、語法高亮、格式校驗,幫
助用戶高效編輯的同時大幅降低格式錯誤帶來的風險。
Nacos支持配置標簽的能力,幫助用戶更好、更靈活的做到基於標簽的配置分類及管理。同時支持用戶對配置及其
變更進行描述,方面多人或者跨團隊協作管理配置。
編輯DIFF
Nacos支持編輯DIFF能力,幫助用戶校驗修改內容,降低改錯帶來的風險。
配置集導出
勾選若干配置集,點擊 導出選中的配置 ,可獲得一個壓縮包:
壓縮包內,包含了選中配置集所轉換的配置文件:
配置集導入
點擊右上角的 導入配置 ,可選擇導出的壓縮包文件,將壓縮包內的文件恢復為nacos配置集。
歷史版本
Nacos通過提供配置版本管理及其一鍵回滾能力,幫助用戶改錯配置的時候能夠快速恢復,降低微服務系統在配置管理上的可用性風險
點擊回滾:
監聽查詢
Nacos提供配置訂閱者即監聽者查詢能力,同時提供客戶端當前配置的MD5校驗值,以便幫助用戶更好的檢查配置變更是否推送到 Client 端。
3 登錄管理
Nacos當前版本支持簡單的登錄功能,默認用戶名/密碼為: nacos/nacos 。
修改默認用戶名/密碼方法
1. 生成加密密碼
在入門程序中加入如下以來:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring‐security‐core</artifactId> <version>5.1.4.RELEASE</version> </dependency>
編寫PasswordEncoderUtil類,生成加密后的密碼,采用BCrypt加密方法在每次生成密碼時會加隨機鹽,所以生成密碼每次可能不一樣。
public class PasswordEncoderUtil { public static void main(String[] args) { System.out.println(new BCryptPasswordEncoder().encode("123")); } }
1. 創建用戶名或者密碼的時候,用指定用戶名密碼即可。
將上邊程序輸出的密碼更新到數據庫。
INSERT INTO users (username, password, enabled) VALUES ('nacos1','$2a$10$SmtL5C6Gp2sLjBrhrx1vj.dJAbJLa4FiJYZsBb921/wfvKAmxKWyu', TRUE); INSERT INTO roles (username, role) VALUES ('nacos1', 'ROLE_ADMIN');
關閉登錄功能
由於部分公司自己開發控制台,不希望被nacos的安全filter攔截。因此nacos支持定制關閉登錄功能找到配置文件${nacoshome}/conf/application.properties , 替換以下內容即可。