【问题标题】:configMap volumes are not allowed to be used不允许使用 configMap 卷
【发布时间】:2021-10-08 13:21:44
【问题描述】:

我正在使用 OKD4,我正在尝试使用 ConfigMap 在我的 pod 中挂载 /etc/php.ini。 为此,我在我的项目中创建了以下 K8S 对象。

Configmap(之前为 Deployment 创建):

  - apiVersion: v1
    kind: ConfigMap
    data:
      php.ini: |-
        [PHP]

        ;;;;;;;;;;;;;;;;;;;
        ; About php.ini   ;
        ;;;;;;;;;;;;;;;;;;;

    metadata:
      name: php-ini

部署对象:

  - kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: privatebin
      labels:
        app: privatebin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: privatebin
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: privatebin
            deploymentconfig: privatebin
        spec:
          containers:
            - name: privatebin
              image: <my container registry>/privatebin:${IMAGE_TAG}
              volumeMounts:
              - name: config-volume
                mountPath: php.ini
              livenessProbe:
                exec:
                  command:
                  - /bin/sh
                  - -c
                  - "[ -f /run/nginx.pid ] && ps -C nginx >/dev/null 2>&1 && ps -C php-fpm >/dev/null 2>&1"
                initialDelaySeconds: 10
                periodSeconds: 5
              readinessProbe: 
                httpGet: 
                  scheme: HTTP
                  path: /
                  port: 8080
                  initialDelaySeconds: 10
                  periodSeconds: 5
              ports:
                - containerPort: 8080
                  protocol: TCP
              resources: 
                limits:
                  cpu: "250m" # parameterize in tekton pipeline 
                  memory: "368Mi" # parameterize in tekton pipeline, maybe using template
                requests:
                  cpu: "100m" # parameterize in tekton pipeline, maybe using template
                  memory: "256Mi" # parameterize in tekton pipeline, maybe using template
              securityContext:
                runAsUser: 1000
                fsGroup: 1000
                fsGroupChangePolicy: "OnRootMismatch"
              imagePullPolicy: Always
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
          volumes:
            - name: config-volume
              configMap:
                name: php-ini
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxUnavailable: 25%
          maxSurge: 25%

由于某种原因,我的 pod 丢失并且出现以下错误:

  • lastTransitionTime: "2021-10-08T12:53:01Z" 上次更新时间:“2021-10-08T12:53:01Z” 消息:'pods“privatebin-55678c66c5-”被禁止:无法验证 任何安全上下文约束:[spec.containers[0].securityContext.runAsUser: 无效值:1000:必须在范围内:[1002460000, 1002469999] spec.volumes[0]: 无效值:“configMap”:不允许使用 configMap 卷]'

ReplicaSet 也会出现类似的错误: 地位: 条件:

  • lastTransitionTime: "2021-10-08T12:53:01Z" 消息:'pods“privatebin-55678c66c5-”被禁止:无法验证 任何安全上下文约束:[spec.containers[0].securityContext.runAsUser: 无效值:1000:必须在范围内:[1002460000, 1002469999] spec.volumes[0]: 无效值:“configMap”:不允许使用 configMap 卷]'

为什么我不能挂载 ConfigMap?是因为Deployment中的Securitycontext吗?

提前致谢,

【问题讨论】:

    标签: kubernetes openshift openshift-origin configmap


    【解决方案1】:

    (该错误与 configmaps 无关,但是当您解决错误后,您可能需要稍微调整您的 configmap 以准确地将文件放到您希望它登陆的目录中。)

    OKD 是 OpenShift,所以它使用 SCC(不是 PSP)。

    默认情况下,您可以访问命名空间中的“受限”SCC。错误中抛出的 UID 来自命名空间注释(oc get namespace FOO -o yaml)将显示它们。

    修复:

    • 您可以更改您的 runAsUser 以匹配命名空间注释;或者(更好)只使用“runAsNonRoot:true”,这会强制它不以 root 身份运行并采用该注释范围内的第一个 uid。您可能需要更新容器映像以利用 GROUP 成员身份而非 uid 来获得文件访问权限。
    • 您可以允许您的帐户使用“非root” SCC 作为任何 uid 运行,以满足您以 uid=1000 运行的期望。我建议您将第一个选项视为更可取的选项。

    【讨论】:

      【解决方案2】:

      您的集群安装了一个拒绝您的规范的 pod 安全策略。您可以使用kubectl get psp 获取psp,然后使用kubectl describe psp &lt;name&gt; 检查设置。查看设置volumesrunAsUser

      【讨论】:

        猜你喜欢
        • 2020-03-06
        • 2023-01-10
        • 1970-01-01
        • 2021-08-05
        • 2012-10-24
        • 1970-01-01
        • 2018-12-07
        • 2021-06-26
        • 2020-12-26
        相关资源
        最近更新 更多