2024-11 月 测试环境 上 kerberos 认证
1.1 修改 拷贝机器的IP地址, 改成和测试环境 5台机器一样的 IP映射,vim /etc/hosts 改成如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.100.152.01 test-bigdata-hadoop-master-01
10.100.152.02 test-bigdata-hadoop-datanode-01
10.100.152.03 test-bigdata-hadoop-datanode-02
10.100.152.04 test-bigdata-clickhouse-01
10.100.152.05 test-bigdata-clickhouse-02
1.2: 检查 CDH 各台上的 systemctl start cloudera-scm-server 和 systemctl start cloudera-scm-agent 服务是否正常, 检查 mysql 服务是否正常 。
1.3: 访问CDH的web 登录界面 10.100.151.01:7180/cmf/login , 去验证 一下 CDH 服务是否 正常 可访问
如果能实现上述图片,说明克隆的5台测试环境集群没有问题。
1.4: 拷贝过来的集群发现 yarn resourcemanager 无法启动,需要删点 resourcemanager 节点,重新新加该节点。
1.5: namenode 其中一个namenode 节点启动不了,要删除 namenode journalnode Failovercontroler 这三个节点下掉,重新再加回去,依然启动不了该 namenode ,此时 需要去备份该节点的 namenode 数据目录,把另外一个 namenode 节点的数据目录,发送到该节点,同时注意一下数据目录的访问权限。
1.6 : 检查集群各组件运行情况:
安装 yarn mapreduce 包,
找到对应的目录,修改访问权限
1.7: 检查 集群 的 hdfs hive hue 访问是否正常 。并安装sentry组件。
出现上图,说明拷贝过来的测试环境已经恢复到了 测试环境 那 5台服务器的执行环境,接下来,我们就可以搞一下 sentry 安装。
1.8: 拷贝环境中 , 安装 sentry , 调整 hdfs \ hive \ hue 的 sentry 配置,重启之后,发现拷贝的测试环境上 , 新的 hue 上没有 security 选项,检查一下测试环境拷贝过来的用户是否都有
1.9: 安装flink , 建议将生产环境的flink 安装包直接拷贝到 这新的5台机器上,按照类似 CDH parcel方式, 安装 flink 程序。
2.0: 检查并启动大数据调度平台 dolphin scheduler 的各个服务。 clickhouse-01 hive 链接不通,需要拷贝 shiro 文件到 /opt/cloudera/parcels/CDH/lib/sentry/lib 下面,否则 拷贝不生效, dolphin scheduler 还是不生效。 需要修改 worker 分组管理的 worker地址 为 新地址。
以上环境基本上 恢复到了没有 kerberos 认证之前的状态 !!!
二: 正式开始 kerberos 认证 , 涉及到 CDH、 海豚调度 、BI(无法测试)
2.1 : Kerberos概述
Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。
2.2 : Kerberos概念
Kerberos中有以下一些概念需要了解:
1)KDC:密钥分发中心,负责管理发放票据,记录授权。
2)Realm:Kerberos管理领域的标识。
3)principal:当每添加一个用户或服务的时候都需要向kdc添加一条principal,principl的形式为:主名称/实例名@领域名。
4)主名称:主名称可以是用户名或服务名,表示是用于提供各种网络服务(如hdfs,yarn,hive)的主体。
5)实例名:实例名简单理解为主机名。
2.3: Kerberos认证原理
3: kerberos 正式安装开始了 !!!
3.1 server节点安装kerberos相关软件
server节点只需安装一个节点即可,这里安装在 test-bigdata-hadoop-master-01 节点上
yum install -y krb5-server krb5-workstation krb5-libs
查看安装结果
rpm -qa | grep krb5
3.2 client节点安装
client节点可以安装多个
yum install -y krb5-workstation krb5-libs
3.3 配置Kerberos
需要配置的文件有两个为kdc.conf和krb5.conf , kdc配置只是需要Server服务节点配置,即test-bigdata-hadoop-master-01 .
1) kdc配置
vim /var/kerberos/krb5kdc/kdc.conf
2) krb5文件配置
vim /etc/krb5.conf
3.4 生成Kerberos数据库
在server节点执行
kdb5_util create -s
- 1
创建完成后/var/kerberos/krb5kdc目录下会生成对应的文件
ls /var/kerberos/krb5kdc/
3.5 赋予Kerberos管理员所有权限
vim /var/kerberos/krb5kdc/kadm5.acl
3.6 启动Kerberos服务(server节点执行)
启动krb5kdc
systemctl start krb5kdc
- 1
启动kadmin
systemctl start kadmin
设置开机自启
systemctl enable krb5kdcsystemctl enable kadmin
- 1
- 2
- 3
- 4
- 5
查看是否设置为开机自启
systemctl is-enabled krb5kdcsystemctl is-enabled kadmin
3.7 创建管理员主体/实例
kadmin.local -q "addprinc admin/admin"
3.8 kinit管理员验证
kinit admin/admin
klist
其他节点尝试
3.9 Kerberos数据库操作
3.9.1 登录kerberos数据库
1)本地登录(无需认证)
kadmin.local
3.9.2 创建kerberos主体
kadmin.local -q "addprinc test/test-bigdata-hadoop-master-01"
- 1
3.9.3 修改主体密码
kadmin.local -q "cpw test/test-bigdata-hadoop-master-01"
3.9.4 查看所有主体
kadmin.local -q "list_principals"
3.10 Kerberos主体认证
Kerberos提供了两种认证方式,一种是通过输入密码认证,另一种是通过keytab密钥文件认证,但两种方式不可同时使用
3.10.1 密码认证
kinit test/test-bigdata-hadoop-master-01
klist
3.10.2 keytabl密钥文件认证
1)生成主体admin/admin的keytab文件到指定目录/root/admin.keytab
kadmin.local -q "xst -k /root/test.keytab test/test-bigdata-hadoop-master-01@CHEN.COM"
2)使用keytab进行认证
kinit -kt /root/test.keytab test/test-bigdata-hadoop-master-01
查看keytab包含的主体名称
klist -ekt /root/test.keytab
- 1
3)查看认证凭证
klist
3.11 销毁认证
kdestroy
klist
4 CDH安装Kerberos
4.1 CDH启用Kerberos安全认证
为CM创建管理员主体/实例
kadmin.local -q "addprinc cloudera-scm/admin"
4.2 CDH页面启动kerberos
4.3 环境确认
4.4 填写配置
Kerberos 加密类型:aes128-cts、des3-hmac-sha1、arcfour-hmac
4.5 等待导入kdc
4.6 等待重启集群
4.7 查看主体
kadmin.local -q "list_principals"
5 Kerberos安全环境实操
在启用Kerberos之后,系统与系统(flume-kafka)之间的通讯,以及用户与系统(user-hdfs)之间的通讯都需要先进行安全认证,认证通过之后方可进行通讯。故在启用Kerberos后,数仓中使用的脚本等,均需要加入一步安全认证的操作,才能正常工作。
5.1 用户访问服务认证
开启Kerberos安全认证之后,日常的访问服务(例如访问HDFS,消费Kafka topic等)都需要先进行安全认证
1)在Kerberos数据库中创建用户主体/实例
kadmin.local -q "addprinc hive/hive@GEELY.COM"
2)进行用户认证
kinit hive/hive@GEELY.COM
3)访问HDFS
hadoop fs -ls /
4)hive查询
5.2 windows webui浏览器认证
我们设置CDH支持kerberos后会出现下图所示的情况:
可以登录9870,但是不能查看目录及文件,这是由于我们本地环境没有通过认证。
接下来我们设置本地验证。
(1) 下载火狐
(2)设置浏览器
① 打开火狐浏览器,在地址栏输入:about:config,进入设置页面。
② 搜索“network.negotiate-auth.trusted-uris”,修改值为自己的服务器主机名
③ 搜索“network.auth.use-sspi”,双击将值变为false
3)安装kfw
① 安装提供的kfw-4.1-amd64.msi。
② 将集群的/etc/krb5.conf文件的内容复制到C:\ProgramData\MIT\Kerberos5\krb.ini中,删除和路径相关的配置。
krb5.ini 里面内容如下:
[libdefaults]
default_realm = GEELY.COM
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = aes128-cts des3-hmac-sha1 arcfour-hmac
default_tkt_enctypes = aes128-cts des3-hmac-sha1 arcfour-hmac
permitted_enctypes = aes128-cts des3-hmac-sha1 arcfour-hmac
udp_preference_limit = 1
kdc_timeout = 3000
[realms]
GEELY.COM = {
kdc = test-bigdata-hadoop-master-01
admin_server = test-bigdata-hadoop-master-01
}
[domain_realm]
火狐浏览器 可以正常访问 hdfs 了, 谷歌和微软浏览器都无法访问
三: kerberos 下 各功能 测试
3.1 : 本地 kerberos 测试 hive jdbc DataGrip 工具
为避免sentry 授权只针对个别的hive server2 jdbc生效,建议 把所有的 hive server2 节点 , 全部加到 hue里。
3.2: kerberos 和 dolphin scheduler 整合
dolphin scheduler 整合 kerberos 主要的操作, 在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-admin3@GEELY.COM
# loginUserFromKeytab path
login.user.keytab.path= /etc/security/keytabs/hdfs-admin3.keytab
由于需要用linux的root用户执行任务,因此需要创建root用户的kerberos认证,方法同上,因为kerberos认证有有效期,保证任务和定时任务不失败,需要通过crontab创建定时认证
#创建定时任务
crontab -e
58 23 * * * kinit -kt /etc/security/keytabs/root.keytab root@HADOOP.COM
定时任务在所有worker主机上均需要设置,因为dolphinscheduler的任务执行默认是随机分配的
3.3 : kerberos 和 dolphinscheduler 整合测试 dolphinscheduler 只修改
3.3.1 doris 测试 测试 成功
3.2 : ecvs 测试MYSQL-evcs库 测试成功
3.3.3: pg 测试 测试成功
3.3.4 : dolphinscheduler 测试 测试成功
3.3.5 : spark 和 hive 测试 测试成功
3.3.6:shell 脚本 , datax同步 mysql 到 hive ods 需要 新增 3个配置行, 测试成功 hive hive-ods hive-tes sparksql
"haveKerberos": "true",
"kerberosKeytabFilePath": "/etc/security/keytabs/root.keytab",
"kerberosPrincipal":"root/admin@HADOOP.COM",
3.3.7 : flink 测试
3.3.7.1 : 先在各个节点 生成 flink.keytab 文件
3.3.7.2: 修改 flink-yarm配置文件
security.kerberos.login.use-ticket-cache: false
security.kerberos.login.keytab: /etc/security/keytabs/hdfs.keytab
security.kerberos.login.principal: hdfs/admin@HADOOP.COM
3.3.7.3 : 修改一下 checkpoit 数据目录权限
hadoop dfs -chmod -R +777 /checkpoint
3.3.7.4: 开通 kerberos 认证的 flink 提交作业 命令:
### -yD 为 kerberos flink 认证
./flink run -m yarn-cluster -yd -yjm 1024m -ytm 2048m -ynm e51a_data -ys 2
-yD java.security.krb5.conf=/etc/krb5.conf -yD security.kerberos.login.keytab=/etc/security/keytabs/hdfs.keytab
-yD security.kerberos.login.principal=hdfs/admin@HADOOP.COM
-yD env.java.opts.jobmanager=-Djava.security.krb5.conf=/etc/krb5.conf
-yD env.java.opts.taskmanager=-Djava.security.krb5.conf=/etc/krb5.conf
-c org.huilian.sync.sync.AdasDataRealTimeSyncHdfsByOrc /opt/flinkjar/flink_kafka_sync_hdfs-1.0-SNAPSHOT-jar-with-dependencies.jar
3.3.8: BI 无测试环境,BI 的kerbero 配置 请参考 BI官网