Тома конфигурационной карты не разрешены к использованию

#kubernetes #openshift #openshift-origin #configmap

Вопрос:

Я использую OKD4 и пытаюсь смонтировать файл /etc/php.ini в своих модулях с помощью конфигурационной карты. Для этого я создаю в своем проекте следующие объекты K8S.

Карта конфигурации (ранее созданная для развертывания):

   - 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 ] amp;amp; ps -C nginx >/dev/null 2>amp;1 amp;amp; ps -C php-fpm >/dev/null 2>amp;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%
 

По какой-то причине мои модули отсутствуют, и есть следующие ошибки:

  • lastTransitionTime: «2021-10-08T12:53:01Z» lastUpdateTime: «2021-10-08T12:53:01Z» сообщение: «модули» privatebin-55678c66c5 — «запрещено: не удается проверить с помощью какого-либо ограничения контекста безопасности: [спецификации.контейнеры[0].SecurityContext.RunAsUser: Недопустимое значение: 1000: должно находиться в диапазонах: [1002460000, 1002469999] спецификации.тома[0]: Недопустимое значение:» ConfigMap»: использовать тома ConfigMap не разрешается]’

Время ожидания набора реплик также истекло с аналогичной ошибкой: состояние: условия:

  • lastTransitionTime: «2021-10-08T12:53:01Z» сообщение: «модули «privatebin-55678c66c5-» запрещено: не удается выполнить проверку на соответствие каким-либо ограничениям контекста безопасности: [спецификации контейнеров[0]. SecurityContext.RunAsUser: Недопустимое значение: 1000: должно находиться в диапазонах: [1002460000, 1002469999] спецификации томов[0]: Недопустимое значение: «Карта конфигурации»: тома конфигурации не разрешены к использованию]»

Почему я не могу смонтировать карту конфигурации? Связано ли это с контекстом безопасности в развертывании?

Заранее спасибо,

Ответ №1:

(Ошибка не имеет ничего общего с конфигурационными картами, но когда вы устраните ошибку, вам, возможно, потребуется немного изменить свою конфигурационную карту, чтобы точно поместить файл в каталог, в который вы хотите его поместить.)

OKD-это OpenShift, поэтому он использует SCC (не PSP).

По умолчанию у вас есть доступ к «ограниченному» SCC в вашем пространстве имен. Идентификаторы, которые выбрасываются при ошибке, взяты из аннотации пространства имен (oc get namespace FOO -o yaml), которая покажет их.

Чинить:

  • вы можете изменить свой пользователь RunAsUser в соответствии с аннотацией пространства имен; или (лучше) просто используйте «runAsNonRoot: true», который заставляет его не запускаться от имени root и принимает первый идентификатор uid в этом диапазоне аннотаций. Возможно, вам потребуется обновить образ контейнера, чтобы использовать членство в ГРУППЕ, а не uid, для разрешений на доступ к файлам.
  • вы можете разрешить своим учетным записям использовать SCC «некорневой» для запуска от имени любого uid, что соответствует вашим ожиданиям запуска от имени uid=1000. Я бы посоветовал вам рассмотреть первый вариант как наиболее предпочтительный.

Ответ №2:

Ваш кластер установлен с политикой безопасности pod, которая отклоняет ваши спецификации. Вы можете получить psp kubectl get psp , а затем проверить настройки kubectl describe psp <name> . Посмотрите на настройки volumes и runAsUser .