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, приземляется на тот же узел каждый раз, когда он воссоздается

Другие вопросы по тегам