#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
.