Ubuntu 22.04 Azure环境下Sysdig加载scap驱动失败求助
系统环境
OS: Ubuntu 22.04.3 LTS (Jammy Jellyfish) Kernel: 6.2.0-1018-azure
按照Sysdig的Linux安装指南操作后,遇到以下问题:
安装完成后,运行sysdig或sudo sysdig时报错:
Unable to load the driver error opening device /dev/scap0. Make sure you have root credentials and that the scap module is loaded: No such file or directory
明显是scap内核模块未加载,但不知道该从哪里获取并加载这个模块。另外在Ubuntu 16.04上安装时没有遇到这个问题。
更新(2023年12月26日)
我尝试了「Linux - 手动安装」方式部署Sysdig:
curl -s https://download.sysdig.com/DRAIOS-GPG-KEY.public | sudo apt-key add - sudo curl -s -o /etc/apt/sources.list.d/draios.list https://download.sysdig.com/stable/deb/draios.list sudo apt-get update sudo apt-get -y install linux-headers-$(uname -r) sudo apt-get -y install sysdig
在未开启安全启动的Azure VM上,这套配置能正常运行。推测开启安全启动时,sudo apt-get install sysdig过程中没有安装scap.ko内核模块。我尝试用insmod手动安装模块:
sudo insmod /lib/modules/6.2.0-1018-azure/updates/dkms/scap.ko
但报错:
insmod: ERROR: could not insert module scap.ko: Key was rejected by service
我的目标是在AKS上部署Sysdig DaemonSet!
解决方案
1. 安全启动导致的内核模块签名问题
Key was rejected by service错误的核心原因是:安全启动要求内核模块必须经过微软官方签名,而Sysdig默认的scap模块没有这个签名。针对Azure环境,有两种可行处理方式:
方式一:禁用安全启动(仅测试环境可用)
如果是测试用的Azure VM,可以在Azure门户的VM设置里关闭安全启动,重启后重新安装Sysdig,模块就能正常加载。但AKS节点为托管环境,默认开启安全启动,这种方法不适用于生产级AKS集群。
方式二:使用eBPF替代内核模块
Sysdig支持eBPF模式,无需加载内核模块,完美适配安全启动环境。部署AKS DaemonSet时,直接指定启用eBPF即可:
- 用Helm部署时,添加参数
--set ebpf.enabled=true,强制启用eBPF模式; - 手动编写DaemonSet配置时,给容器添加环境变量
SYSDIG_BPF_PROBE="",或者修改启动命令为sysdig --bpf。
2. AKS环境适配要点
AKS节点使用Azure定制内核,确保你用的Sysdig版本兼容当前内核。推荐用官方Helm chart部署,它会自动适配AKS环境:
- Helm chart默认配置了Pod特权模式,满足Sysdig运行权限要求;
- 启用eBPF模式后,完全绕开内核模块加载流程,避免签名冲突问题。
3. 手动签名模块(AKS环境不可行)
如果一定要用内核模块模式,需要自行给scap.ko签名并导入UEFI密钥,但AKS是托管集群,用户无法修改节点UEFI设置,因此这种方法在AKS环境下无法实施。
总结:最适合AKS生产环境的方案是启用Sysdig的eBPF模式,既解决安全启动的签名问题,又简化部署流程。
内容的提问来源于stack exchange,提问作者Crocodile

