Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在kubernetes中运行时,是否需要在Dockerfile中指定UID_Docker_Kubernetes - Fatal编程技术网

在kubernetes中运行时,是否需要在Dockerfile中指定UID

在kubernetes中运行时,是否需要在Dockerfile中指定UID,docker,kubernetes,Docker,Kubernetes,拥有此dockerfile: FROM debian:stretch CMD ["cat", "/tmp/secrets.txt"] 然后我就可以跑了 docker run -v /etc/shadow:/tmp/secrets.txt spycontainer 即使我不是root,我也能看到/etc/shadow 库伯内特斯是如何避免有人这样做的?我是否需要确保每个图像的dockerfile中都有UID???您可以使用的kubernetes 当您在没有任何安全上下文的情况下运行容器时,en

拥有此dockerfile:

FROM debian:stretch
CMD ["cat", "/tmp/secrets.txt"]
然后我就可以跑了

docker run -v /etc/shadow:/tmp/secrets.txt spycontainer
即使我不是root,我也能看到
/etc/shadow


库伯内特斯是如何避免有人这样做的?我是否需要确保每个图像的dockerfile中都有UID???

您可以使用的kubernetes

当您在没有任何安全上下文的情况下运行容器时,entrypoint命令将使用runasroot。比如说

$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 sh
$ 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

如果您像下面这样使用安全上下文

spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
使用
runAsUser
可以修改容器内进程的用户id。比如说

$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 sh
$ 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


在kubernetes中,您可以使用

当您在没有任何安全上下文的情况下运行容器时,entrypoint命令将使用runasroot。比如说

$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 sh
$ 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

如果您像下面这样使用安全上下文

spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
使用
runAsUser
可以修改容器内进程的用户id。比如说

$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 sh
$ 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


(您可以显式指定
-u 0
以强制容器以用户ID 0[根]运行,即使映像具有备用
用户
;您也可以使用相同的技术编辑主机文件。这是Docker默认情况下需要
sudo
访问的关键原因。)我不需要在笔记本电脑中执行
sudo
,即可运行上一个容器。这让我很惊讶。我没有对卷影文件执行cat的权限,但我可以使用我发布的示例执行此操作(您可以显式指定
-u 0
,以强制容器使用用户ID 0[root]运行),即使图像有一个备用的
用户
;您也可以使用相同的技术来编辑主机文件。这是Docker默认需要
sudo
访问的一个关键原因。)我不需要在笔记本电脑中运行上一个容器。这让我很惊讶。我没有权限对卷影文件执行cat,但我可以使用我发布的示例执行此操作