Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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 使用init容器更改PV上的权限时权限被拒绝_Kubernetes_Openshift - Fatal编程技术网

Kubernetes 使用init容器更改PV上的权限时权限被拒绝

Kubernetes 使用init容器更改PV上的权限时权限被拒绝,kubernetes,openshift,Kubernetes,Openshift,我正在尝试在OpenShift上运行部署配置。我的部署配置的一部分运行一个init容器,该容器使用chown在持久卷上设置权限。当init容器启动时,它失败,日志打印出“权限被拒绝” 这是我的init容器: - apiVersion: v1 kind: DeploymentConfig metadata: name: ${NAME}-primary namespace: ${NAMESPACE} spec: repli

我正在尝试在OpenShift上运行部署配置。我的部署配置的一部分运行一个init容器,该容器使用chown在持久卷上设置权限。当init容器启动时,它失败,日志打印出“权限被拒绝”

这是我的init容器:

  - 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的行为。讨论这一点的文档可在章节中找到