python - 如何在 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 $
解决方案
首先,我建议你从一个已经安装了 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
推荐阅读
- java - can't find the null pointer exception
- swift - How do i disable vertical scrolling but enable horizontal scrolling in collectionview swift 4?
- postgresql - 为 Postgres 分区创建自定义哈希运算符
- spring - 如果应用程序的 application.yaml 中存在配置组合,如何使 kotlin spring boot 应用程序失败
- sql-server - 从逗号分隔的字符串生成 XML + SQL Server
- mysql - 无法在 MySQL 中进行复杂查询
- c# - 多角色授权处理程序 - 仅获取方法角色
- mysql - 在 MySQL 数据库 8.0.17 中选择行日期之间的差异
- javascript - 如何通过内部键的值(在 JS 中)访问嵌套字典的对象?
- swift - 如何将 NSView 定位在另一个 NSView 下方?