kubernetes используют постоянные тома nfs с пользователем root в модуле

хорошо, я бьюсь головой об стену уже несколько дней ...

мой вариант использования: я нахожусь в собственном облаке с голым железом, я запускаю машины ubuntu и настраиваю кубернеты на 4 машинах, один мастер 3 рабочих. Я создал частный реестр и сертификат-менеджер и т. Д. И т. Д.

также общие ресурсы nfs находятся на рабочих узлах

У меня есть программное обеспечение, которое должно запускаться от имени пользователя root внутри модуля. Теперь я хочу, чтобы этот пользователь root сохранял данные на постоянном томе в общей папке nfs.

root_squash кусает меня в но ...

Я создал тома и претензии, и все работает нормально, если я не являюсь пользователем root внутри модуля. когда root файлы на общих ресурсах nfs не передаются никому: nogroup и пользователь root внутри модуля больше не может их использовать ...

что делать?

1) экспортировать общий ресурс nfs с параметром no_root_squash, но это кажется очень плохой идеей, учитывая проблемы с безопасностью, не уверен, что это можно смягчить только правилами брандмауэра?

2) Я использую все виды параметров securityContext для параметров монтирования fsGroup и uid en gid, все работает нормально, пока вы не являетесь пользователем root в de pod ... но я не уверен, что понимаю это полностью, поэтому

Мой компьютер yaml:

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 и использовал его, чтобы поды сохраняли данные от имени этого пользователя ... отлично работает, пока я не рутирован внутри подов ...

Я запускаю модули 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?


person Hugo Koopmans    schedule 23.11.2018    source источник
comment
У меня аналогичная настройка, и я лично использую no_root_squash, но, возможно, попробую использовать динамический инициатор клиента NFS: github.com/helm/charts/tree/master/stable/ Кажется, он создает файлы с разрешениями 0777 - хотя не уверен, как это отразится на вашем диске NFS: github.com/kubernetes-incubator/external-storage/blob/master/ Кроме того, вы можете указать IP-адреса клиентов для диска NFS в файле / etc / exports, так что imo no_root_squash не должно быть большой проблемой безопасности .   -  person Utku Özdemir    schedule 25.11.2018


Ответы (1)


Я перешел из хранилища nfs в вариант заявки на локальное хранилище в кубернетах. Это может быть аннотировано, чтобы модуль, которому требуется PV, попадал на один и тот же узел каждый раз, когда он воссоздается ...

person Hugo Koopmans    schedule 30.11.2018