可以通過華為官方提供的Elasticsearch Java客戶端(基于Elasticsearch官方版本改造),實現基于Kerberos認證訪問和操作華為云Elasticsearch;亦可以使用更加通用的開源Elasticsearch Java客戶端bboss,實現基于Kerberos認證訪問和操作華為云Elasticsearch。
本文介紹使用bboss實現基于Kerberos認證訪問和操作華為云Elasticsearch的方法。
1. bboss介紹
bboss是一個高性能高兼容性的Elasticsearch java客戶端框架:
更多bboss介紹,可以訪問文檔了解:https://esdoc.bbossgroups.com/#/README
2. 準備工作
2.1 準備Kerberos認證配置文件
獲取Kerberos配置文件 :從華為云獲取 krb5.conf 和 jaas.conf 文件,這些文件由華為云Elasticsearch提供。
獲取keytab文件 :從華為云獲取 keytab 文件,該文件包含了客戶端的憑據信息,文件由華為云Elasticsearch提供。
2.2 集成bboss
集成bboss非常簡單,只需在項目中導入bboss對應的maven坐標即可:
<dependency><groupId>com.bbossgroups.plugins</groupId><artifactId>bboss-datatran-jdbc</artifactId><version>7.3.5</version>
</dependency>
實際bboss版本號可以參考文檔獲取:
https://esdoc.bbossgroups.com/#/changelog
3. 配置和使用Elasticsearch數據源
在項目中導入bboss maven坐標,并準備好Kerberos認證相關的材料后,就可以實現基于Kerberos認證對接華為云Elasticsearch的功能,直接上代碼。
通過以下代碼定義和初始化Elasticsearch數據源,并通過ClientInterface接口操作和訪問華為云Elasticsearch,驗證集成是否成功:
Map properties = new HashMap();/*** 配置Elasticsearch數據源參數,這里只設置必須的配置項,更多配置參考文件:* https://gitee.com/bboss/elasticsearchdemo/blob/master/src/main/resources/application.properties*///定義Elasticsearch數據源名稱:esDS,后續通過esDS獲取對應數據源的客戶端API操作和訪問Elasticsearchproperties.put("elasticsearch.serverNames","esDS");//es服務器地址和端口,多個用逗號分隔//properties.put("esDS.elasticsearch.rest.hostNames","192.168.137.1:8200");//開啟https協議,華為云Elasticsearch一般會啟用https,在bboss中,配置開啟https協議的Elasticsearch節點地址時,需帶上https://協議頭;//更多https配置,可瀏覽后面參考資料中的【高性能elasticsearch ORM開發庫使用介紹】了解properties.put("esDS.elasticsearch.useHttps","true");properties.put("esDS.elasticsearch.rest.hostNames","https://202.280.211.227:9280,https://202.280.211.227:9281,https://202.280.211.227:9282");//是否在控制臺打印dsl語句,log4j組件日志級別為INFO或者DEBUGproperties.put("esDS.elasticsearch.showTemplate","true");//集群節點自動發現,關閉服務發現機制properties.put("esDS.elasticsearch.discoverHost","false");//Kerberos安全認證配置--開始properties.put("esDS.http.kerberos.serverRealmPath","/elasticsearch/serverrealm");//配置華為云Elasticsearch服務端Princpal查詢服務地址properties.put("esDS.http.kerberos.useSubjectCredsOnly","false");//華為云Elasticsearch krb5.conf文件,由華為提供properties.put("esDS.http.kerberos.krb5Location","C:/environment/es/8.13.2/elasticsearch-8.13.2/config/krb5.conf");//華為云Elasticsearch jaas.conf文件,由華為提供properties.put("esDS.http.kerberos.loginConfig","C:/environment/es/8.13.2/elasticsearch-8.13.2/config/jaas.conf");//配置登錄模塊名稱,與華為云Elasticsearch jaas.conf文件中的模塊名稱一致properties.put("esDS.http.kerberos.loginContextName","ESClient");//配置是否debug Kerberos認證詳細日志properties.put("esDS.http.kerberos.debug","true");//Kerberos安全認證配置--結束//啟動和初始化Elasticsearch數據源ElasticSearchBoot.boot(properties);//通過Elasticsearch數據源名稱esDS獲取對應數據源的客戶端API,操作和訪問Elasticsearch//可以反復根據數據源名稱esDS,調用下面的方法獲取ClientInterface接口實例,始終返回單實例多線程安全的ClientInterface對象ClientInterface clientInterface = ElasticSearchHelper.getRestClientUtil("esDS");//驗證客戶端:通過Elasticsearch rest服務獲取ES集群信息String result = clientInterface.executeHttp("/?pretty", ClientInterface.HTTP_GET);logger.info(result);//驗證客戶端:通過API獲取ES集群配置參數logger.info(clientInterface.getClusterSettings());//驗證客戶端:通過API判斷索引demo是否存在boolean exist = clientInterface.existIndice("demo");logger.info(exist+"");//驗證客戶端:通過API從索引demo獲取文檔id為1的文檔數據(String報文)String doc = clientInterface.getDocument("demo","1");logger.info(doc);//驗證客戶端:通過API從索引demo獲取文檔id為1的文檔數據(or mapping示例:返回Map結構的數據,亦可以轉換為PO對象)Map mapdoc = clientInterface.getDocument("demo","1",Map.class);
基于配置Kerberos認證實現代碼非常簡潔,只需在平常數據源參數配置的基礎上,增加Kerberos認證相關的參數配置。上述代碼中涉及的華為云Kerberos配置文件krb5.conf和jaas.conf,由華為云Elasticsearch提供,這里不單獨介紹,需要注意一下:http.kerberos.loginContextName參數對應的值需與jaas.conf配置文件中認證模塊名稱一致,這里是ESClient。
下面是一個jaas.conf配置內容樣例:
ESClient {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truekeyTab="C:/environment/es/8.13.2/elasticsearch-8.13.2/config/elastic.keytab"principal="elastic/admin@BBOSSGROUPS.COM"useTicketCache=falsestoreKey=truedebug=false;
};
其中的elastic.keytab文件由華為云Elasticsearch提供。更多ClientInterface api使用方法,可以訪問下面參考資料中提供的鏈接了解。
4. 運行案例
本文對應的代碼源碼工程下載地址:
碼云 https://gitee.com/bboss/eshelloword-booter
Github https://github.com/bbossgroups/eshelloword-booter
對應的Kerberos認證Java Demo CustormInitAndBootKerberosAuth.java
可以下載案例源碼工程,參考前面章節內容,將Elasticsearch地址和Kerberos相關配置修改為本地配置,然后執行案例代碼,如輸出如下信息,說明集成成功:
11:36:07.976 [main] INFO org.frameworkset.elasticsearch.client.ElasticSearchRestClient - Elasticsearch Server Info:
{"name" : "node@202.280.211.227","cluster_name" : "elasticsearch_cluster","cluster_uuid" : "3veeeeeeeeeeeeeeeee4Q","version" : {"number" : "7.10.2","build_flavor" : "oss","build_type" : "tar","build_hash" : "unknown","build_date" : "unknown","build_snapshot" : true,"lucene_version" : "8.7.0","minimum_wire_compatibility_version" : "6.7.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}
可以觀看bboss環境搭建視頻,搭建運行環境:
https://mp.weixin.qq.com/s/RoJdxiPw_mnuhQpkqzY9QQ
5. 參考資料
Elasticsearch文檔增刪改查操作介紹 https://esdoc.bbossgroups.com/#/document-crud
高性能elasticsearch ORM開發庫使用介紹 https://esdoc.bbossgroups.com/#/development
快速開始bboss https://esdoc.bbossgroups.com/#/quickstart
開發交流 https://esdoc.bbossgroups.com/#/supportus