如何用CDH+Apache DolphinScheduler开启Kerberos

原创
02/28 15:40
阅读数 29

搭建环境

多台linux主机搭建集群+CDH 6.3.2 (Parcel)版本+Apache DolphinScheduler1.3.2版本,本流程在CDH已搭建完成并可正常使用后,开启kerberos功能,Apache DolphinScheduler用于大数据任务管理与执行,是很不错的任务调度平台,是否提前部署均可!

**开启kerberos目的:**用于用户权限管理与安全认证,在开启kerberos之前的安全防护主要采取开启防火墙的方式,现在进行替换!

本流程开启kerberos后可正常运行的服务包括:

  • CDH集群正常启用

  • linux用户创建kerberos权限

  • hive、hbase、hdfs等服务在主机可正常执行

  • DolphinScheduler安装正常,任务正常执行,定时任务正常执行

  • dolphinscheduler的租户权限正常,可进行大数据服务运行和使用

部署kerberos

选择一台主机安装Kerberos服务,执行用户为root

#server端lz1.cmp14722.app
sudo yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation -y

同步执行集群主机安装client

#client lz1.cmp14722.app02 - lz5.cmp14722.app02
for item in cat /etc/hosts | grep lz |awk '{print2}'; do sshitem "hostname; yum install krb5-devel krb5-workstation -y" ; done

如果没有设置ssh免密登录其他主机,需要手动输入每个主机登录密码,建议设置,后面也会用到,设置方法网上很多,暂略。(与一台台主机自己安装一样)

插播一句,如果ssh免密登录设置后还是不能登录,可检查所有登录主机用户目录下的.ssh文件夹权限(700)以及文件夹内authorized_keys(600)文件权限

file

file

配置文件

配置文件修改2个

  • /etc/krb5.conf文件中default_realm对应的值随便起一个即可,realms部分选择服务主机,这里我选择安装主机对应hostname

sudo vi /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm =BIGDATA.COM
dns_lookup_kdc = false
#default_ccache_name = KEYRING:persistent:%{uid}
[realms]
BIGDATA.COM
= {

kdc = lz1.cmp14722.app
admin_server = lz1.cmp14722.app
}
[domain_realm]
_.cmp14722.app =_BIGDATA.COM
_cmp14722.app =_BIGDATA.COM

  • /var/kerberos/krb5kdc/kdc.conf文件我这里保持不变

sudo vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM_= {_
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}

  • 将krb5.conf分发到其他主机客户端

 for item in cat /etc/hosts | grep lz | grep -v 1 |awk '{print2}'; do scp /etc/krb5.confitem:/etc/ ; done

启动kerberos

  • 创建kerberos数据库

sudo kdb5_util create -rBIGDATA.COM-s
#输入密码
#完成

  • 启动kerberos

service krb5kdc start
service kadmin start
#查看服务状态
service krb5kdc status
service kadmin status

用户认证流程

  • 创建kerberos认证用户

#进入kerberos服务
kadmin.local
#查看已有认证用户
listprincs
#新增root用户认证
addprinc root/admin@BIGDATA.COM
#输入密码
#确认密码
#完成
#创建root用户的keytab文件认证
ktadd -k /opt/keytab/root.keytab -norandkey root/admin@BIGDATA.COM
#创建集群认证用户cloudera-scm,用于后面cdh开启kerberos使用
addprinc cloudera-scm/admin@BIGDATA.COM
#查看认证用户
listprincs
#退出
quit

  • root用户认证

#keytab认证
kinit -kt /opt/keytab/root.keytab root/admin@BIGDATA.COM
#查看当前生效token
klist
Ticket cache: FILE:/tmp/krb5cc_0
_Default principal: root/_admin@BIGDATA.COM
Valid starting Expires Service principal
_01/30/2023 11:13:08 01/31/2023 11:13:08_krbtgt/BIGDATA.COM@BIGDATA.COM

分发root的keytab到其他主机,实现root用户主机间的网络认证

 for item in cat /etc/hosts | grep lz | grep -v 1 |awk '{print2}'; do sshitem "mkdir /opt/keytab"; scp /opt/keytab/root.keytab $item:/opt/keytab/ ; done

CDH启用kerberos 

进入CM界面,打开管理-》安全

file

点击启用kerberos

file

全部勾选是

file

填写配置信息,server与上面krb5.conf中配置内容一致

file

下一步,这里可以不勾选

file

填写上面创建的账号与密码 cloudera-scm/admin@BIGDATA.COM

file

后面直接点继续,完成后,进行初始化,直至最终完成开启

file

重启集群,查看集群服务状态

file

主机上验证集群服务

通过root用户执行hive、hbase、hdfs命令

#hive命令
hive

show databases;
create database bigdata;
#hbase命令
hbase shell
list
#hdfs命令
hdfs dfs -ls /

如遇到某些命令没有权限或者无法通过TOKEN认证等问题,可以在kerberos服务主机上,创建对应的服务用户,进行keytab认证(参见上面用户认证流程),通过对应的服务认证,完成操作命令。认证不需要切换用户,如在root用户下可执行命令kinit -kt /opt/keytab/hbase.keytab hbase/admin@BIGDATA.COM,进行hbase的用户认证。

hbase服务也可进行用户权限授权,需要通过hbase用户的kerberos认证,作为管理员进行操作

#进入hbase
hbase shell
#查看现有用户权限

user_permission
#对root用户赋权,R写、W读、X执行、C创建、A管理员
grant 'root', 'RWXCA'

禁用kerberos:如何禁用CDH集群Kerberos-腾讯云开发者社区-腾讯云

 DolphinScheduler启用kerberos 

配置文件

在进行Apache DolphinScheduler安装时,主要在install_config.conf的配置,参见官网的配置流程即可,如果已经安装完成,可以修改common.properties的配置文件,这里主要说kerberos的配置部分,其他部分这里不赘述

在Apache DolphinScheduler所在Master主机上进行配置文件修改即可

 vi /opt/dolphinscheduler/conf/common.properties
# resource.storage.type=HDFS
resource.storage.type=HDFS
# whether kerberos starts
hadoop.security.authentication.startup.state=true
# java.security.krb5.conf.path=/opt/dolphinscheduler/conf/krb5.conf
java.security.krb5.conf.path=/etc/krb5.conf
# login user from keytab username
_login.user.keytab.username=hdfs/admin@BIGDATA.COM
# loginUserFromKeytab path
_login.user.keytab.path=
/opt/keytab/hdfs.keytab

这里主要涉及keytab认证选择的用户,用户需要对集群有操作权限,这里选择hdfs用户,确保已创建kdfs用户对应keytab;资源存储选择的HDFS方式(这里其他配置参考官网)

重启DolphinScheduler系统

 sh stop-all.sh
sh start-all.sh

admin登录DolphinScheduler验证

可正常创建租户等其他操作

file

用租户bidata执行大数据任务

由于需要用linux的bidata用户执行任务,因此需要创建bidata用户的kerberos认证,方法同上,因为kerberos认证有有效期,保证任务和定时任务不失败,需要通过crontab创建定时认证

 #创建定时任务
crontab -e
58 23 * * * kinit -kt /opt/keytab/bidata.keytab bidata/admin@BIGDATA.COM

定时任务在所有worker主机上均需要设置,因为dolphinscheduler的任务执行默认是随机分配的

 遇到的问题 

集群重启后hbase服务异常

hbase服务无法完成init过程,我通过删除zk中的hbase,完成了启动。

 #进入zk,/bin/zookeeper-client或zk目录下执行sh zkCli.sh
zookeeper-client
[zk: localhost:2181(CONNECTED) 3] ls /
[dolphinscheduler, hive_zookeeper_namespace_hive, zookeeper, hbase]
[zk: localhost:2181(CONNECTED) 3] deleteall /hbase
#或逐个删除/hbase下的内容

重启后成功

用户无法访问集群服务

Caused by: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]

上面的错误是kerberos认证问题,当前用户没有进行kerberos认证或者本身对服务没有权限,需要具体服务具体授权,针对具体服务切换kerberos认证用户

用户实践案例

奇富科技  蜀海供应链 联通数科拈花云科

蔚来汽车 长城汽车集度长安汽车

思科网讯生鲜电商联通医疗联想

新网银行消费金融 腾讯音乐自如

有赞伊利当贝大数据

联想传智教育Bigo

通信行业  作业帮


迁移实践

Azkaban   Ooize   

Airflow (有赞案例) Air2phin(迁移工具)

Airflow迁移实践

Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程


新手入门

选择Apache DolphinScheduler的10个理由

Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻松拿捏!

Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?

Apache DolphinScheduler-3.1.3 版本安装部署详细教程

Apache DolphinScheduler 在大数据环境中的应用与调优

参与Apache DolphinScheduler 社区有非常多的参与贡献的方式,包括:

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表https://github.com/apache/dolphinscheduler/issues?

q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何参与贡献链接https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。

本文由 白鲸开源科技 提供发布支持!

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部