linux - 如何使用Kubernetes管理Linux用户?

标签 linux docker kubernetes

我想使用SecurityContext.RunAsUser保护我的集群。问题很简单:我应该使用哪个用户?
我知道容器内具有UID 1001(例如)的用户是主机上具有UID 1001的用户。那么,是否应该在所有主机上创建一个UID为1001且名为pod_user的用户,并强制所有Pod使用该用户?还是应该验证所有主机上都没有使用此UID的用户?我没有找到关于此的最佳做法指南。
关于Dockerfile,我有相同类型的问题:我应该在Dockerfile中使用特定UID声明用户,然后在SecurityContext.RunAsUser中重用它吗?一些正式镜像在Dockerfile中使用特定的硬编码用户运行,而其他一些则以无人运行。我发现了这个有趣的帖子,但没有明确的答案:Kubernetes: Linux user management

最佳答案

我的理想建议是:

  • 您的Dockerfile RUN adduser将创建一个非root用户,并在完成所有软件安装
  • 之后将USER切换到该用户。
  • 您无需在Kubernetes配置
  • 中明确指定用户ID
  • 不管用户名或数字ID是什么,或者是否与另一个容器或主机上存在的用户ID相同,只要数字uid不为0即可。

  • 唯一存在实际问题的地方是容器是否尝试将数据存储在卷中。同样,理想的情况是完全避免这种情况。如果可能的话,最好使用数据库或云存储。
    如果确实需要使用本地卷,则可以使用补充的fsGroup:专门使用configure a security policy。那是一个任意的数字组ID(不是用户ID),它将拥有卷中的文件,也将被添加到主容器进程的组列表中。
    apiVersion: v1
    kind: Pod
    spec:
      securityContext:
        fsGroup: 12345  # or any numeric gid
    
    根本不要使用hostPath卷:如果重新安排Pod的时间,则不能保证每个节点上的内容都是相同的;如果节点发生故障,仅位于该节点上的内容将丢失。

    关于linux - 如何使用Kubernetes管理Linux用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065725/

    相关文章:

    linux - yum 相当于在代理后面运行的 apt-get/etc/apt/apt.conf.d/95proxies 文件?

    amazon-web-services - 由于 EMI 问题,使用 aws vpc 的 ECS 服务无法启动

    docker - 如何从docker容器下载文件?

    docker - kubernetes,在一个容器中按容器共享卷

    rest - kubernetes 入口 TLS 验证和重定向问题

    linux - 在命令行(或项目文件以外的其他地方)指定对 xbuild 的引用

    linux - 授予 www-data 用户读取权限

    printf 中的条件语句

    amazon-web-services - 在 AWS Elastic Beanstalk 上使用 Docker 进行 Django 迁移

    labels - 配置复制 Controller 时如何要求每个 minion/kublet 一个 pod?