【问题标题】:Kubernetes runAsNonRoot failing: CreateContainerConfigErrorKubernetes runAsNonRoot 失败:CreateContainerConfigError
【发布时间】:2019-05-25 17:39:46
【问题描述】:

我在我的 pod 中添加了一个安全上下文,如下所示:

spec:
  securityContext:
    runAsNonRoot: true

在运行 pod 时,我收到错误消息 (kubectl get pod pod-name -o=yaml):

容器有 runAsNonRoot 并且图像有非数字用户(默认), 无法验证用户是非 root 用户

该消息很直观,但是在阅读此kubernetes blog 之后,在我看来它应该非常直截了当,我在这里缺少什么?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    仅当您的 uid == nil 时才会出现此错误。根据错误文本,我们需要设置一个数字用户值。

    因此,对于 UID=1000 的用户,您可以在 pod 定义中执行此操作,例如:

    securityContext:
      runAsUser: 1000
    

    所以你的securityContext 应该是这样的:

    securityContext:
      fsGroup: 2000
      runAsNonRoot: true
      runAsUser: 1000
    

    查看官方文档here

    【讨论】:

    • 但是 pod 应该有UID 999 的用户?
    • 我也确实看到了这个属性 spec: runAsUser: rule: MustRunAsNonRoot 这是否有助于以非 root 身份运行容器?
    • 这是 linux 用户 uid。如果你想在你的linux系统中以centos用户的身份运行pod,你需要提供centos用户的uid。您可以使用 id -u <user_name> 找到 uid
    • 是的,我正在使用 centos,如果您的意思是登录 pod 并获取用户 ID,那么我使用 HELM 提供 securityContext 并且在部署时是不可行的我不知道pod 是否会有那个用户ID。
    • 但似乎MustRunAsNonRoot 有效。根据kubernetesgithub.com/kubernetes/kubernetes/blob/master/pkg/apis/policy/…的代码
    【解决方案2】:

    您可以按如下方式添加securityContext:

    spec:
      runAsUser:
        rule: MustRunAsNonRoot
      containers:
        - name: <container-name>
    

    这可以通过Kubernetes code确认

    【讨论】:

    • 这不是您所指的securityContext,而是PodSecurityPolicy。这解决了您的问题吗?
    • 并非如此,它禁用了权限提升,但不确定容器是否以非 root 用户身份运行。
    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2016-07-13
    • 2020-01-10
    相关资源
    最近更新 更多