Flink1.8 集群搭建完全指南(2):Kerberos的安装

Flink要求它使用的Hadoop集群必须是要添加Kerberos和SASL认证的,本节先介绍Kerberos认证服务的部署。

1. 环境准备

假设我们部署Hadoop集群的机器有三台,选择其中一台作为Kerberos的Master,用于生成Kerberos信息,另外两台安装Kerberos的客户端,用于进行Kerberos登录。

主机名 IP 角色
vm1 10.16.195.254 Master KDC
vm2 10.16.196.1 Kerberos client
vm3 10.16.196.5 Kerberos client

确保每台主机的DNS解析正确,主机之间可以ping通。

2. Master KDC部署
  • 安装KDC

在vm1上安装KDC的服务,以及Kerberos Client:

$ yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation

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

  • 配置kdc.conf

默认路径:/var/kerberos/krb5kdc/kdc.conf,以下为配置示例:

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 HADOOP.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
 }

说明:

  • HADOOP.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
  • max_renewable_life = 7d 涉及到是否能进行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:支持的校验方式,不需要修改。
  • 配置krb5.conf

默认路径:/etc/krb5.conf,包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。配置示例:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = HADOOP.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 HADOOP.COM = {
  kdc = vm1
  admin_server = vm1
 }

[domain_realm]
 .hadoop.com = HADOOP.COM
 hadoop.com = HADOOP.COM

说明:

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

配置完上述两个文件,就可以进行Kerberos数据库的初始化了:

$ /usr/sbin/kdb5_util create -s -r HADOOP.COM
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/[email protected]'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
kdb5_util: Required parameters in kdc.conf missing while initializing the Kerberos admin interface

其中,[-s]表示生成stash file,并在其中存储master server key(krb5kdc);还可以用[-r]来指定一个realm name,当krb5.conf中定义了多个realm时才是必要的。整个初始化的时间比较长,大约在10分钟左右。在此过程中,我们会输入database的管理密码。这里设置的密码一定要记住,如果忘记了,就无法管理Kerberos server。

当Kerberos database创建好后,可以看到目录 /var/kerberos/krb5kdc 下生成了几个文件:

$ ll /var/kerberos/krb5kdc/
total 24
-rw------- 1 root root   22 Mar 31  2016 kadm5.acl
-rw------- 1 root root  416 Jun 19 16:29 kdc.conf
-rw------- 1 root root 8192 Jun 19 16:52 principal
-rw------- 1 root root 8192 Jun 19 16:52 principal.kadm5
-rw------- 1 root root    0 Jun 19 16:52 principal.kadm5.lock
-rw------- 1 root root    0 Jun 19 16:52 principal.ok

如果需要重建数据库,将该目录下的principal相关的文件删除即可。

数据库创建完成后,重启一下krb5的服务:

$ krb5kdc restart
4. 添加database administrator

我们需要为Kerberos database添加administrative principals (即能够管理database的principals) —— 至少要添加1个principal来使得Kerberos的管理进程kadmind能够在网络上与程序kadmin进行通讯。

在master KDC上执行命令,并设置密码:

$ kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/[email protected] with password.
WARNING: no policy specified for admin/[email protected]; defaulting to no policy
Enter password for principal "admin/[email protected]":
Re-enter password for principal "admin/[email protected]":
Principal "admin/[email protected]" created.

设置完成后,执行以下命令查看princ的列表:

$ kadmin.local -q "listprincs"
Authenticating as principal root/[email protected] with password.
K/[email protected]
admin/[email protected]
5. 为database administrator设置ACL权限

在KDC上我们需要编辑acl文件来设置权限,该acl文件的默认路径是 /var/kerberos/krb5kdc/kadm5.acl(也可以在文件kdc.conf中修改)。Kerberos的kadmind daemon会使用该文件来管理对Kerberos database的访问权限。对于那些可能会对pincipal产生影响的操作,acl文件也能控制哪些principal能操作哪些其他pricipals。

我们现在为administrator设置权限:将文件/var/kerberos/krb5kdc/kadm5.acl的内容编辑为

*/[email protected]      *

代表名称匹配*/[email protected] 都认为是admin,权限是 *。代表全部权限。

6. 启动Kerberos daemon

设置完成,可以启动Kerberos daemon,并设置为开机启动:

$ service krb5kdc start
$ chkconfig krb5kdc on

现在KDC已经在工作了。这两个daemons将会在后台运行,可以查看它们的日志文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。
可以通过命令kinit来检查这两个daemons是否正常工作。

7. Kerberos Clients部署

在另外两台主机vm2和vm3,安装kerberos客户端:

$ yum install krb5-workstation krb5-libs krb5-auth-dialog

然后配置krb5.conf文件,该文件的内容和Master KDC的内容保持一致。

8. 总结

以上完成了Kerberos的环境部署,后续可以用来进行Hadoop Kerberos认证,关于Kerberos的资料,请参考文档:https://web.mit.edu/kerberos/www/krb5-1.12/doc/index.html

你可能感兴趣的:(Flink1.8 集群搭建完全指南(2):Kerberos的安装)