解决“az aks command invoke”失败
本文介绍如何解决 Microsoft Azure CLI 中的 az aks 命令调用失败问题,以便可以成功连接到任何Azure Kubernetes 服务 (AKS) 群集,尤其是专用 AKS 群集。
其他连接方法需要使用额外的配置组件,如下表所示。
连接方法 | 额外配置组件 |
---|---|
虚拟网络 | 虚拟专用网络 (VPN) |
对等互连网络 | Azure ExpressRoute |
专用终结点 | Jumpbox |
az aks command invoke
Azure CLI 命令是连接到不需要额外配置组件的群集的替代方法。
运行az aks command invoke
命令时,Azure CLI 会自动在aks-command
命名空间中创建一个 command-<ID>
Pod 来访问 AKS 群集并检索所需的信息。
先决条件
Kubernetes kubectl 工具。 若要使用 Azure CLI 安装 kubectl,请运行 az aks install-cli 命令。
症状
下表列出了常见的 az aks command invoke
错误消息。 每个错误消息都有一个指向描述错误发生原因以及如何修复错误的部分的链接。
错误消息 | 链接 |
---|---|
操作返回了无效状态“未找到” | 原因 1:由于节点或资源约束,无法创建 Pod |
由于 kubernetes 失败,无法在托管群集中运行命令。 详细信息: 允许 webhook “validation.gatekeeper.sh” 拒绝请求: <策略特定消息> | 原因 2:Azure Policy不允许创建 Pod |
服务器 (禁止) :命名空间已禁止:用户“ID”<无法在群集范围的 API 组“<”中列出资源“资源>”> | 原因 3:未授予所需角色 |
无法连接到 MSI。 请确保 MSI 配置正确。 返回的获取令牌请求:响应 [400]; |
原因 4:存在Cloud Shell问题 |
原因 1:由于节点或资源约束,无法创建 Pod
该操作返回状态,Not Found
command-<ID>
因为 Pod 无法达到成功状态,例如 Running
。 (在许多情况下,Pod 保持 Pending
状态。) 在这种情况下,节点无法计划 Pod。 此方案可能有不同的原因,例如以下原因:
- 资源约束
- 具有
NotReady
或SchedulingDisabled
状态的节点 - 具有 Pod 无法容忍的污点的节点
- 其他原因
解决方案 1:更改配置,以便可以计划和运行 Pod
确保 command-<ID>
可以计划并运行 Pod。
原因 2:Azure Policy不允许创建 Pod
如果具有特定的 Azure 策略,则 az aks command invoke
命令可能会因为 Pod 中 command-<ID>
不允许的配置而失败。 例如,你可能有一个需要只读根文件系统或其他特定配置的 Azure 策略。
解决方案 2:免除禁止创建 Pod 的策略的命名空间
建议为不允许创建 Pod 的关联 Azure 策略免除 aks-command
命名空间。 有关豁免的详细信息,请参阅了解Azure Policy中的范围
若要免除Azure Policy:
在Azure 门户中,搜索并选择“策略”。
在 “策略 ”导航窗格中,找到“ 创作 ”部分,然后选择“ 分配”。
在工作分配表中,找到包含要更改的 “工作分配名称 ”的行,然后选择工作分配的名称。
在该分配的策略分配页中,选择 “编辑分配”。
选择“ 参数 ”选项卡。
清除“ 仅显示需要输入或审阅的参数 ”选项。
在 “命名空间排除 ”框中,将 aks-command 命名空间添加到要排除的命名空间列表中。
或者,如果策略不是内置策略,则可以检查 Pod 的配置command-<ID>
,并根据需要调整策略。 若要浏览 Pod 的 YAML 配置,请运行以下命令:
kubectl get pods command-<ID> --namespace aks-command --output yaml
原因 3:未授予所需角色
若要使用 az aks command invoke
命令,必须有权访问群集上的以下角色:
Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
如果没有这些角色,则 az aks command invoke
命令无法检索所需信息。
解决方案 3:添加所需的角色
Microsoft.ContainerService/managedClusters/runCommand/action
添加 和 Microsoft.ContainerService/managedClusters/commandResults/read
角色。
原因 4:存在Cloud Shell问题
直接az aks command invoke
在 Azure Cloud Shell 环境中运行时,不会按预期处理该命令。 这是Cloud Shell中的已知问题。
解决方案 4a:首先运行 az login 命令
在 Cloud Shell 中,先运行 az login 命令,然后再运行 az aks command invoke
。
解决方案 4b:在本地计算机或虚拟机上运行命令
az aks command invoke
在本地计算机或任何安装了 Azure CLI 的虚拟机 (VM) 上运行命令。
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。