0

我有两个 k8s 集群,一个使用 docker,另一个直接使用 containerd,都启用了 selinux。但是我发现 selinux 实际上并没有在 containerd 上运行,尽管这两个集群具有相同版本的 containerd 和 runc。

我错过了 containerd 的一些设置吗?

docker:文件标签为container_file_t,进程以container_t运行,selinux 工作正常

K8s version: 1.17
Docker version: 19.03.6
Containerd version: 1.2.10
selinux enable by adding ["selinux-enabled": true] to /etc/docker/daemon.json

// create pod using tomcat official image then check the process and file label
# kubectl exec tomcat -it -- ps -eZ
LABEL                             PID TTY          TIME CMD
system_u:system_r:container_t:s0:c655,c743          1 ?        00:00:00 java

# ls -Z /usr/local/openjdk-8/bin/java
system_u:object_r:container_file_t:s0:c655,c743 /usr/local/openjdk-8/bin/java

containerd:文件标签为container_var_lib_t,进程以spc_t运行,selinux 没有意义

K8s version: 1.15
Containerd version: 1.2.10
selinux enable by setting [enable_selinux = true] in /etc/containerd/config.toml

// create pod using tomcat official image then check the process and file label
# kubectl exec tomcat -it -- ps -eZ
LABEL                             PID TTY          TIME CMD
system_u:system_r:spc_t:s0          1 ?        00:00:00 java

# ls -Z /usr/local/openjdk-8/bin/java
system_u:object_r:container_var_lib_t:s0 /usr/local/openjdk-8/bin/java

// seems run as spc_t is correct
# sesearch -T -t container_var_lib_t | grep spc_t
   type_transition container_runtime_t container_var_lib_t : process spc_t;
4

1 回答 1

1

从这个问题我们可以读到:

Containerd 包括对 SELinux 的最低支持。更准确地说,它支持在使用 SELinux 的系统上运行,但它没有使用 SELinux 来提高容器安全性。

所有容器都使用 system_u:system_r:container_runtime_t:s0 标签运行,但不进行进一步分割

没有完全支持您使用 Containerd 所做的事情。您的方法是正确的,但问题是缺乏对此功能的支持。

于 2020-04-14T13:34:27.603 回答