kubernetes использует постоянные тома nfs с пользователем root в модуле
Хорошо, я бьюсь головой об стену в течение нескольких дней...
Мой пример использования: я нахожусь в своем собственном облаке, работаю на Ubuntu и настраиваю kubernetes на 4 машинах, один мастер 3 рабочих. Я создал личный реестр и сертификат-менеджер и т. Д.
также акции NFS находятся на рабочих узлах
У меня есть часть программного обеспечения, которая должна запускаться с правами суперпользователя внутри модуля. Теперь я хочу, чтобы этот пользователь root сохранял данные на постоянном томе в общей папке nfs.
root_squash кусает меня, но...
Я создал тома и претензии, и все работает нормально, если я не root в модуле. когда root файлы в общих ресурсах nfs никому не нужны: nogroup и пользователь root внутри модуля больше не могут их использовать...
что делать?
1) экспортировать общий ресурс nfs с опцией no_root_squash, но это кажется очень плохой идеей, учитывая проблемы с безопасностью, не уверены, что это можно исправить с помощью одних правил брандмауэра?
2) я использую всевозможные опции securityContext для опций монтирования fsGroup и uid en gid, все работает нормально, пока вы не являетесь пользователем root в de pod... но я не уверен, полностью ли я это понимаю,
Мой пк ямл:
apiVersion: v1
kind: PersistentVolume
metadata:
name: s03-pv0004
annotations:
pv.beta.kubernetes.io/gid: "1023"
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /data/k8s/pv0004
server: 212.114.120.61
Как вы видите, я создал выделенный nfsuser с uid 1023 и использую его для хранения данных в модулях, так как этот пользователь... работает нормально, пока я не root в модулях...
Модули, которые я использую, являются модулями MarkLogic в наборе с состоянием, например:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: marklogic
namespace: default
spec:
selector:
matchLabels:
app: marklogic
serviceName: "ml-service"
replicas: 3
template:
metadata:
labels:
app: marklogic
spec:
securityContext:
fsGroup: 1023
... more
runAsUser: 1023 работает, но снова нет, если я хочу быть пользователем root внутри модуля...
Мой вопрос: это можно сделать, запустить модуль от имени root и по-прежнему использовать nfs в качестве постоянного тома с защищенным общим ресурсом nfs (который не использует no_root_squash)???
или мне нужно отбросить идею nfs и перейти на альтернативу, такую как glusterfs?
2 ответа
Я постараюсь ответить очень простыми шагами:
1. Вы даже можете заставить root_squash работать на k8s:
- run your containers as non root user: 1023 in your case
- chown -R 1023:1023 <nfs dir>
2. Вы можете заставить no_root_squash работать на k8s:
- run your containers as root user: 0
- chown -R root:root <nfs dir>
Я перешел из хранилища nfs в локальное хранилище в kubernetes. Это может быть аннотировано, так что модуль, которому нужен PV, приземляется на тот же узел каждый раз, когда он воссоздается