Error: failed to create containerd container: cannot load seccomp profile, no such file or directory
Error: failed to create containerd container: cannot load seccomp profile, no such file or directory
尝试在使用 kubectl apply
时设置自定义 seccomp 配置文件,尽管文件在容器中,但 pod 不会启动并出现以下错误:
Error: failed to create containerd container: cannot load seccomp profile "/var/lib/kubelet/seccomp/custom_profile.json": open /var/lib/kubelet/seccomp/custom_profile.json: no such file or directory
K8部署YAML
...
containers:
- name: container-name
image: container-image:version
securityContext:
seccompProfile:
type: Localhost
localhostProfile: custom_profile.json
...
创建容器并进入 pod 的 shell 时复制文件我可以看到它确实存在(当不尝试加载它并且 pod 启动时)
Dockerfile
...
COPY custom_profile.json /var/lib/kubelet/seccomp/custom_profile.json
...
我也尝试过更改所有者 (chown
) 和 运行 root 权限,但只要 localhostProfile: custom_profile.json
行在 YAML 中,就会再次出现相同的错误。
我错过了什么阻止找到文件? YAML 中缺少某些内容,container/dockerfile?
中缺少某些内容
以下文章让我走到这一步,但仍然无法设置配置文件:https://docs.openshift.com/container-platform/4.8/security/seccomp-profiles.html
如果使用 type: Localhost
seccomp 配置文件,则 seccomp
配置文件必须存在于调度 pod 的节点上。另外,路径是相对于路径/var/lib/kubelet/seccomp
。这里 /var/lib/kubelet/
是 kubelet
配置的默认路径。
这是来自官方的相关片段 documentation:
localhost/<path>
- Specify a profile as a file on the node located at
<seccomp_root>/, where <seccomp_root> is defined via the
--seccomp-profile-root
flag on the Kubelet. If the --seccomp-profile-root
flag is not defined, the default path will be used, which is /seccomp where is specified by the
--root-dir flag.
Example-1:要使以下内容正常工作,custom_profile.json
文件必须存在于节点上的 /var/lib/kubelet/seccomp
路径中。
securityContext:
seccompProfile:
type: Localhost
localhostProfile: custom_profile.json
Example-2:要使以下内容正常工作,custom_profile.json
文件必须存在于节点上的 /var/lib/kubelet/seccomp/profiles
路径中。
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/custom_profile.json
这是一个最小的工作示例:
seccomp
个配置文件被复制到工作节点上。
ps@worker-node:~$ sudo ls -lrt /var/lib/kubelet/seccomp/profiles
[sudo] password for ps:
total 12
-rw-r--r-- 1 root root 39 Sep 10 13:54 audit.json
-rw-r--r-- 1 root root 41 Sep 10 13:54 violation.json
-rw-r--r-- 1 root root 1657 Sep 10 13:54 fine-grained.json
ps@worker-node:~$
使用以下路径创建pod,注意路径是相对于/var/lib/kubelet/seccomp
.
apiVersion: v1
kind: Pod
metadata:
name: audit-pod
labels:
app: audit-pod
spec:
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/audit.json
containers:
- name: test-container
image: nginx
securityContext:
allowPrivilegeEscalation: false
尝试在使用 kubectl apply
时设置自定义 seccomp 配置文件,尽管文件在容器中,但 pod 不会启动并出现以下错误:
Error: failed to create containerd container: cannot load seccomp profile "/var/lib/kubelet/seccomp/custom_profile.json": open /var/lib/kubelet/seccomp/custom_profile.json: no such file or directory
K8部署YAML
...
containers:
- name: container-name
image: container-image:version
securityContext:
seccompProfile:
type: Localhost
localhostProfile: custom_profile.json
...
创建容器并进入 pod 的 shell 时复制文件我可以看到它确实存在(当不尝试加载它并且 pod 启动时)
Dockerfile
...
COPY custom_profile.json /var/lib/kubelet/seccomp/custom_profile.json
...
我也尝试过更改所有者 (chown
) 和 运行 root 权限,但只要 localhostProfile: custom_profile.json
行在 YAML 中,就会再次出现相同的错误。
我错过了什么阻止找到文件? YAML 中缺少某些内容,container/dockerfile?
中缺少某些内容以下文章让我走到这一步,但仍然无法设置配置文件:https://docs.openshift.com/container-platform/4.8/security/seccomp-profiles.html
如果使用 type: Localhost
seccomp 配置文件,则 seccomp
配置文件必须存在于调度 pod 的节点上。另外,路径是相对于路径/var/lib/kubelet/seccomp
。这里 /var/lib/kubelet/
是 kubelet
配置的默认路径。
这是来自官方的相关片段 documentation:
localhost/<path>
- Specify a profile as a file on the node located at <seccomp_root>/, where <seccomp_root> is defined via the--seccomp-profile-root
flag on the Kubelet. If the--seccomp-profile-root
flag is not defined, the default path will be used, which is /seccomp where is specified by the --root-dir flag.
Example-1:要使以下内容正常工作,custom_profile.json
文件必须存在于节点上的 /var/lib/kubelet/seccomp
路径中。
securityContext:
seccompProfile:
type: Localhost
localhostProfile: custom_profile.json
Example-2:要使以下内容正常工作,custom_profile.json
文件必须存在于节点上的 /var/lib/kubelet/seccomp/profiles
路径中。
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/custom_profile.json
这是一个最小的工作示例:
seccomp
个配置文件被复制到工作节点上。
ps@worker-node:~$ sudo ls -lrt /var/lib/kubelet/seccomp/profiles
[sudo] password for ps:
total 12
-rw-r--r-- 1 root root 39 Sep 10 13:54 audit.json
-rw-r--r-- 1 root root 41 Sep 10 13:54 violation.json
-rw-r--r-- 1 root root 1657 Sep 10 13:54 fine-grained.json
ps@worker-node:~$
使用以下路径创建pod,注意路径是相对于/var/lib/kubelet/seccomp
.
apiVersion: v1
kind: Pod
metadata:
name: audit-pod
labels:
app: audit-pod
spec:
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/audit.json
containers:
- name: test-container
image: nginx
securityContext:
allowPrivilegeEscalation: false