从 AKS 群集捕获实时系统见解
本文讨论使用 Inspektor 小工具从 Microsoft Azure Kubernetes 服务 (AKS) 群集收集实时系统见解的过程。 本文包含有关在 AKS 环境中安装此工具的分步说明。 它还探索了一些实际示例,这些示例展示了 Inspektor 小工具如何帮助你收集有价值的信息,以便对实际问题进行有效的调试。
演示
若要开始,请考虑以下快速演示。 假设必须弄清楚来自应用程序的 DNS 请求失败的原因。 通过使用 Inspektor 小工具,可以在运行应用程序的 Kubernetes 命名空间中捕获 DNS 流量:
kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE K8S.NAMESPACE K8S.POD PID TID COMM QR TYPE QTYPE NAME RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING A www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING AAAA www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING A www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING AAAA www.example.com. 0 1.2.3.4
从此信息中,可以看到 DNS 请求定向到 IP 地址 1.2.3.4
的 DNS 服务器,但服务器永远不会响应。
现在,假设这不是 1.2.3.4
默认名称服务器配置,并且你怀疑可疑的进程正在运行时修改配置。 在这些情况下,Inspektor 小工具超出了 DNS 诊断范围。 它还使你能够监视访问关键文件(如 /etc/resolv.conf)的进程,并打算修改这些文件。 若要使用此监视功能,请筛选输出中的标志以显示任何 写入文件访问模式 (O_WRONLY
仅打开以写入或 O_RDWR
打开进行读取和写入):
kubectl gadget trace open --namespace my-ns \
--filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
--output columns=+flags
K8S.NODE K8S.NAMESPACE K8S.POD K8S.CONTAINER PID COMM FD ERR PATH FLAGS
aks-agentpool-97833681-vmss000001 my-ns my-app my-app 1365052 vi 3 0 /etc/resolv.conf O_WRONLY|O_CREAT
什么是 Inspektor 小工具?
Inspektor 小工具 是一个框架,旨在生成、打包、部署和运行专用于调试和检查 Linux 和 Kubernetes 系统的工具。 这些工具(“小工具”)作为 eBPF 程序实现。 他们的主要目标是收集低级别内核数据,以便深入了解特定的系统方案。 Inspektor 小工具框架使用高级引用(如 Kubernetes 资源)管理收集的数据关联。 此集成可确保在低级别见解与其相应的高级上下文之间建立无缝连接。 集成简化了故障排除过程和相关信息的收集。
产品
Inspektor 小工具提供了一组内置工具,旨在调试和观察系统上的常见情况。 例如,通过使用此类小工具,可以在群集中跟踪以下事件:
- 进程创建
- 文件访问
- 网络活动,例如 TCP 连接或 DNS 解析
小工具提供他们通过使用不同机制收集的信息。 例如,某些小工具可以在特定时间通知系统状态。 其他小工具可以在每次发生给定事件时报告,也可以提供定期更新。
这些只是一些示例。 官方 文档 提供了每个小工具的详细说明和示例,以便你可以确定最适合特定用例的小工具。 但是,如果发现现有小工具当前未涵盖的用例,Inspektor 小工具允许你使用 run 命令运行自己的 eBPF 程序。 由于 Inspektor 小工具框架处理自定义程序的生成、打包和部署,因此它简化了满足独特要求的过程。 此外,它还收集高级元数据以扩充你在程序中收集的数据。
用例
为了补充本文开头介绍的演示,我们编译了一系列问题和实际方案,演示 Inspektor 小工具如何帮助你解决调试难题。 以下示例展示了 Inspektor 小工具的潜力。 但此工具的功能超出了这些方案。 这使得 Inspektor 小工具成为导航 Kubernetes 调试和可观测性的复杂性的宝贵资产。
问题区域 | 现象 | 故障排除 |
---|---|---|
磁盘密集型应用程序 | 高内存或 CPU 使用率,或节点准备不一致 | 应用程序可能会持续执行磁盘读/写操作,例如广泛的日志记录。 通过使用 Inspektor 小工具,可以实时识别哪些容器生成更多的 块 I/O。 或者,更具体地说,可以找到导致对文件进行更多读取和写入的容器。 |
“它始终是 DNS” | 应用程序延迟高、超时或最终用户体验不佳 | 通过使用 Inspektor 小工具,可以 跟踪群集中的所有 DNS 查询和响应。 具体而言,Inspektor 小工具提供了以下信息,可帮助你确定 DNS 是否影响应用程序的性能:
|
文件系统访问 | 应用程序错误或无法正常工作 | 应用程序可能无法访问文件系统中的特定配置、日志或其他重要文件。 在这种情况下,Inspektor 小工具可用于 跟踪 Pod 内所有打开的文件 ,以诊断访问问题。 每当应用程序尝试打开文件时,都可以发现以下信息:
例如,如果由于错误 2(ENOENT)而尝试打开文件失败,则应用程序可能尝试打开不存在的文件。 这意味着代码中可能有拼写错误,或者该文件在不同的路径中可用。 |
远程代码执行 (RCE) | 未经授权的代码执行,例如 加密劫持 ,在应用程序空闲期间 CPU 使用率较高时明显 | 当攻击者尝试对系统进行此类攻击时,他们通常必须使用它 bash 来运行代码。 Inspektor 小工具使你能够 跟踪新进程的创建,尤其是涉及关键命令的进程,例如 bash 。 |
如何在 AKS 群集中安装 Inspektor 小工具
一键 Inspektor 小工具部署
通过选择以下按钮,将自动创建 AKS 群集,Inspektor 小工具将部署在群集中。 部署完成后,可以在提供的 shell 环境中浏览 Inspektor 小工具的所有功能。
通过运行“kubectl 小工具”插件安装 Inspektor 小工具
本部分概述了通过运行 kubectl gadget
插件在 AKS 群集中安装 Inspektor 小工具的步骤。 安装由两个部分组成:
在
kubectl gadget
计算机上安装插件kubectl gadget
运行插件以在群集中安装 Inspektor 小工具警告
许多机制可用于部署和使用 Inspektor 小工具。 每种机制都针对特定的用例和要求进行了定制。 可以使用 kubectl 小工具插件来应用其中几个机制,但并非所有机制。 例如,使用
kubectl gadget
插件部署 Inspektor Gadget 取决于 Kubernetes API 服务器的可用性。 如果不能依赖此类组件,因为其可用性偶尔会遭到入侵,建议避免使用kubectl gadget
部署机制。 有关此用例和其他用例的详细信息,请参阅 Inspektor 小工具文档。
先决条件
Kubernetes kubectl 命令行工具。 如果有 Azure CLI,可以运行 az aks install-cli 命令来安装 kubectl。
AKS 群集。 如果没有 AKS 群集,请使用 Azure CLI 或Azure 门户创建一个群集。
kubectl 中插件的 krew 包管理器。 可以按照 krew 快速入门指南 安装此包管理器。
第 1 部分:在计算机上安装 kubectl 插件小工具
我们建议你用于 krew
安装 kubectl gadget
插件。
注意
若要安装特定版本或从源进行编译,请参阅 在 GitHub 上安装 kubectl 小工具 。
kubectl krew install gadget
现在,通过运行以下命令 version
来验证安装:
kubectl gadget version
该 version
命令显示客户端版本(kubectl gadget
插件),但它还会告诉你尚未安装在服务器上(群集):
Client version: vX.Y.Z
Server version: not installed
第 2 部分:在群集中安装 Inspektor 小工具
以下命令部署 DaemonSet 控制器。
kubectl gadget deploy
再次运行 version
命令验证安装:
kubectl gadget version
这一次,客户端和服务器都显示为正确安装:
Client version: vX.Y.Z
Server version: vX.Y.Z
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 对这些产品的性能和可靠性不作任何明示或默示担保。
第三方联系人免责声明
Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。