TL; DR: у меня проблемы с монтированием NFS внутри стручка Kubernetes

Когда я пытаюсь смонтировать /exports из NFS-сервиса, я получаю сообщение об ошибке, что он защищен от записи, когда (rw) указан в /etc/exports

Сначала я создал диск GCP для монтирования, так как вычислительные диски PV gcloud compute disks create --size=50GB --zone=us-central1-a nfs-disk

Затем я kubectl apply -f следующие две конфигурации.

NFS_Deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nfs-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-server
  template:
    metadata:
      labels:
        app: nfs-server
    spec:
      containers:
      - name: nfs-server
        image: gcr.io/google_containers/volume-nfs:0.8
        ports:
          - name: nfs
            containerPort: 2049
          - name: mountd
            containerPort: 20048
          - name: rpcbind
            containerPort: 111
        securityContext:
          privileged: true
        volumeMounts:
          - mountPath: /exports
            name: nfs-disk
      volumes:
        - name: nfs-disk
          gcePersistentDisk:
            pdName: nfs-disk
            fsType: ext4

NFS_Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nfs-service
spec:
  clusterIP: 10.27.254.55
  ports:
    - name: nfs
      port: 2049
    - name: mountd
      port: 20048
    - name: rpcbind
      port: 111
  selector:
    app: nfs-server

Это приводит к следующему /etc/exports внутри контейнера nfs-server

[root@nfs-server-85546b8c7b-jlzc5 /]# cat /etc/exports
/exports *(rw,fsid=0,insecure,no_root_squash)
/ *(rw,fsid=0,insecure,no_root_squash)

После этого я запускаю временный контейнер только для проверки с помощью следующей команды kubectl run --rm -it --image=markeijsermans/debug:kitchen-sink debug /bin/bash * Используемое изображение - это просто изображение для устранения неполадок, которое я нашел , У меня точно такая же проблема с каждым изображением, которое я пробовал, включая Ubuntu и fedora

Когда я пытаюсь смонтировать nfs внутри контейнера отладки (в том же кластере), я получаю следующую ошибку

(22:54 debug-7dcc5cd59f-496fd:/) mkdir /test 
(22:54 debug-7dcc5cd59f-496fd:/) chmod -R 777 /test/
(22:54 debug-7dcc5cd59f-496fd:/) mount -t nfs nfs-service.default.svc.cluster.local:/exports /test/
mount: nfs-service.default.svc.cluster.local:/exports is write-protected, mounting read-only
mount: cannot mount nfs-service.default.svc.cluster.local:/exports read-only
(32 22:54 debug-7dcc5cd59f-496fd:/) mount -t nfs 10.27.254.55:/exports /test/                                 
mount: 10.27.254.55:/exports is write-protected, mounting read-only
mount: cannot mount 10.27.254.55:/exports read-only
(32 22:55 debug-7dcc5cd59f-496fd:/) mount -t nfs nfs-service:/exports /test/                                  
mount: nfs-service:/exports is write-protected, mounting read-only
mount: cannot mount nfs-service:/exports read-only
(32 22:55 debug-7dcc5cd59f-496fd:/) 

Изменить: я должен упомянуть здесь, что я могу успешно смонтировать /exports от localhost, если я kubectl exec -it nfs-server-xxxxxxx /bin/bash .

^^^^ Это проблема, которую я пытаюсь решить

Любопытно, что я могу использовать сервер NFS в качестве PV и PVC. Чтобы продемонстрировать, следующее yaml развертывается и может быть успешно использовано

NFS_Volume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: nfs-service.default.svc.cluster.local
    path: "/"

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi

Это может быть доказано и протестировано с помощью следующего ReplicationController

_NFS_Test_PV.yaml

# This mounts the nfs volume claim into /mnt and continuously
# overwrites /mnt/index.html with the time and hostname of the pod.

apiVersion: v1
kind: ReplicationController
metadata:
  name: nfs-busybox
spec:
  replicas: 2
  selector:
    name: nfs-busybox
  template:
    metadata:
      labels:
        name: nfs-busybox
    spec:
      containers:
      - image: busybox
        command:
          - sh
          - -c
          - 'while true; do date > /mnt/index.html; hostname >> /mnt/index.html; sleep $(($RANDOM % 5 + 5)); done'
        imagePullPolicy: IfNotPresent
        name: busybox
        volumeMounts:
          - name: nfs
            mountPath: "/mnt"
      volumes:
      - name: nfs
        persistentVolumeClaim:
          claimName: nfs

0