首页 > 解决方案 > 如何在 Kubernetes 中禁用 runasNonRoot

问题描述

这是在我的部署 YAML 文件中:

     readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 10001

我必须进行哪些更改才能安装 python:

kubectl exec -it carts-66bc68f95f-8wjgx -c carts -n sock-shop -- sh
/usr/src/app $ apk add python
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk database: Permission denied
/usr/src/app $ echo hello > sample.txt
sh: can't create sample.txt: Read-only file system
/usr/src/app $ 

标签: pythonkubernetes

解决方案


首先,我建议你从一个已经安装了 Python 的容器镜像开始。

默认情况下,你基本上不能从 Kubernetes shell 中。这是出于安全原因使用默认 PodsecurityContext设置而设计的readOnlyRootFilesystem: true。但是,您可以使用以下方法覆盖它:

securityContext:
          ...
          readOnlyRootFilesystem: false
          ...

请记住,使用此设置可能会受到集群中已设置的Pod 安全策略 (PSP)的限制。

另外,请注意 Pod 安全策略在 Kubernetes 1.25 中消失,取而代之的是PodSecurity Admission

或者,如果您正在运行 Docker,绕过此问题的一种方法是登录/SSH 到运行此 Pod 的机器。(您可能无法通过 SSH 连接到节点,具体取决于您的组织实施的安全控制措施)

找到有问题的容器:

$ docker ps -a | grep carts-66bc68f95f-8wjgx

然后以 root 身份执行到容器:

$ docker exec -it --user=root <container-name> bash
# apk add python

推荐阅读