为什么我的Vagrant虚拟机上的Puppet代理无法连接到其VM上的Puppet Master服务?

7

我的目标是拥有一个或两个节点和一个puppetmaster。我使用了一个bash脚本来为每个节点提供puppetlabs仓库,并安装最新版本的puppet和/或puppetmaster。但每次我尝试在节点上运行puppet agent --test时,它都会返回以下错误:

root@vm:~# puppet agent --test
Error: Could not request certificate: Connection refused - connect(2)
Exiting; failed to retrieve certificate and waitforcert is disabled
  • 我确认了puppetmaster服务正在运行。
  • 在主服务器启动之前,我不会启动节点。
  • 运行puppet cert list未显示在puppetmaster上等待批准的证书。
  • /etc/hosts文件中已正确配置IP地址和主机名。
  • /etc/puppet/puppet.conf看起来没问题。
  • 我可以从主服务器ping通节点,反之亦然。
  • iptables --list未显示任何防火墙规则。

是Vagrant / Virtualbox无法处理端口8140吗?错误显示“连接被拒绝”,因此我认为这是防火墙问题。但是没有防火墙...

那么,我错在哪里了?

这是我的Vagrantfile:

Vagrant.configure("2") do |config|

  config.vm.define :puppetmaster do |puppetmaster|
    puppetmaster.vm.box = "ubuntu-server-12042-x64-vbox4210-nocm"
    puppetmaster.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box"
    puppetmaster.vm.network :private_network, ip: "192.168.77.1"
    #puppetmaster.vm.network :forwarded_port, guest: 80, host: 20001
    #puppetmaster.vm.network :forwarded_port, guest: 443, host: 24431
    #puppetmaster.vm.network :forwarded_port, guest: 22, host: 20022
    puppetmaster.vm.hostname = "vm.puppetmaster.lab"
    puppetmaster.vm.provision :shell, :path => "master-bootstrap.sh"
    puppetmaster.vm.synced_folder "modules/", "/etc/puppet/modules"
    puppetmaster.vm.synced_folder "manifests/", "/etc/puppet/manifests"
  end

  config.vm.define :alpha do |alpha|
    alpha.vm.box = "ubuntu-server-12042-x64-vbox4210-nocm"
    alpha.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box"
    alpha.vm.network :private_network, ip: "192.168.77.2"
    #alpha.vm.network :forwarded_port, guest: 22, host: 20023
    alpha.vm.hostname = "vm.alpha.lab"
    alpha.vm.provision :shell, :path => "alpha-bootstrap.sh"
  end


  config.vm.define :beta do |beta|
    beta.vm.box = "ubuntu-server-12042-x64-vbox4210-nocm"
    beta.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box"
    beta.vm.network :private_network, ip: "192.168.77.3"
    #beta.vm.network :forwarded_port, guest: 22, host: 20024
    beta.vm.hostname = "vm.beta.lab"
    beta.vm.provision :shell, :path => "beta-bootstrap.sh"
  end
end

我的节点引导脚本:

#!/usr/bin/env bash

wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
dpkg -i puppetlabs-release-precise.deb
apt-get update
#apt-get -y dist-upgrade
apt-get -y install puppet

echo '192.168.77.1 vm.puppetmaster.lab' >> /etc/hosts

echo '[agent]' >> /etc/puppet/puppet.conf
echo 'server=vm.puppetmaster.lab' >> /etc/puppet/puppet.conf
echo 'certname=vm.alpha.lab' >> /etc/puppet/puppet.conf

我主要使用的Bootstrap Bash脚本:

#!/usr/bin/env bash

wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
dpkg -i puppetlabs-release-precise.deb
apt-get update
#apt-get -y dist-upgrade
apt-get -y install puppet
puppet apply /etc/puppet/manifests/default.pp

请注意,我使用了稍微修改过的Pro Puppet木偶模块来配置/安装puppet/puppetmaster。这就是为什么我在主引导脚本中运行puppet apply命令的原因。
编辑 如果我使用:public_network并让我的工作场所dhcp服务器分配ip地址,我可以使两个虚拟机进行通信。当然,这不是理想的,因为这意味着我不能在私有的本地虚拟网络上使用192.x.x.x地址。在运行任何木偶东西之前,我必须手动配置主机文件。但至少我知道,问题与使用:private_network有关。
编辑2 我刚试用了puppetlabs/firewall模块强制在puppetmaster vm的防火墙上打开8140端口,以防在检查防火墙之前我错过了什么。那样我就可以在那个vm上运行木偶代理了。但是当我在alpha vm上尝试时,它仍然出现了连接被拒绝的错误。因此,我怀疑防火墙与此无关。
编辑3 私有网络选项在VM上设置第二个NIC。第一个NIC被NAT'd,第二个NIC得到我分配的静态IP。
Puppet正在同时监听两个NIC。(至少我是这么认为的。)
192.x.x.x IP地址对这些VM是唯一的。该范围未在任何其他地方使用。

1
我也遇到了同样的问题,所以很想看到这个问题得到解决!目前正在使用puppet apply作为一种解决方法,直到我弄清楚为止... - Matt Cooper
你最终解决了这个问题吗?我很想知道答案。 - Vishal Biyani
请查看下面的选中答案。 - David R.
3个回答

2

在您的主机中查找 ifconfig。也许IP地址 192.168.77.1 是主机与虚拟机进行私有网络连接的地址。更改puppetmaster虚拟机的IP地址,销毁并重新启动它。


1

我自己对Puppet一无所知,几个小时前才刚听说过。

"Connection refused"的意思是代理无法找到你的Puppet主机。这可能有以下几种原因:

  1. 它连接的服务器不正确。如果你认为这是问题所在,可以使用"--server whatever.your.server.is"来强制指定。
  2. Puppet主机没有在服务器上运行。如果你认为这是问题所在,可以尝试在服务器上运行"netstat -an | grep "LISTEN"",看看是否有端口8140正在运行。
  3. 存在一些盒子之间的连接问题,比如防火墙等。尝试ping一下该盒子,或者使用"telnet whatever.your.server.is 8140"尝试连接该端口。如果连接成功,则不是这个问题。

以上三种情况中可能会有一个是原因所在。


在发布这个问题之前,我已经检查过那些事情。虽然我没有特别提到 netstat 或 telnet,但我确实提到了涵盖相同内容的测试。 - David R.

0

我曾经遇到过同样的问题,直到我意识到我分配给主服务器的IP实际上已经被占用了,我一直在尝试连接错误的机器。但你可能已经检查过了,对吧?


我已经检查过了,发现该 IP 范围没有被其他地方使用。直到Mikhail指出来,我才意识到 puppetmaster IP 是由我的主机使用的... - David R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接