【问题标题】:Failed to create pod sandbox: rpc error: code = Unknown desc = seccomp is not enabled in your kernel, cannot run with a profile无法创建 pod 沙箱:rpc 错误:code = Unknown desc = seccomp 在您的内核中未启用,无法使用配置文件运行
【发布时间】:2020-07-18 09:09:25
【问题描述】:

我在使用 kube 和 Cri-o 时遇到问题。 实际上我正在部署一个 kube 集群,我只是不想部署仪表板。 我安装了 CRIO 而不是 Docker(生产环境中的 RHEL8)。 “describe pod”命令的输出日志是:

Events:
  Type     Reason                  Age                 From                   Message
  ----     ------                  ----                ----                   -------
  Normal   Scheduled               11m                 default-scheduler      Successfully assigned kubernetes-dashboard/dashboard-metrics-scraper-6b4884c9d5-fwdv9 to worker-node1
  Warning  FailedCreatePodSandBox  95s (x48 over 11m)  kubelet, worker-node1  Failed to create pod sandbox: rpc error: code = Unknown desc = seccomp is not enabled in your kernel, cannot run with a profile

我试过这个:grep SECCOMP /boot/config-$(uname -r)

CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y

有了这些回报,我认为这是启用的......

在我安装 kube 的过程中,我在我的系统中找到了一个 seccomp.json 文件,我尝试在 CRI-O 的配置中的 seccomp_profile 部分设置绝对路径,但不是......解决方案...

有没有人有想法...?

问候,

【问题讨论】:

  • 您使用的是哪个版本的 CRI-O,您是如何安装 k8s 的?
  • 您好,感谢您的回复。我在他们的 Github (github.com/cri-o/cri-o) 上使用最新版本的 CRI-O,我使用 Kube 的官方文档从这里安装 Kubeadm (kubectl, kubelet):kubernetes.io/docs/setup/production-environment/tools/kubeadm/…
  • 我实际上找到了解决方法。我已经下载了推荐的.yaml 仪表板文件,只需将seccomp.security.alpha.kubernetes.io/pod: runtime/default 修改为seccomp.security.alpha.kubernetes.io/pod: unconfined,我的仪表板似乎已经启动了 2 小时。感谢您的回复,祝您有美好的一天:)
  • 很高兴您解决了这个问题,请考虑添加更多详细信息并将其发布为答案。这可能对遇到同样问题的其他人有所帮助。

标签: kubernetes seccomp cri-o


【解决方案1】:

Kubernetes Dashboard Deployment yaml seccomp 默认设置为seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'

这意味着它使用默认的容器运行时配置文件,我们可以阅读 here

可以通过 PodSecurityPolicy 上的注释来控制 pod 中 seccomp 配置文件的使用。 Seccomp 是 Kubernetes 中的一个 alpha 功能。

seccomp.security.alpha.kubernetes.io/defaultProfileName - 指定要应用于容器的默认 seccomp 配置文件的注释。可能的值是:

  • unconfined - 如果没有提供替代方案,Seccomp 不会应用于容器进程(这是 Kubernetes 中的默认设置)。
  • runtime/default - 使用默认容器运行时配置文件。
  • docker/default - 使用 Docker 默认的 seccomp 配置文件。自 Kubernetes 1.11 起已弃用。请改用runtime/default
  • localhost/<path> - 将配置文件指定为位于 <seccomp_root>/<path> 的节点上的文件,其中 <seccomp_root> 是通过 Kubelet 上的 --seccomp-profile-root 标志定义的。

Unexpected behavior with empty seccomp profile 存在 github 问题。 在@saschagrunert的讨论中提到:

... 一般来说,我无法找到以下任何概括性描述:

  • 如果为 pod 指定了配置文件,它也适用于所有容器
    (目前仅 seccomp 支持)
  • 如果为容器指定了配置文件,它将覆盖 pod 配置文件
  • 我们始终默认为runtime/default

我真的很想从安全角度执行此操作,并将其正确记录在此存储库内的专用安全部分中。 WDYT?

顺便说一句,我们可能应该推动 seccomp 和 AppArmor 的 GA 毕业,以在 securityContext 中获得一流的 API,就像我们为 SELinux 所做的那样。见:https://kubernetes.io/docs/tutorials/clusters/apparmor/#upgrade-path-to-general-availability

正如@CptBuko 已经提到的,他通过设置seccomp.security.alpha.kubernetes.io/pod: unconfined 为自己管理了一个解决方法,该seccomp.security.alpha.kubernetes.io/pod: unconfined 不会将seccomp 应用于容器进程。

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 2021-04-02
    • 2023-01-03
    • 2018-07-04
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多