一、Kerberos认证是什么?

Kerberos是一种网络认证协议,它通过密钥加密技术为客户端和服务端提供双向认证。简单来说,它就像是一个严格的“门禁系统”,确保只有合法用户才能访问Hadoop集群的资源。

在Hadoop生态中,Kerberos是安全机制的核心。如果没有它,任何知道集群IP的人都可以伪装成合法用户,随意读写数据——这显然是个灾难!Kerberos通过票据(Ticket)机制解决这个问题:用户先向认证服务器(KDC)证明身份,拿到短期有效的票据后才能访问服务。

二、Kerberos配置前置条件

在动手配置之前,你需要准备好以下环境:

  1. KDC服务器:可以是独立的Linux机器,或直接部署在Hadoop主节点上。
  2. Hadoop集群:至少包含NameNode和ResourceManager。
  3. 域名解析:所有节点必须能通过主机名互相访问,且主机名需配置在/etc/hosts中。

举个实际例子:假设你的KDC服务器主机名为kdc.example.com,Hadoop主节点为nn1.example.com,那么需要在所有节点的/etc/hosts中添加:

192.168.1.100 kdc.example.com
192.168.1.101 nn1.example.com

三、KDC服务安装与配置

这里以CentOS 7为例,使用krb5-serverkrb5-workstation包:

# 安装Kerberos相关软件
yum install -y krb5-server krb5-workstation

# 编辑KDC配置文件(/var/kerberos/krb5kdc/kdc.conf)
default_realm = EXAMPLE.COM
[realms]
    EXAMPLE.COM = {
        kdc_ports = 88
        admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
    }

关键参数说明:

  • default_realm:你的Kerberos域名,通常是大写的网络域名。
  • admin_keytab:管理员密钥文件路径,用于管理Principal(用户/服务账号)。

接下来创建Kerberos数据库并启动服务:

kdb5_util create -s  # 初始化数据库,会提示输入密码
systemctl start krb5kdc kadmin

四、Hadoop集成Kerberos认证

现在进入重头戏——让Hadoop支持Kerberos。以下是关键步骤:

1. 配置core-site.xml

<property>
    <name>hadoop.security.authentication</name>
    <value>kerberos</value>
</property>
<property>
    <name>hadoop.security.authorization</name>
    <value>true</value>
</property>

2. 为Hadoop服务创建Principal

每个Hadoop服务(如NameNode、DataNode)都需要独立的Principal:

kadmin.local -q "addprinc -randkey nn/nn1.example.com@EXAMPLE.COM"
kadmin.local -q "xst -k /etc/security/keytabs/nn.service.keytab nn/nn1.example.com@EXAMPLE.COM"

注释:

  • -randkey:随机生成密钥,避免手动输入密码。
  • xst:导出密钥到keytab文件,供服务启动时使用。

3. 修改hdfs-site.xml

<property>
    <name>dfs.namenode.kerberos.principal</name>
    <value>nn/nn1.example.com@EXAMPLE.COM</value>
</property>
<property>
    <name>dfs.namenode.keytab.file</name>
    <value>/etc/security/keytabs/nn.service.keytab</value>
</property>

五、客户端认证实战

配置完成后,用户需要通过kinit获取票据才能访问集群:

# 用户登录
kinit user1@EXAMPLE.COM
Password for user1@EXAMPLE.COM:  # 输入密码

# 查看当前票据
klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: user1@EXAMPLE.COM

# 执行HDFS命令
hadoop fs -ls /

如果看到No valid credentials provided错误,说明Kerberos认证未生效,需要检查服务端配置。

六、Kerberos的优缺点分析

优点:

  • 强安全性:双向认证+票据加密,防伪装、防重放攻击。
  • 透明性:用户无需每次操作都输入密码。

缺点:

  • 配置复杂:涉及多组件协调,容易出错。
  • 单点风险:KDC宕机会导致整个集群不可用(可通过多KDC部署缓解)。

七、常见问题与解决方案

  1. 票据过期:默认有效期10小时,可通过kinit -r 7d申请更长时间。
  2. 时钟不同步:Kerberos要求所有节点时间偏差不超过5分钟,建议部署NTP服务。
  3. Keytab文件权限:必须严格限制为服务用户可读(如chmod 400 nn.service.keytab)。

八、总结

Kerberos为Hadoop提供了企业级的安全保障,但它的复杂性也让许多初学者望而却步。通过本文的逐步拆解,你应该能理解从KDC搭建到Hadoop集成的完整流程。记住,安全从来不是可选项——尤其在数据即黄金的时代,多花时间配置Kerberos,远胜于事后补救数据泄露的损失。