secretflow / kuscia

Kuscia(Kubernetes-based Secure Collaborative InfrA) is a K8s-based privacy-preserving computing task orchestration framework.
https://www.secretflow.org.cn/docs/kuscia/latest/zh-Hans
Apache License 2.0
73 stars 53 forks source link

通过k3s启动的容器特权模式不生效 #419

Closed GreenYang5277 closed 2 months ago

GreenYang5277 commented 2 months ago

Issue Type

Others

Search for existing issues similar to yours

Yes

Kuscia Version

main

Link to Relevant Documentation

No response

Question Details

我准备在secretpad集成环境(allinone)下,启动支持sgx的CapsuleManager试试,发现启动后无法加载sgx设备,后来增加了特权模式,依然是相同的错误。

下面是特权模式不生效的复现.
在已有的tee namespace下的CapsuleManager 增加特权模式
      containers:
        - name: capsule-manager-sim
          image: docker.io/secretflow/capsule-manager-sim-ubuntu20.04:v0.1.0b0
          imagePullPolicy: Never
          securityContext:
            privileged: true
          ports:
            - containerPort: 8888
      dnsPolicy: ClusterFirst
      enableServiceLinks: true

启动后进入容器,进行特权操作:iptables -L
# # # # iptables -L
iptables v1.8.4 (legacy): can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
zimu-yuxi commented 2 months ago

部署方式是什么样的?docker还是k8s?具体报错信息是什么?

GreenYang5277 commented 2 months ago

部署方式是什么样的?docker还是k8s?具体报错信息是什么?

感谢回答。 中心化部署方式,部署指引:https://www.secretflow.org.cn/zh-CN/docs/secretpad/v0.10.0b0/deployment/master 报错: 当前提供的是仿真模式的枢纽模式的计算方式,我试着改成sgx模式下的。于是部署好了之后,准备将在tee namespace下的CapsuleManager替换成sgx下的CapsuleManager。我确认了kuscia在启动的时候,tee节点已经增加了privileged参数,tee容器内部可以看到sgx设备。剩下的就是在k3s下启动CapsuleManager时增加privileged权限(其他地方已经修改了,比如pccs配置)。发现在k3s启动sgx模式的CapsuleManager报错,报错如下:

[get_driver_type edmm_utility.cpp:116] Failed to open Intel SGX device. [open_se_device edmm_utility.cpp:178] Failed to open Intel SGX device. [get_driver_type /home/sgx/jenkins/ubuntuServer2204-release-build-trunk-224/build_target/PROD/label/Builder-UbuntuSrv2204/label_exp/ubuntu64/linux-trunk-opensource/psw/urts/linux/edmm_utility.cpp:116] Failed to open Intel SGX device. [ERROR] occlum-pal: Failed to create enclave with error code 0x2006: Invalid SGX device. Please make sure SGX module is enabled in the BIOS, and install SGX driver afterwards. (line 152, file src/pal_enclave.c)

为什么认为是权限不足的问题。有两个原因:

  1. 我进入了CapsuleManager容器内,无法执行root该有的权限指令,比如查看/dev下的设备,只有少量可用的。而通过docker直接启动的时候增加privileged权限后,可以看到物理机/dev下的全部设备。
  2. 进入CapsuleManager容器内,无法执行iptables -L操作。而通过docker直接启动的时候增加privileged权限后,可以执行该操作。
  3. 同样的参数下,我使用docker-compose启动,sgx模式下的CapsuleManager可以正常启动。

问题:如何能够在k3s给pod增加privileged特权?目的是让pod(CapsuleManager和teeapp)能够使用sgx的设备,能够正常启动。

zimu-yuxi commented 2 months ago

是否支持sgx呢?ls /dev | grep sgx看下?

GreenYang5277 commented 2 months ago

是否支持sgx呢?ls /dev | grep sgx看下?

可以确认机器支持sgx,已经跑通了Trustedflow的全部步骤。现在基本上已经定位到了是上面描述启动的CapsuleManager没有获得特权模式(privileged没生效),现在想知道kuscia下是不是对k3s做了权限的限制,通过k3s启动的pod没有办法获得特权模式。

可以忽略sgx相关操作,现在是k3s启动的pod不仅仅sgx设备用不了,特权模式下的操作都做不了,比如iptables -L

yushiqie commented 2 months ago

需要在 kuscia.yaml 中开启特权容器开关,并且重启kuscia 节点生效

agent: allowPrivileged: true

GreenYang5277 commented 2 months ago

需要在 kuscia.yaml 中开启特权容器开关,并且重启kuscia 节点生效

agent: allowPrivileged: true

解决了,感谢