侧边栏壁纸
博主头像
jack

日拱一卒无有尽,功不唐捐终入海

  • 累计撰写 25 篇文章
  • 累计创建 13 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

Hadoop3.x的HA集群开启Kerberos认证——基于FreeIPA

jack
2023-03-24 / 3 评论 / 1 点赞 / 1,030 阅读 / 3,260 字 / 正在检测是否收录...

前提条件

  1. Hadoop3.x HA集群已经正常运行

Hadoop3.x HA模式部署教程

  1. FreeIPA 高可用集群已经正常运行

FreeIPA高可用部署实战教程

  1. 主机服务部署清单说明
IP 主机别名 完全限定域名(FQDN) 部署服务
192.168.18.141 master master.tobehacker.com Hadoop集群master
192.168.18.142 slave1 slave1.tobehacker.com Hadoop集群slave1
192.168.18.143 slave2 slave2.tobehacker.com Hadoop集群slave2
192.168.18.151 ipa1 ipa1.tobehacker.com FreeIPA集群ipa1
192.168.18.152 ipa2 ipa2.tobehacker.com FreeIPA集群ipa2
  1. 每个主机 hostname设置为完全限定域名,如下以 192.168.18.141 master 为例
hostnamectl set-hostname master.tobehacker.com
  1. 每个主机配置/etc/hosts,以我的集群环境为例
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.18.141 master.tobehacker.com master
192.168.18.142 slave1.tobehacker.com slave1
192.168.18.143 slave2.tobehacker.com slave2
192.168.18.110 manager.tobehacker.com manager
192.168.18.149 ranger.tobehacker.com ranger
192.168.18.148 knox.tobehacker.com knox

192.168.18.151 ipa1.tobehacker.com ipa1
192.168.18.152 ipa2.tobehacker.com ipa2
  1. 每个主机配置DNS1指向ipa1的ip、DNS2指向ipa2的ip

编辑网卡配置(请编辑自己的网卡配置文件), vim /etc/sysconfig/network-scripts/ifcfg-ens33,下面以其中一台主机192.168.18.141为例,DNS1、DNS2为ipa1、ipa2上安装的DNS服务

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="d59e05f3-70cf-4bbf-91f2-d1de99c66697"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.18.141
GATEWAY=192.168.18.2
DNS1=192.168.18.151
DNS2=192.168.18.152
NETMASK=255.255.255.0

注意 BOOTPROTODNS1、DNS2的设置,网络相关的配置尤为重要!;
重启:

systemctl restart network
  1. 关闭每个主机Hadoop组件的服务:journalnode、namenode、datanode、yarn、zkfc
zkServer.sh stop
hdfs --daemon stop xxx服务
  1. ipa界面上创建bigdata用户组 、创建hadoop用户

bigdata用户组gid 就填写linux主机上面bigdata用户组gid,我的三台主机gid都是1000
注意: 添加hadoop用户到bigdata组
image-1681493531632

  1. 集群主机配置时间同步
yum -y install ntpdate 

ntpdate ntp1.aliyun.com

echo "*/10 * * * * /usr/sbin/ntpdate time1.aliyun.com" >> /var/spool/cron/root

timedatectl set-timezone Asia/Shanghai

hwclock --systohc

Hadoop集群三台主机安装和配置IPA客户端

安装客户端软件包

yum -y install freeipa-client

配置安装ipa-client

  1. 高可用 基础配置 安装
sudo ipa-client-install --mkhomedir --no-ntp  --enable-dns-updates --principal=admin --password=admin123456

image-1680838195010

  1. ipa界面查看各个加入的客户端主机

image-1680838256326


安装 FreeIPA 客户端命令参数解释:

--mkhomedir: 安装过程中自动为每个用户创建主目录,以确保用户主目录的权限和所有权正确设置。

--no-ntp: 禁用客户端上的 NTP 时间同步。如果您的环境中有其他时间同步机制,或者您不需要使用时间同步功能,则可以使用此参数。

--enable-dns-updates:  它指示客户端在加入 FreeIPA 域时自动更新 DNS 记录,以便其他主机可以找到该客户端。FreeIPA 客户端会在加入域时向 DNS 服务器自动添加 A 记录和 PTR 记录。这些记录包含有关客户端的信息,例如客户端的 IP 地址和主机名。这些记录可以被其他主机和服务使用来查找和连接该客户端。
请注意,在启用 DNS 更新选项时,需要确保客户端的 DNS 设置正确,并且客户端能够与 DNS 服务器通信。否则,客户端可能无法加入 FreeIPA 域或更新 DNS 记录。

--principal=admin: 指定连接到 FreeIPA 服务器时使用的管理员用户的名称。

--password=admin123456: 指定管理员用户的密码。


自动发现说明: 上面安装命令并没用指定很多参数如Realm、IPA Server、BaseDN、DNS Domain 等信息,因为之前Hadoop集群主机配置了DNS1、DNS2,所以能够自动发现服务。
测试自动发现:
(1)任意一台未安装ipa客户端主机执行 ipa-client-install --mkhomedir --no-ntp --enable-dns-updates --principal=admin --password=admin123456
image-1680837764296
(2)停止ipa1主机的服务 : systemctl stop ipa
(3)再次执行 ipa-client-install --mkhomedir --no-ntp --enable-dns-updates --principal=admin --password=admin123456
image-1680837815112

查看客户端 /etc/krb5.conf 配置

cat /etc/krb5.conf

image-1680854763750

全部客户端安装完成,界面查看是否全部成功

image-1680854830365

添加服务主体

ipa界面设置密码策略和kerberos票策略(可选)

命令行查看 keytab有效期,默认是24小时,可以在界面上设置kerberos策略最大存活期久一点
image-1680983130311

命令行设置服务主体的密码过期时间(可选)

ipa service-mod --setattr krbpasswordexpiration="20991231235959Z" hadoop/master.tobehacker.com@TOBEHACKER.COM

查看master节点hadoop服务主体的所有信息

ipa service-show --all hadoop/master.tobehacker.com@TOBEHACKER.COM

相关目录准备

说明:hadoop是要作为启动用户,hadoop用户属于bigdata组

# 新建keytabs目录
mkdir  /etc/security/keytabs

chown -R  hadoop:bigdata /opt/bigdata
chmod -R 775 /opt/bigdata

chown -R  hadoop:bigdata /data/bigdata
chmod -R 775 /data/bigdata

chown -R  hadoop:bigdata /etc/security/keytabs
chmod -R 755 /etc/security/keytabs

添加服务主体

每个服务器节点添加三个principals:hadoop、zookeeper、zkcli

在ipa1 服务器登录,创建三个服务主体,其中 TOBEHACKER.COM 是默认的Kerberos域。

admin登录

kinit admin

创建hadoop服务主体

sudo ipa service-add hadoop/master.tobehacker.com

sudo ipa service-add hadoop/slave1.tobehacker.com

sudo ipa service-add hadoop/slave2.tobehacker.com

创建HTTP 服务主体

此主体是必须的,官网关于WebHDFS的kerberos配置说明

sudo ipa service-add HTTP/master.tobehacker.com

sudo ipa service-add HTTP/slave1.tobehacker.com

sudo ipa service-add HTTP/slave2.tobehacker.com

可以登录IPA 界面查看一下 各个服务主体是否添加成功
image-1680855705234

添加zookeeper服务主体

sudo ipa service-add zookeeper/master.tobehacker.com

sudo ipa service-add zookeeper/slave1.tobehacker.com

sudo ipa service-add zookeeper/slave2.tobehacker.com

添加zkcli服务主体

sudo ipa service-add zkcli/master.tobehacker.com

sudo ipa service-add zkcli/slave1.tobehacker.com

sudo ipa service-add zkcli/slave2.tobehacker.com

创建/etc/security/keytabs/目录

mkdir /etc/security/keytabs/
chown -R hadoop:bigdata /etc/security/keytabs/
chmod -R 755  /etc/security/keytabs/

生成服务主体的keytab

在ipa1服务器 命令行admin登录

kinit admin

以下命令均在ipa1下面执行

mkdir /etc/security/keytabs/
chown -R bigdata:bigdata /etc/security/keytabs/
chmod -R 770  /etc/security/keytabs/

hadoop服务主体生成keytab:

ipa-getkeytab -s ipa1.tobehacker.com -p hadoop/master.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/hadoop.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p hadoop/slave1.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/hadoop.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p hadoop/slave2.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/hadoop.keytab

HTTP服务主体生成keytab:

这里也写入hadoop.keytab,减少运维复杂度。

ipa-getkeytab -s ipa1.tobehacker.com -p  HTTP/master.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/hadoop.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p  HTTP/slave1.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/hadoop.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p  HTTP/slave2.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/hadoop.keytab

zk服务端生成keytab:

ipa-getkeytab -s ipa1.tobehacker.com -p zookeeper/master.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/zookeeper.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p zookeeper/slave1.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/zookeeper.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p zookeeper/slave2.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/zookeeper.keytab

zkcli服务主体生成keytab:

ipa-getkeytab -s ipa1.tobehacker.com -p zkcli/master.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/zkcli.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p zkcli/slave1.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/zkcli.keytab

ipa-getkeytab -s ipa1.tobehacker.com -p zkcli/slave2.tobehacker.com@TOBEHACKER.COM  -k /etc/security/keytabs/zkcli.keytab

分发keytab

分发ipa1上生成的keytab到每个集群主机

scp -r /etc/security/keytabs hadoop@master:/etc/security

scp -r /etc/security/keytabs hadoop@slave1:/etc/security

scp -r /etc/security/keytabs hadoop@slave2:/etc/security

强调:keytabs目录所有者是hadoop
chown -R hadoop:bigdata /etc/security/keytabs
chmod -R 755 /etc/security/keytabs

Hadoop集成kerberos

hadoop添加用户组映射

ipa界面新建ldapbind用户

ldapbind用户添加到bigdata组

image-1681436642309

初始化重置密码

[root@ipa1 ~]# kinit ldapbind
Password for ldapbind@TOBEHACKER.COM:
Password expired.  You must change it now.
Enter new password:
Enter it again:
[root@ipa1 ~]# kinit ldapbind
Password for ldapbind@TOBEHACKER.COM:

将密码写入一个txt文件

如密码是admin123456

echo 'admin123456' > /etc/security/hadoop-ldapbind-pwd.txt

注意:这样并不安全,会在历史命令里留下记录,建议使用随机密码生成工具生成

分发hadoop-ldapbind-pwd.txt到其他集群主机

scp /etc/security/hadoop-ldapbind-pwd.txt hadoop@master:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
scp /etc/security/hadoop-ldapbind-pwd.txt hadoop@slave1:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
scp /etc/security/hadoop-ldapbind-pwd.txt hadoop@slave2:/opt/bigdata/hadoop/hadoop-3.3.4/etc/

设置权限

只能hadoop用户可读,即启动hadoop的用户

chmod 600 /opt/bigdata/hadoop/hadoop-3.3.4/etc/hadoop-ldapbind-pwd.txt

修改hadoop配置文件

下载更新的配置文件:点我下载hadoop conf

HTTP Authentication密钥文件生成

生成随机密钥

openssl rand -base64 32 > /etc/security/signature-secret-file

分发密钥

 scp /etc/security/signature-secret-file hadoop@master:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
 scp /etc/security/signature-secret-file hadoop@slave1:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
 scp /etc/security/signature-secret-file hadoop@slave2:/opt/bigdata/hadoop/hadoop-3.3.4/etc/

修改zookeeper配置、zkfc配置

1. conf/zoo.cfg 添加如下

kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true
 
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000

2. conf/目录下创建jaas.conf配置文件

每个主机的principal 有所不同,请修改下面的 principal , xxx修改为对应的主机名称
principal这里必须是zookeeper,否则zk的客户端后面启动报错

Server {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/etc/security/keytabs/zookeeper.keytab" #keytab证书的位置
  storeKey=true
  useTicketCache=false
  principal="zookeeper/xxx.tobehacker.com@TOBEHACKER.COM"
};
 
Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/etc/security/keytabs/zkcli.keytab"
  storeKey=true
  useTicketCache=false
  principal="zkcli/xxx.tobehacker.com@TOBEHACKER.COM"
};

测试kerberos 客户端认证

测试master节点
kinit -kt /etc/security/keytabs/hadoop.keytab hadoop/master.tobehacker.com@TOBEHACKER.COM

重启

重启三台zookeeper

zkServer.sh start

重启hadoop

  1. 三个节点启动journalnode:
hdfs --daemon start journalnode
  1. 启动master的namenode
hdfs --daemon start namenode
  1. 启动slave1的namenode
hdfs --daemon start namenode
  1. 启动三个节点的datanode:
hdfs --daemon start datanode
  1. 启动 yarn集群
# master 、slave1
yarn --daemon start resourcemanager
# 三个节点
yarn --daemon start nodemanager

检查ResourceManager服务状态:

yarn rmadmin -getServiceState rm1

检查NodeManager服务状态:

yarn node -list
  1. 启动master、slave1的DFSZKFailoverController
hdfs --daemon start zkfc

注意: 上述启动过程是基于已经运行过的hadoop集群,进程都是以hadoop用户启动,请确保hadoop用户在bigdata用户组下,且具备大数据组件目录、文件的读写权限,比如hadoop用户具备keytab文件的读权限,否则会启动失败。

填坑环节——票据的缓存目录

每个集群节点注释下/etc/krb5.conf关于default_ccache_name的配置,如下图
image-1681228238472
或者写死 然后给足权限也行应该(暂未测试)
default_ccache_name = /xx/xx/krb5cc_%

命令行验证kerberos

hadoop fs 验证

在ipa界面可以新建一个用户,如tust,用户加到bigdata用户组,然后测试在masetr节点登录

kinit tust

验证,目前没有文件就是无任何输出

hadoop fs -ls /

HTTP WebHDFS验证

注意下面命令中的tst用户,请改成你自己的用户
还有master.tobehacker.com改为自己的主机域名

curl -i --negotiate -u tst : "http://master.tobehacker.com:9870/webhdfs/v1?op=LISTSTATUS"

win10安装MIT kerberos

目的说明

为了实现win10浏览器能够使用kerberos认证去浏览Hadoop组件界面

下载安装包

点我下载

安装并修改配置

(1) 建议默认经典安装即可,安装完成需要重启电脑
安装的默认位置:C:\Program Files\MIT\Kerberos

(2) C:\ProgramData\MIT\Kerberos5\krb5.ini 添加如下信息:

[libdefaults]
  default_realm = TOBEHACKER.COM
  rdns = false
  ticket_lifetime = 24h
  forwardable = true
#  default_ccache_name = KEYRING:persistent:%{uid}

[realms]
  TOBEHACKER.COM = {
	kdc = ipa1.tobehacker.com
	admin_server = ipa1.tobehacker.com
  }

[domain_realm]
  .tobehacker.com = TOBEHACKER.COM
  tobehacker.com = TOBEHACKER.COM


环境变量配置

系统环境变量 上移到最前面
image-1681397154589
使用MIT Kerberos软件
image-1681237068295
成功获得凭证
image-1681237186769
如果不成功请看下面 问题链接

kinit: Configuration file does not specify default realm when parsing name tust

image-1681400347898

此问题参考链接

火狐浏览器使用kerberos认证

下载安装

点我下载

配置火狐浏览器

地址栏输入

about:config

(1)修改首选项

network.negotiate-auth.trusted-uris

填入集群主机FQDN

master.tobehacker.com,slave1.tobehacker.com,slave2.tobehacker.com

image-1681238991202

(2)设置network.auth.use-sspi为false,关闭sspi验证协议

network.auth.use-sspi

image-1681239031513

重启火狐浏览器

访问hadoop namenode UI界面 :

http://master.tobehacker.com:9870/

idea的bigdata tool插件使用

该工具暂不支持kerberos认证方式,此处仅是记录一下。

安装

解压放到任意目录即可
点我下载win10安装包

环境变量配置

添加 HADOOP_HOME
image-1681397891477


path里添加 %HADOOP_HOME%\bin
image-1681397955526

1

评论区