CDH配置Kerberos

                           Cloudera Manager5.15.0 集成Kerberos

Cloudera提供了非常简便的Kerberos集成方式,基本做到了自动化部署。

系统:CentOS 7.2

操作用户:admin

Kerberos安装

以下是官网建议

Packages Required

  • openldap-clients on the Cloudera Manager Server host
  • krb5-workstation, krb5-libs on ALL hosts

在master 执行以下命令

yum install krb5-workstation -y
yum install krb5-server -y
yum install openldap-clients -y
yum install krb5-libs -y

在slave1和slave2上执行以下命令

yum install krb5-workstation

在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它们分别反映了realm name 以及 domain-to-realm mappings。

修改配置

配置krb5.conf

/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。

请替换DOMAIN.COM为自定义域名:


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]
default_realm = for_cdh
dns_lookup_realm = false
dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
[realms]
for_cdh = {
   kdc = master:88
   admin_server = master:749
}

[domain_realm]
master = for_cdh

说明:

  • [logging]:表示server端的日志的打印位置
  • [libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置 
    • default_realm = EXAMPLE.COM 默认的realm,必须跟要配置的realm的名称一致。
    • udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
    • ticket_lifetime表明凭证生效的时限,一般为24小时。
    • renew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后, 
      对安全认证的服务的后续访问则会失败。
  • [realms]:列举使用的realm。 
    • kdc:代表要kdc的位置。格式是 机器:端口
    • admin_server:代表admin的位置。格式是机器:端口
    • default_domain:代表默认的域名
  • [appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置

配置完之后将该配置文件复制到其他所有节点覆盖原配置文件

配置kdc.conf

默认放在 /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 for_cdh = {
  master_key_type = aes256-cts
  max_renewable_life = 7d 0h 0m 0s
  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
  default_principal_flags = +renewable, +forwardable
 }

说明:

  • BOCLOUD.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
  • max_renewable_life = 8d 涉及到是否能进行ticket的renwe必须配置。
  • master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,推荐不使用。
  • acl_file:标注了admin的用户权限。文件格式是 
    Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。
  • admin_keytab:KDC进行校验的keytab。后文会提及如何创建。
  • supported_enctypes:支持的校验方式。注意把aes256-cts去掉。

配置kadm5.acl

*/admin@for_cdh	*
cloudera-scm@for_cdh * flume/*@for_cdh
cloudera-scm@for_cdh * hbase/*@for_cdh
cloudera-scm@for_cdh * hdfs/*@for_cdh
cloudera-scm@for_cdh * hive/*@for_cdh
cloudera-scm@for_cdh * httpfs/*@for_cdh
cloudera-scm@for_cdh * HTTP/*@for_cdh
cloudera-scm@for_cdh * hue/*@for_cdh
cloudera-scm@for_cdh * impala/*@for_cdh
cloudera-scm@for_cdh * mapred/*@for_cdh
cloudera-scm@for_cdh * oozie/*@for_cdh
cloudera-scm@for_cdh * solr/*@for_cdh
cloudera-scm@for_cdh * sqoop/*@for_cdh
cloudera-scm@for_cdh * yarn/*@for_cdh
cloudera-scm@for_cdh * zookeeper/*@for_cdh

创建Kerberos数据库

kdb5_util create -r for_cdh -s

说明:

  • [-s] 表示生成 stash file ,并在其中存储master server key(krb5kdc)
  • [-r] 来指定一个realm name , 当krb5.conf中定义了多个realm时使用
  • 当 Kerberos database创建好之后,在 /var/kerberos/ 中可以看到生成的 principal相关文件

启动Kerberos服务

# 启动服务命令 
systemctl start krb5kdc 
systemctl start kadmin 

# 加入开机启动项 
systemctl enable krb5kdc 
systemctl enable kadmin

创建Kerberos管理员principal

# 需要设置两次密码 
kadmin.local -q "addprinc root/admin"
//使用cloudera-scm/admin作为CM创建其它principals的超级用户
kadmin.local -q "addprinc cloudera-scm/admin"

Cloudera Manager 添加 Kerberos

在此之前,请确保以下前序工作完成:

  • KDC已经安装好并且正在运行
  • 将KDC配置为允许renewable tickets with non-zerolifetime,我们在之前修改kdc.conf文件的时候已经添加了max_life和max_renewable_life这个2个属性,前者表示服务端允许的Service ticket最大生命周期,后者表示服务端允许的Service ticket更新周期。这2个属性必须分别大于等于客户端对应的配置ticket_lifetime和renew_lifetime。我们假设,不这样进行配置:ticket_lifetime = 8d, max_life = 7d, renew_lifetime = 25h, max_renew_life = 24h,那么可能造成的结果就是当service持有的票据超过24小时没有去更新,在第24.5小时的时候去进行更新,请求会遭到拒绝,报错:Ticket expired while renewing credentials,永远无法进行正常更新。对于Cloudera来说,因为更新机制被透明(Cloudera有renew进程会去定期更新),即使我们手动使用`modprinc -maxrenewlife 1week krbtgt/[email protected] 进行更新,也无济于事。

  • 在Cloudera Manager Server上安装openldap-clients

  • 为Cloudera Manager创建了超级管理员principal,使其能够有权限在KDC中创建其他的principals,如上面创建的cloudera-scm;

再次确认完毕后进入如下步骤:

1.启用Kerberos

2.确认完成启用Kerberos前的准备

3.KDC信息

要注意的是:这里的 Kerberos Encryption Types 必须跟KDC实际支持的加密类型匹配(即kdc.conf中的值)

4.KDB5信息

5.KDC Account Manager

6.导入KDC Account Manager 凭据

7.Kerberos Principals

8.Set HDFS Port

9.重启服务

猜你喜欢

转载自blog.csdn.net/Johnzhc/article/details/81221218