【问题标题】:kubernetes PodSecurityPolicy set to runAsNonRoot, container has runAsNonRoot and image has non-numeric user (appuser), cannot verify user is non-rootkubernetes PodSecurityPolicy 设置为 runAsNonRoot,容器有 runAsNonRoot 并且镜像有非数字用户(appuser),无法验证用户是非 root
【发布时间】:2018-09-18 02:32:59
【问题描述】:

kubernetes PodSecurityPolicy 设置为 runAsNonRoot,Pod 未启动后出现错误 Error: container has runAsNonRoot and image has non-numeric user (appuser), cannot verify user is non-root

我们正在 docker 容器中创建用户 (appuser) uid -> 999 和组 (appgroup) gid -> 999,并且我们正在使用该用户启动容器。

但是创建 pod 时抛出错误。

    Events:
      Type     Reason                 Age                From                           Message
      ----     ------                 ----               ----                           -------
      Normal   Scheduled              53s                default-scheduler              Successfully assigned app-578576fdc6-nfvcz to appmagent01
      Normal   SuccessfulMountVolume  52s                kubelet, appagent01  MountVolume.SetUp succeeded for volume "default-token-ksn46"
      Warning  DNSConfigForming       11s (x6 over 52s)  kubelet, appagent01  Search Line limits were exceeded, some search paths have been omitted, the applied search line is: app.svc.cluster.local svc.cluster.local cluster.local 
      Normal   Pulling                11s (x5 over 51s)  kubelet, appagent01  pulling image "app.dockerrepo.internal.com:5000/app:9f51e3e7ab91bb835d3b85f40cc8e6f31cdc2982"
      Normal   Pulled                 11s (x5 over 51s)  kubelet, appagent01  Successfully pulled image "app.dockerrepo.internal.com:5000/app:9f51e3e7ab91bb835d3b85f40cc8e6f31cdc2982"
      Warning  Failed                 11s (x5 over 51s)  kubelet, appagent01  Error: container has runAsNonRoot and image has non-numeric user (appuser), cannot verify user is non-root

.

【问题讨论】:

    标签: kubernetes kubernetes-security


    【解决方案1】:

    这里是验证的implementation

    case uid == nil && len(username) > 0:
        return fmt.Errorf("container has runAsNonRoot and image has non-numeric user (%s), cannot verify user is non-root", username)
    

    这里是validation call 的评论:

    // Verify RunAsNonRoot. Non-root verification only supports numeric user.
    if err := verifyRunAsNonRoot(pod, container, uid, username); err != nil {
        return nil, cleanupAction, err
    }
    

    如您所见,在您的案例中,该消息的唯一原因是 uid == nil。根据源码中的注释,我们需要设置一个数字用户值。

    因此,对于 UID=999 的用户,您可以在您的 pod 定义 like that 中执行此操作:

    securityContext:
        runAsUser: 999
    

    【讨论】:

    • 非常感谢。 Anton 提供了很多信息。我们将 uid 设置为 999,将用户名设置为我们的 appuser :) .. 将用户设置为 999 后,它起作用了 :) ..
    • 我假设 Dockerfile 中的用户也应该设置为非数字,即 USER 999?
    • 我认为您不需要将 Dockerfile 设置为非数字。我在 kube 上运行了一个具有“USER nonroot:nonroot”和“runAsUser:65533”(我选择的 uid 我是任意的)的第 3 方图像,它可以工作。
    猜你喜欢
    • 2019-01-03
    • 2019-05-25
    • 1970-01-01
    • 2022-12-15
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多