AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 937465
Accepted
TJ Zimmerman
TJ Zimmerman
Asked: 2018-10-27 17:31:33 +0800 CST2018-10-27 17:31:33 +0800 CST 2018-10-27 17:31:33 +0800 CST

Ansible 在“收集主机”时失败可能是因为 SSH 连接速度很慢。设置“UseDNS no”可以解决问题

  • 772

我遇到了似乎与 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 服务器执行的一些nslookups,并附加了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 主服务器的示例。

domain-name-system
  • 1 1 个回答
  • 2236 Views

1 个回答

  • Voted
  1. Best Answer
    TJ Zimmerman
    2018-10-27T18:17:31+08:002018-10-27T18:17:31+08:00

    我发现了问题。看来我生成的虚拟机包含一个由 qemu 自动引入的附加名称服务器。当创建 VM 并且未为其指定网络设备时,会发生这种情况。来自 Proxmox 文档qm:

    net[n]: [model=] [,bridge=] [,firewall=<1|0>] [,link_down=<1|0>] [,macaddr=] [,queues=] [,rate=] [ ,tag=] [,trunks=] [,=]
    指定网络设备。

    bridge=
    将网络设备连接到的网桥。Proxmox VE 标准网桥称为 vmbr0。

    如果不指定网桥,我们会创建一个 kvm 用户(NATed)网络设备,它提供 DHCP 和 DNS 服务。使用以下地址:

    10.0.2.2 网关
    10.0.2.3 DNS 服务器
    10.0.2.4 SMB 服务器
    DHCP 服务器从 10.0.2.15 开始为访客分配地址。

    我的程序如下:

    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)之间运行以下任务来解决此问题:

    - name: Setting the name server for the template to ensure that QEMU doesn't automatically configure the clones to use 10.0.2.3. 
      shell: >
          qm set {{ proxmox_template_id }}
          --ipconfig0 gw={{ k8s_master_gw }},ip={{ k8s_master_ip }}{{ k8s_master_sn }} 
          --nameserver {{ k8s_master_ns }} 
          --searchdomain {{ k8s_master_sd }}
    

    交叉手指说这将解决问题。

    - - -编辑 - - -

    它没。并且在执行qm clone. 这意味着我将不得不重新编写我的剧本以提供四个单独的实例,而不是从模板中克隆。

    -----编辑2-----

    蹩脚的 Proxmox_kvm Ansible 模块似乎也不支持与 cloudinit 相关的 API 东西。这意味着我将不得不通过 shell 命令和杠杆来做所有事情qm。:(

    -----编辑3-----

    看起来该名称服务器实际上在默认情况下位于基本图像中。WTF CENTOS?

    root@hypervisor-1:/rpool/data# modprobe nbd max_part=8
    
    root@hypervisor-1:/rpool/data# qemu-nbd --connect=/dev/nbd0 /tmp/CentOS7.qcow2c 
    
    root@hypervisor-1:/rpool/data# fdisk -l /dev/nbd0
    Disk /dev/nbd0: 8 GiB, 8589934592 bytes, 16777216 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x000b2638
    Device      Boot Start      End  Sectors Size Id Type
    /dev/nbd0p1 *     2048 16777215 16775168   8G 83 Linux
    
    root@hypervisor-1:/rpool/data# mount /dev/nbd0p1 /mnt/tmp
    
    root@hypervisor-1:/rpool/data# cd /mnt/tmp
    
    root@hypervisor-1:/mnt/tmp# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    
    root@hypervisor-1:/mnt/tmp# cat etc/resolv.conf 
    # Generated by NetworkManager
    nameserver 10.0.2.3
    
    • 0

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve