一般来说,应该如何调试与CmdletizationQuery_NotFound
消息相关的故障,为什么基于 MSFT_NetRoute 的查询会注册这样的错误?
细节
具体来说,我的 Kubernetes CNI 提供程序 (antrea) 发布了一条与其启动时间相关的错误消息MSFT_NetRoute
,因为它无法成功运行引导自身所需的 powershell 查询。错误消息有一个可疑字符串,其中:
- 可能与 powershell 版本有关(我在这篇文章的后面没有确认,但这是一个合理的假设)
- 我还考虑到这个错误可能来自我没有安装的外部东西......
- 最后,在不完全了解 cmdletizationQuery 错误消息的性质的情况下,可以合理地假设这与较低级别的网络设置问题有关。
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound,Get-NetRoute
此消息的上述片段突出显示了Get-NetRoute
下面发生的相关错误,这令人费解,因为它似乎表明该Get-NetRoute
查询不是要运行的有效查询。但是https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-netroute?view=windowsserver2019-ps似乎暗示 Get-NetRoute 在 powershell 中默认可用。
错误信息
ROOT/StandardCimv2/MSFT_NetRoute class on the CIM server: SELECT * FROM MSFT_NetRoute WHERE ((DestinationPrefix LIKE
'0.0.0.0/0')) AND ((InterfaceIndex = 26)). Verify query parameters and retry.
At line:1 char:3
+ $(Get-NetRoute -InterfaceIndex 26 -DestinationPrefix 0.0.0.0/0 ).Next ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (MSFT_NetRoute:String) [Get-NetRoute], CimJobException
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound,Get-NetRoute
Powershell 版本
这台机器上的powershell版本似乎是最新的......(我认为5.1在windows server 2019上是正常的)......
Name Value
---- -----
PSVersion 5.1.17763.1852
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.1852
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
注意:我已经在具有类似 5.1.x powershell 版本 (5.1.17763.1490) 的类似版本的 windows server 2019 中对此进行了测试,但没有看到此故障。所以,
问题
- 我需要做些什么才能
Get-NetRoute
在我的机器上正常工作吗? - 这是否与其他事情有关(即在单个 VM 上配置网络接口的方式)?请注意,这是一个 VirtualBox VM,所以如果出现桥接或 NAT 网络问题,我不会完全震惊。
因此,一般来说,如果您遇到
CmdletizationQuery_NotFound
错误,如果查询中有很多字段,则可能并不总是伴随有关失败字段的信息......这是因为特定的 CIM 查询失败,因此找不到您要查找的对象。
但是,有时 CIMS 查询似乎无法返回结果而没有给出查询失败的特定部分(即
CmdletizationQuery_NotFound_InterfaceIndex
上面的内容很好且易于阅读,但是当我们添加DestinationPrefix
搜索字段时,下面的相同查询给出了一个更神秘的错误信息)...在这种特定情况下:
在更一般的情况下,如果您遇到类似的错误,可能是由于您刚刚制作了一个无法返回任何数据的 CIMS 查询。
现在,由于最初的问题与 Kubernetes CNI 提供程序有关,我将解决该部分:
在 Windows 上的 Kubernetes 中
CNI 提供商(如 antrea)在上线时需要这些信息,一般要确保您的 windows kubelet 正确设置其 IP 地址(即通过启动时的 node-ip 字段)。
在我的例子中,我发现在设置之后,这个查询是正确生成的,它开始寻找这个值的正确接口(即对应于我节点的内部 IP 地址的那个)。
有一个更广泛的问题,一般来说,DestinationPrefixes 应该如何在 Kubernetes windows VM 中设置,但这超出了我最初问题的范围,但总的来说,如果您正确设置了网络,那么:
node-ip
如图所示,您kubectl get nodes -o wide
的 Windows kubelet 是您想要的正确的,并且node-ip
具有目标前缀 IP 地址 = 0.0.0.0/0 的接口相关联然后具体来说,antrea CNI 提供商将能够准确地确定
nextHop
其网关的正确性,最终用于在您的 Pod 网络的节点上配置 OVS 路由规则。