首页 > 解决方案 > 在 kubernetes 中运行时是否需要在 Dockerfile 中指定 UID

问题描述

拥有这个 dockerfile:

FROM debian:stretch
CMD ["cat", "/tmp/secrets.txt"]

然后我可以运行

docker run -v /etc/shadow:/tmp/secrets.txt spycontainer

即使我不是root,我也能看到/etc/shadow

Kubernetes 如何避免有人这样做?我是否需要确保每个图像在 dockerfile 中都有 UID?

标签: dockerkubernetes

解决方案


在 kubernetes 中,您可以使用pod 安全上下文

当您在没有任何安全上下文的情况下运行容器时,带有 run as root的 entrypoint 命令。例如

$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 sh

如果您使用如下安全上下文

spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000

使用runAsUser您可以修改容器内进程的用户 ID。例如

$ kubectl apply -f https://k8s.io/examples/pods/security/security-context.yaml
$ kubectl exec -it security-context-demo -- sh
/ $ ps aux
PID   USER     TIME  COMMAND
    1 1000      0:00 sleep 1h
    6 1000      0:00 sh


推荐阅读