自从 DSC 发布第一天起,我们就一直在使用它,但有一件事我们从未能够成功做到(无论是通过直接使用普通 DSC 还是通过 puppet 调用 DSC),那就是以一种不会导致应用配置时出现重大问题的方式配置 Windows 网络。
问题是这样的:
使用 Microsoft DSC 模块(目前联网),您有以下指令:
- xDhcpClient(这将禁用连接的 DHCP)
- xIPAddress(设置连接的 IP 地址)
- xDNSServerAddress(设置连接的 DNS 设置)
- xDefaultGatewayAddress(设置连接的默认网关)
问题是,如果一次应用任何这些设置,都会导致主机上的网络连接断开,并且所有内容都会立即停止应用 - 导致主机损坏并且无法远程连接,这意味着您必须通过控制台进入机器。
例如:
- xDhcpClient - 将此设置为
$false
立即从计算机中删除 IP 地址、网关和 DNS,使其无法联系。并且您必须设置此属性,因为如果您的 DHCP 租约恰好与该服务器的永久 IP 地址匹配,DSC 将返回InDesiredState = true
(从技术上讲是正确的) - xIPAddress - 将其设置为,例如,
172.16.110.10/23
会导致网络重新连接,并且不会留下默认网关或 DNS 条目,这意味着如果您从不同的子网推送,则无法连接。此外,由于没有 DNS 条目,您无法再联系域控制器来验证任何新的要求 - xDNSServerAddress - 这个其实还不错,如果你先设置这个,设置会保留,但你仍然会遇到其他问题
- xDefaultGatewayAddress - 基本上永远不能设置它,因为如果您在设置它时没有先设置 IP 地址,那么您最终会得到网关,但没有 IP 地址。如果您最后设置它,它将永远不会执行,因为其他东西会先绊倒连接(要么没有 DNS 服务器,因此您无法再验证新会话,要么 Puppet 会立即失败,因为它无法再联系 Puppet Master)
在 Linux 上,你可以通过编辑接口的配置文件来处理这个问题,然后 puppet 会通知网络服务重新启动在木偶戏的最后,这样其他所有事物都有机会首先完成。
在 Windows 上,当您应用 xDhcpClient、xDNSServerAddress 或 xDefaultGatewayAddress 时,整个过程就会因为网络断开而崩溃。
例如,应用 puppet 时会发生以下情况:
Notice: /Stage[main]/Stacknet::Single::Windows/Dsc_xdnsserveraddress[NY-DSCTEST01-PRI-VMNIC_DNS]/ensure: created
Notice: /Stage[main]/Stacknet::Single::Windows/Dsc_xdhcpclient[NY-DSCTEST01-PRI-VMNIC_DHCP]/ensure: created
Notice: Applied catalog in 18.40 seconds
Error: Could not send report: Failed to open TCP connection to ny-puppet.example.com:8140 (getaddrinfo: No such host is known. )
由于无法再连接到傀儡大师,傀儡运行就停止了。
是否有其他人通过 Puppet 或 DSC 在 Windows 上配置网络?如果是这样,您如何克服这些问题?