[Kerberos] Java client访问kerberos-secured cluster
使用java client访问kerberos-secured cluster,最重要的是先从admin那里拿到可用的keytab文件,用来作认证。接下来就是调整连接的配置。以下先用连接hdfs为例进行说明。
申请可用的keytab文件
1. 申请可认证的keytab文件,keytab文件用来存储principal的key。由KDC那边生成的principal,最终可以存储在keytab文件中。
2. 安装Kerberos client常用命令,并熟悉kerberos认证原理。
3. 配置/etc/krc5.conf,作为kerberos client端需要指明KDC的位置。
配置连接参数
由于直接用java应用程序去测试链接不太方便,这里推荐通过执行Hadoop command来测试是否能连接成功。
1. kinit 认证
kinit -kt path-to-keytab principalName
先认证principalName是否合法。如果合法,KDC会返回initial TGT。该TGT有效期通常是几个小时。
2. 执行Hadoop命令
hadoop fs -ls hdfs://namenode1:8020
执行这个命令之后,会返回儿各种exception,按照exception的提示,逐步添加配置,如下:
1) 配置使用kerberos认证
hadoop.security.authentication: kerberos
2)Failed to specify server's Kerberos principal name
dfs.namenode.kerberos.principal
3)Server has invalid Kerberos principal
配置完2)后,如果返回 Server has invalid Kerberos principal,这个时候可以从以下三个方面考虑:
- Server principal是否合法或者配置正确,正常情况下将dfs.namenode.kerberos.principal设置成namenode configuration一致就可以了。
- DSN resolver是否一致。The HDFS client will initiate an RPC call to the namenode to get the hdfs service principal. Then the client with compare the hostname from the service princpal to the canonical name of the namenode hostname. In this case the namenode canonical name on the client machine resolved to a different hostname then what was in DNS.
- 如果以上两种情况都正常,exception无法帮助我们锁定问题,可用尝试排除最大限度排除不定因素,缩小问题搜索范围。比如安装和server一样的Hadoop版本,并且保持配置一致。如果command能执行成功,那么可用逐步减去lib, conf属性,从而锁定exception的本质原因。
Java Kerberos认证代码
public class HadoopSecurityUtil {
public static final String EAGLE_KEYTAB_FILE_KEY = "eagle.keytab.file";
public static final String EAGLE_USER_NAME_KEY = "eagle.kerberos.principal";
public static void login(Configuration kConfig) throws IOException {
if (kConfig.get(EAGLE_KEYTAB_FILE_KEY) == null || kConfig.get(EAGLE_USER_NAME_KEY) == null) return;
kConfig.setBoolean("hadoop.security.authorization", true);
kConfig.set("hadoop.security.authentication", "kerberos");
UserGroupInformation.setConfiguration(kConfig);
UserGroupInformation.loginUserFromKeytab(kConfig.get(EAGLE_USER_NAME_KEY), kConfig.get(EAGLE_KEYTAB_FILE_KEY));
}
}
配置示例
- HDFS
{
"fs.defaultFS":"hdfs://nameservice1",
"dfs.nameservices": "nameservice1",
"dfs.ha.namenodes.nameservice1":"namenode1,namenode2",
"dfs.namenode.rpc-address.nameservice1.namenode1": "hadoopnamenode01:8020",
"dfs.namenode.rpc-address.nameservice1.namenode2": "hadoopnamenode02:8020",
"dfs.client.failover.proxy.provider.apollo-phx-nn-ha": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"eagle.keytab.file":"/EAGLE-HOME/.keytab/b_eagle.keytab_apd",
"eagle.kerberos.principal":"eagle@EXAMPLE.COM"
}
- HBase
{
"hbase.zookeeper.property.clientPort":"",
"hbase.zookeeper.quorum":"localhost",
"hbase.security.authentication":"kerberos",
"hbase.master.kerberos.principal":"hadoop/_HOST@EXAMPLE.COM",
"zookeeper.znode.parent":"/hbase",
"eagle.keytab.file":"/EAGLE-HOME/.keytab/eagle.keytab",
"eagle.kerberos.principal":"eagle@EXAMPLE.COM"
}
References
- https://github.com/randomtask1155/HadoopDNSVerifier
- https://support.pivotal.io/hc/en-us/articles/204391288-hdfs-ls-command-fails-with-Server-has-invalid-Kerberos-principal
[Kerberos] Java client访问kerberos-secured cluster的更多相关文章
- Java client 访问 memcached
在测试项目中引入了memcached作为缓存层,以下是memcached的缓存配置和调用过程. linux下memcached安装过程 直接参考以前的博文linux下安装memcached过程 不再 ...
- Hbase之Java API远程访问Kerberos认证
HbaseConnKer.java package BigData.conn; import BigData.utils.resource.ResourcesUtils; import org.apa ...
- JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32
Java使用API访问Hbase报错: 我的hbase主节点是spark1 java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名 修改主机hosts文 ...
- 【Tech】CAS多机部署Server和Java Client端
昨天尝试把cas的java client端部署到另外一台机器,结果就有问题了.(localhost部署cas server和java client端参见:http://www.cnblogs.com/ ...
- elasticsearch Java Client用户指南
这里使用的Java客户端版本是5.1.2,Elasticsearch的版本号也要是5.1.2,否则一些功能可能不支持. 之前介绍过Spring Data Elasticsearch,那里也是使用了本文 ...
- 使用poco 的NetSSL_OpenSSL 搭建https 服务端,使用C++客户端,java 客户端访问,python访问(python还没找到带证书访问的代码.)
V20161028 由于项目原因,需要用到https去做一些事情. 这儿做了一些相应的研究. 这个https 用起来也是折腾人,还是研究了一周多+之前的一些积累. 目录 1,java client 通 ...
- Java ssh 访问windows/Linux
Java ssh 访问windows/Linux 工作中遇到的问题: Java code运行在一台机器上,需要远程到linux的机器同时执行多种命令.原来采用的方法是直接调用ssh命令或者调用pli ...
- 5 weekend01、02、03、04、05、06、07的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点
weekend01.02.03.04.05.06.07的分布式集群的HA测试 1) weekend01.02的hdfs的HA测试 2) weekend03.04的yarn的HA测试 1) wee ...
- elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...
随机推荐
- postman使用之五:Runner的使用
1.首先在postman新建要批量运行的接口文件夹,新建一个接口,并设置好全局变量. 2.然后在Test里面设置好要断言的方法 如: tests["Status code is 200&qu ...
- ArrayList 保证多线程安全
一:使用synchronized关键字 二:使用Collections.synchronizedList();使用方法如下: 假如你创建的代码如下:List<Map<String,Obje ...
- 简易的轮廓边生成(N和V dot点乘方式)(surface方式和vs ps 方式的分别实现)
一.前面心情 1.公司我的架构发生变动,从技术中心到项目组了,但不管怎么样,该看的还要看,总会用到 二.实现 三.参考: http://blog.csdn.net/cubesky/article/de ...
- [bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- BZOJ 4423 【AMPPZ2013】 Bytehattan
Description 比特哈顿镇有n*n个格点,形成了一个网格图.一开始整张图是完整的. 有k次操作,每次会删掉图中的一条边(u,v),你需要回答在删除这条边之后u和v是否仍然连通. Input 第 ...
- 发布一个免费开源软件-- PAD流程图绘制软件PADFlowChart
软件的可执行文件下载:PADFlowChart-exe.zip MD5校验码:91FCA9FEC9665FD09BEB3DA94ADC1CE6 SHA1校验码:ECD742AA3092A085AB07 ...
- asp.net core 部署 提示DataProtectionServices 错误
今天在部署asp.net core网站时,因为调用到阿里云的api,api的参数需要加密签名,系统报出了如下错误: warn: Microsoft.Extensions.DependencyInjec ...
- 如何动态在文档中加入<script></script>写入大段js?
<script language="javascript">var script = document.createElement("script" ...
- Freemarker常用技巧
1,截取字符串 有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度 < lt. <= lte. > gt. >= gte < ...
- jQuery+css3 弹幕
写了个基于jQuery+css3的弹幕功能,此功能面向手机wap,利用改变位移做弹幕功能会使一些性能低的手机浏览器卡,所以用了css3,此功能不支持非webkit内核浏览器 html部分 自己设置样式 ...