1

我在使用 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 文件,我试图seccomp_profile在 CRI-O 的配置部分中设置绝对路径,但不是......这不是解决方案......

有没有人有想法...?

问候,

4

1 回答 1

1

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

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

可以通过 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> 通过 --seccomp-profile-root Kubelet 上的标志定义。

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 应用于容器进程来为自己管理一个解决方法。

于 2020-04-21T12:11:44.883 回答