我遇到了似乎与 DNS 相关的问题,希望能得到一些帮助来解决。
我正在使用 Ansible 在我的 Proxmox 服务器上配置 Kubernetes 集群。该项目以两种方式工作,让用户修改site.yml
以使用Linux Containers (LXC)或来自 CentOS7 qcow2 映像的虚拟机进行部署。
使用 LXC 进行部署时,项目没有遇到任何问题并正确引导 Kubernetes 集群。但是,在使用该qcow2
图像时,我遇到了似乎与 DNS 相关的问题。当配置我的虚拟机的剧本与第一次连接到它们以准备它们的剧本之间发生转换时,就会发生这种情况。
发生的情况是,该Gathering Facts
阶段最终超时并且 Ansible 抛出以下错误:
TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
fatal: [pluto.sol.milkyway]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host pluto.sol.milkyway port 22: Operation timed out\r\n", "unreachable": true}
fatal: [ceres.sol.milkyway]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host ceres.sol.milkyway port 22: Operation timed out\r\n", "unreachable": true}
fatal: [eris.sol.milkyway]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host eris.sol.milkyway port 22: Operation timed out\r\n", "unreachable": true}
fatal: [haumea.sol.milkyway]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host haumea.sol.milkyway port 22: Operation timed out\r\n", "unreachable": true}
如果发生这种情况后,我尝试手动 SSH 连接到服务器,我可以验证 SSH 连接需要很长时间。在这一点上,我想提醒您,使用相同的主机名、IP 地址和名称服务器的 LXC 实例不会发生这种情况。
然后可以通过在每台服务器上的UseDNS no
我的文件中设置指令来解决该问题。sshd_config
并在重新启动后再次运行剧本sshd.service
。
所以,很自然,这看起来像是一个 DNS 问题。但是,由于 LXC 不会发生这种情况,我对此表示怀疑。所以这里有一些关于我的 DNS 配置的数据点。
1)他们都使用的 DNS 服务器是 BIND 并且安装在IO.Sol.Milkyway
名为192.168.1.10
. 我的 homelab 中没有 VNet 或子网或任何东西,网关已正确设置到我的路由器,192.168.1.1
因此该服务器没有路由问题。
2)这是我的 BIND 服务器上 DNS 区域的相关部分。
3)以下是从 Proxmox 服务器执行的一些nslookup
s,并附加了time
命令以证明我的 BIND 服务器在 <= .01 秒内正确响应。
$> time nslookup pluto.sol.milkyway
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: pluto.sol.milkyway
Address: 192.168.1.170
nslookup pluto.sol.milkyway 0.00s user 0.02s system 39% cpu 0.042 total
-和-
$> time nslookup 192.168.1.170
Server: 192.168.1.100
Address: 192.168.1.100#53
170.1.168.192.in-addr.arpa name = pluto.sol.milkyway.
nslookup 192.168.1.170 0.01s user 0.01s system 96% cpu 0.013 total
4)最后,您可以通过此处cloud-init
的第104、115、126 和 137 行在VM 上正确配置我的名称服务器。其中引用了此处定义的变量。
-----以下编辑-----
5)我能够从以下成功执行正向和反向 nslookup。每个响应需要 < 1.5 秒:
- 我的个人工作站(执行 Ansible)
- 我的 Proxmox 服务器(运行 Ansible 命令和虚拟机)
- 4 台虚拟机
这是Kubernetes 主服务器的示例。
我发现了问题。看来我生成的虚拟机包含一个由 qemu 自动引入的附加名称服务器。当创建 VM 并且未为其指定网络设备时,会发生这种情况。来自 Proxmox 文档
qm
:我的程序如下:
1)通过 Proxmox_KVM Ansible 模块使用 Proxmox API 创建 VM。
2)从这个虚拟机克隆四个 Kubernetes 虚拟机。
3)依次配置每个Kubernetes VM。
实际上,在步骤 1)中,我确实声明了一座桥。但是,在第 2 步)中我没有,因为它是一个简单的
qm clone
. 根据文档,它不支持net[n]
传递标志。正是在这一点上引入了随机名称服务器。然后,当步骤 3)出现时,我通过 设置了一个名称服务器,它将它作为第二个名称服务器cloud-init
附加到我的文件中。/etc/resolv.conf
我目前正在修改我的剧本以尝试通过在步骤 1)和步骤 2)之间运行以下任务来解决此问题:
交叉手指说这将解决问题。
- - -编辑 - - -
它没。并且在执行
qm clone
. 这意味着我将不得不重新编写我的剧本以提供四个单独的实例,而不是从模板中克隆。-----编辑2-----
蹩脚的 Proxmox_kvm Ansible 模块似乎也不支持与 cloudinit 相关的 API 东西。这意味着我将不得不通过 shell 命令和杠杆来做所有事情
qm
。:(-----编辑3-----
看起来该名称服务器实际上在默认情况下位于基本图像中。WTF CENTOS?