作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ
Hadoop HDFS(本章节)
前面我们介绍了HDFS的用户概念,很多的时候就是为了权限控制,但是HDFS超级管理员的本质由配置决定,而非用户本身。手动创建 hdfs 用户不会自动获得超管权限,需同时满足以下条件:
进程启动身份:NameNode 必须由 hdfs 用户启动(关键!)
超级组声明:在 hdfs-site.xml 声明超级组
用户组归属:hdfs用户需在 supergroup 组中
上面的虽然有涉及到多个用户,但是这里的用户简单理解都是匿名的,也就是我可以很容易实现权限替换,在实际比较注重安全的环境中必然是不行的,所以我们今天就来介绍这个更安全的认证方式:Kerberos。
Kerberos 是一种网络认证协议,用于在非安全网络中安全地验证用户和服务身份。Hadoop 集群使用 Kerberos 提供强身份认证,防止未授权访问。
primary/instance@REALM
)hdfs/node1
)。3.Hadoop 集成 Kerberos
3.1 服务 Principal 注册
#当然这里仅作演示
kadmin -q "addprinc -randkey nn/node1.example.com@HADOOP.COM"
kadmin -q "addprinc -randkey yarn/node2.example.com@HADOOP.COM"
3.2 Keytab 分发
为每个服务生成 Keytab 并安全分发到对应主机:
kadmin -q "ktadd -k /etc/security/keytabs/nn.service.keytab nn/node1.example.com@HADOOP.COM"
3.3 配置文件启用 Kerberos
core-site.xml
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value> <!-- 开启Kerberos -->
</property>
hdfs-site.xml
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>nn/_HOST@HADOOP.COM</value> <!-- 使用_HOST自动匹配主机名 -->
</property>
4.用户认证
用户需先通过 kinit
获取 TG
kinit alice@HADOOP.COM # 交互式输入密码
kinit -kt alice.keytab alice@HADOOP.COM # 非交互式
hdfs dfs -ls /
)时自动使用票据。