Рейтинг:1

Как мне отлаживать Microsoft CIM, который дает сбой из-за того, что MSFT_NetRoute «не найден»?

флаг co

В общем, как следует отлаживать сбой, связанный с КомандлетизацияQuery_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 на сервере CIM: SELECT * FROM MSFT_NetRoute WHERE ((DestinationPrefix LIKE
'0.0.0.0/0')) И ((InterfaceIndex = 26)). Проверьте параметры запроса и повторите попытку.
В строке:1 символ:3
+ $(Get-NetRoute -InterfaceIndex 26 -DestinationPrefix 0.0.0.0/0 ).Далее ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
    + CategoryInfo: ObjectNotFound: (MSFT_NetRoute:String) [Get-NetRoute], CimJobException
    + FullyQualifiedErrorId: CmdletizationQuery_NotFound,Get-NetRoute

Версия PowerShell

Версия powershell на этой машине, кажется, довольно актуальна ... (5.1, я думаю, нормально для Windows Server 2019) ...

Имя Значение
---- -----
PS Версия 5.1.17763.1852
Рабочий стол PSEdition
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
Версия сборки 10.0.17763.1852
CLRВерсия 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
СериализацияВерсия 1.1.0.1

Примечание. Я тестировал это в аналогичных версиях Windows Server 2019 с аналогичной версией powershell 5.1.x (5.1.17763.1490) и не видел этой ошибки. Так,

Вопросы

  • есть что-то, что мне нужно сделать, чтобы сделать Get-NetRoute правильно работает на моих машинах?
  • связано ли это с чем-то другим (например, с тем, как сетевые интерфейсы настроены на отдельной виртуальной машине)? Обратите внимание, что это виртуальная машина VirtualBox, поэтому, если бы возникла проблема с мостом или сетью NAT, я бы не был полностью шокирован.
JosefZ avatar
флаг th
Get-NetRoute вообще работает? И показывает ли «Get-NetRoute -DestinationPrefix 0.0.0.0/0» «26» в столбце «ifIndex»?
флаг cn
Это в сообщении об ошибке. MSFT_NetRoute отсутствует. Вы можете проверить это, выполнив запрос WMI к пространству имен/пути.
флаг co
да, я еще поиграл с этим и подтвердил: Get-NetRoute работает...
флаг co
я подозреваю, что просто, как упоминалось, MSFT_NETROUTE отсутствует, но не уверен, что конкретный объект MSFT_NETROUTE, который имеет -InterfaceIndex 26 -DestinationPrefix 0.0.0.0/0. не существует ... я подозреваю, что это потому, что адрес интерфейса 26 не имеет адресата 0.0.0.0/0. Мой провайдер CNI ожидает этого ... так что, возможно, запрашиваемый интерфейс 26 не является правильным.
флаг cn
Это легко подтвердить, не нужно ничего подозревать. Класс WMI либо присутствует, либо нет.
флаг co
Да, я думаю, что смогу ответить на этот вопрос завтра, как только проясню свои мысли и соберу некоторые данные о других системах...
Рейтинг:0
флаг co

Так что, в общем, если вы получаете КомандлетизацияQuery_NotFound ошибка, может не всегда сопровождаться информацией о сбойном поле, если в запросе много полей...

â sig-windows-dev-tools git:(antrea-node-ip-hardcoding) â vagrant winrm winw1 --shell=powershell --command="Get-NetRoute -InterfaceIndex 123 "
Объекты MSFT_NetRoute со свойством «InterfaceIndex», равным «123», не найдены. Проверьте значение свойства и повторите попытку.
В строке:1 символ:1
+ Get-NetRoute -InterfaceIndex 123
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + Информация о категории: ObjectNotFound: (123:UInt32) [Get-NetRoute], CimJobException
    + FullyQualifiedErrorId: CmdletizationQuery_NotFound_InterfaceIndex,Get-NetRoute

Это связано с тем, что не удалось выполнить конкретный запрос CIM, и поэтому объект, который вы искали, не был найден.

Однако оказывается, что иногда запрос CIMS не возвращает результат не сообщая вам конкретную часть запроса, которая не удалась (т.е. КомандлетизацияQuery_NotFound_InterfaceIndex выше было приятно и легко читать, но тот же запрос ниже, когда мы добавляем Префикс назначения поле поиска, дает более загадочное сообщение об ошибке)...

sig-windows-dev-tools git:(antrea-node-ip-hardcoding) vagrant winrm winw1 --shell=powershell --command="Get-NetRoute -InterfaceIndex 7 -DestinationPrefix 0.0.0.0/1 "
Нет соответствующих объектов MSFT_NetRoute, найденных запросом CIM для экземпляров класса ROOT/StandardCimv2/MSFT_NetRoute на сервере CIM: SELECT * FROM MSFT_NetRoute WHERE ((DestinationPrefix LIKE '0.0.0.0/1')) AND ((InterfaceIndex = 7)). Проверьте параметры запроса и повторите попытку.
В строке:1 символ:1
+ Get-NetRoute -InterfaceIndex 7 -DestinationPrefix 0.0.0.0/1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~
    + CategoryInfo: ObjectNotFound: (MSFT_NetRoute:String) [Get-NetRoute], CimJobException
    + FullyQualifiedErrorId: CmdletizationQuery_NotFound,Get-NetRoute

В этом конкретном случае:

  • не было существующего IP-интерфейса с id = 26, который ТАКЖЕ имел префикс назначения 0.0.0.0/0

В более общих случаях, если вы получаете аналогичную ошибку, это может быть вызвано тем, что вы только что создали запрос CIMS, который не может вернуть какие-либо данные.

Теперь, поскольку первоначальный вопрос был связан с провайдером Kubernetes CNI, я обращусь к этой части:

В Kubernetes в Windows

Провайдеры CNI, такие как antrea, нуждаются в этой информации при подключении к Интернету, и обычно нужно убедиться в том, что ваш Windows kubelet правильно устанавливает свой IP-адрес (то есть через поле node-ip при запуске).

В моем случае я обнаружил, что после установки этого запроса этот запрос был сгенерирован правильно, и он начал искать правильный интерфейс для этого значения (то есть тот, который соответствовал внутреннему IP-адресу моего узла).

Существует более широкий вопрос о том, как в целом следует настраивать DestinationPrefixes на виртуальных машинах Windows Kubernetes, но это выходит за рамки моего первоначального вопроса, но в целом, если вы правильно настроили свою сеть, так что:

  • твой IP-адрес узла как показано kubectl получить узлы -o широкий является правильным, который вы хотите для своего windows kubelet и
  • что IP-адрес узла связан с интерфейсом, который имеет IP-адрес префикса назначения = 0.0.0.0/0

Тогда именно поставщик antrea CNI сможет точно определить правильный следующий прыжок для его шлюза, который в конечном итоге используется для настройки правил маршрутизации OVS на узле для ваших сетей модулей.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.