Kubernetes 使用init容器更改PV上的权限时权限被拒绝
我正在尝试在OpenShift上运行部署配置。我的部署配置的一部分运行一个init容器,该容器使用chown在持久卷上设置权限。当init容器启动时,它失败,日志打印出“权限被拒绝” 这是我的init容器:Kubernetes 使用init容器更改PV上的权限时权限被拒绝,kubernetes,openshift,Kubernetes,Openshift,我正在尝试在OpenShift上运行部署配置。我的部署配置的一部分运行一个init容器,该容器使用chown在持久卷上设置权限。当init容器启动时,它失败,日志打印出“权限被拒绝” 这是我的init容器: - apiVersion: v1 kind: DeploymentConfig metadata: name: ${NAME}-primary namespace: ${NAMESPACE} spec: repli
- apiVersion: v1
kind: DeploymentConfig
metadata:
name: ${NAME}-primary
namespace: ${NAMESPACE}
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
name: ${NAME}-primary
test-app: ${NAME}
spec:
serviceAccountName: ${SERVICE_ACCOUNT}
initContainers:
- name: set-volume-ownership
image: alpine:3.6
command: ["sh", "-c", "chown -R 1030:1030 /var/opt"]
volumeMounts:
- name: test-app-data
mountPath: /var/opt
我还在nfs挂载上设置了chmod 777,它包含我的持久卷
因此,我知道OpenShift默认情况下以随机UID的形式运行pod。我知道我可以将部署配置中的服务帐户添加到scc anyuid中,这将起作用,但我不想这样做,因为这是一个安全问题,我的群集管理员不允许这样做。我怎样才能避开这件事?我一直在阅读有关金融服务集团的文章,但对我来说,这些文章毫无意义。有什么意见吗?OpenShift文档在本节中对此进行了一些讨论 问题是您的init容器正在运行的用户没有该目录的写入权限
/var/opt
如果让initContainer运行id
命令,您将看到uid和gid应该是100000000+:0
这种情况下的典型策略是在运行时需要写入的任何位置向根组授予写入权限。这将允许运行时用户访问文件,因为尽管uid是随机生成的,但组始终为0
不幸的是,许多公共容器映像都有这种现成的配置设置
您可以在Red Hat base图像中看到这方面的示例。每个基本容器映像中都有一个烘焙的脚本,名为,它可以在应用程序/用户以后需要写入的任何位置运行
在上述情况下,以下代码用于调整权限,以便id为100000000+:0的后续任意用户可以对其进行写入
find $SYMLINK_OPT "$1" ${CHECK_OWNER} \! -gid 0 -exec chgrp 0 {} +
find $SYMLINK_OPT "$1" ${CHECK_OWNER} \! -perm -g+rw -exec chmod g+rw {} +
find $SYMLINK_OPT "$1" ${CHECK_OWNER} -perm /u+x -a \! -perm /g+x -exec chmod g+x {} +
find $SYMLINK_OPT "$1" ${CHECK_OWNER} -type d \! -perm /g+x -exec chmod g+x {} +
如果要在集群级别调整这些值,则UIDAllocatorRange的配置将在节和节中主主机上的master-config.yml中设置
还可以通过openshift.io/sa.scc.uid-range注释修改生成的uid的行为。讨论这一点的文档可在章节中找到