Puppet7 Agent无法从服务端获取catalog故障求助
Puppet 7 Agent端获取catalog失败500错误排查方案
本次报错的核心原因是Puppet服务端配置了外部节点分类器(ENC),调用指定的node.rb脚本查询节点信息时执行失败,和证书签名、基础模块配置无关,可按以下步骤排查:
排查步骤
第一步:确认服务端ENC配置
在Puppet服务端执行以下命令,查看节点分类配置:
grep -E 'node_terminus|external_nodes' /etc/puppetlabs/puppet/puppet.conf
- 如果输出中存在
node_terminus = exec以及external_nodes = /etc/puppetlabs/puppet/node.rb,说明服务端启用了外部节点分类器,而你当前使用的是site.pp静态节点定义,不需要ENC,修改配置如下:- 编辑
/etc/puppetlabs/puppet/puppet.conf的[master]段,修改为:[master] node_terminus = plain # 注释掉以下ENC相关配置 # external_nodes = /etc/puppetlabs/puppet/node.rb - 重启puppetserver服务生效:
systemctl restart puppetserver
- 编辑
- 如果确实需要使用ENC,手动执行脚本排查错误:
- 先给脚本加执行权限:
chmod +x /etc/puppetlabs/puppet/node.rb - 手动执行脚本查看报错:
根据输出的报错修正脚本逻辑,或者在ENC后端添加/etc/puppetlabs/puppet/node.rb sles12.eisensles12.eisen节点配置即可。
- 先给脚本加执行权限:
第二步:检查服务端域名解析
确认Puppet服务端/etc/hosts文件中存在Agent端的域名映射:
192.168.160.140 sles12.eisen sles12
如果不存在请添加,避免服务端无法解析Agent域名导致查询失败。
第三步:检查配置文件权限
确认Puppet运行用户有权限读取环境目录下的所有配置:
chown -R puppet:puppet /etc/puppetlabs/code/environments/production/
第四步:补充模块配置(可选但建议)
你当前编写的filetest1模块没有提前创建父目录,若Agent端/tmp/puppettest目录不存在会触发后续报错,修改init.pp如下:
class filetest1{ # 先创建父目录 file {'/tmp/puppettest': ensure => directory, mode => '0755', } file {'/tmp/puppettest/filetest1': ensure => file, content => 'Hello World!', require => File['/tmp/puppettest'], # 依赖父目录创建完成 } }
验证
先在服务端编译节点catalog验证配置是否正确:
puppet master --compile sles12.eisen
如果编译无报错,再到Agent端执行:
puppet agent --test
即可正常拉取配置生成测试文件。
内容的提问来源于stack exchange,提问作者EisenWang
相关产品推荐
相关产品推荐

