NFS 클라이언트가 공유 폴더에 파일을 생성하려고 할 때 허용되지 않는 작업이 발생합니다. 서버와 클라이언트가 모두 컨테이너에 있습니다.

NFS 클라이언트가 공유 폴더에 파일을 생성하려고 할 때 허용되지 않는 작업이 발생합니다. 서버와 클라이언트가 모두 컨테이너에 있습니다.

구글링을 많이 해보니 비슷한 사례가 꽤 있었습니다. 그러나 그 중 어느 것도 내 상황에는 적용되지 않습니다. 맥과 관련이 있는지는 모르겠습니다.

내 문제를 가능한 한 명확하게 설명하려고 노력하겠습니다.

  • KIND를 사용하여 3개의 노드가 있는 로컬 Kubernetes 클러스터를 실행하고 있습니다. /data/k8s로컬 MacOS에서 마스터 노드에 볼륨을 마운트합니다 ./tmp/k8s
  • 마스터 노드에 NFS 서버를 생성하고 내보냅니다./data/k8s
  • 또한 NFS 클라이언트로 슬레이브 노드에 NFS를 설치하고 마스터 노드를 /data/k8s슬레이브 노드에 로컬로 마운트했습니다./data/k8s

문제는 이것이다:

  • 문제 없이 마스터 노드에서 모든 것이 잘 실행됩니다.
  • 슬레이브 노드에서 CANNOT일반 파일을 생성하는 동시에 폴더를 생성할 수 있습니다.
  • 슬레이브 노드에서는 CAN마스터 노드에서 생성된 모든 파일을 수정합니다.
  • 마스터 노드에서 생성된 모든 파일은 문제 없이 슬레이브 노드에서 동기화될 수 있습니다.

다음은 몇 가지 정보입니다.

  • 운영 체제(마스터 및 슬레이브 동일)
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
  • 마스터 노드에 대한 마운트 정보(원래 호스트 MacOS에서 마운트된 공간)
root@test2-control-plane:/data/k8s# mount | grep /data
grpcfuse on /data/k8s type fuse.grpcfuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
  • 마스터 노드의 설정 내보내기
/data/k8s/ *(fsid=0,rw,sync,no_root_squash)
  • 마스터 노드의 etab 정보
*(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,fsid=0,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
  • 마스터 노드의 권한 정보
root@test2-control-plane:/data/k8s# ls -al
total 24
drwxrwxrwx 7 root root  224 Dec 25 01:50 .
drwxrwxrwx 3 root root 4096 Dec 24 12:33 ..
  • 노드에서 정보 마운트
root@test2-worker:/data/k8s# mount | grep /data
172.18.0.4:/data/k8s on /data/k8s type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.18.0.4,mountvers=3,mountport=45257,mountproto=udp,local_lock=all,addr=172.18.0.4)
  • 슬레이브 노드의 권한 정보
root@test2-worker:/data/k8s# ls -al
total 24
drwxrwxrwx 8 root root  256 Dec 25 02:17 .
drwxrwxrwx 3 root root 4096 Dec 24 13:23 ..
  • 내가 시도한 것:
    • SELinux를 확인했습니다.
    root@test2-control-plane:/data/k8s# sestatus
    SELinux status:                 disabled
    
    • 마스터 노드와 슬레이브 노드에서 특정 사용자를 추가 all_squash하고 동일한 user_id와 group_id로 사용자를 정의해 보았습니다 . 그런 다음 내 슬레이브 노드에 정의된 사용자로 전환합니다.anonuidanongid
    • 너무 많이 시도해서 기억이 나지 않습니다.

나는 이것이 특정한 경우일 수 있다는 것을 알고 있습니다. 누구든지 도와주실 수 있다면 감사하겠습니다.

답변1

Docker Desktop을 사용하여 K8을 로컬로 실행하는 것과 똑같은 문제가 발생했습니다.

  • macOS 빅서 11.1
  • 도커 v20.10.5
  • k8s v1.19.7

나는 이 동작에 혼란스러워서 이를 처리할 호스트 시스템 OS 권한이 없는 경우 어떤 차이가 있는지 확인하기 위해 hostPath 볼륨을 emptyDir로 바꾸기로 결정했습니다. 어떤 이유로든 작동했기 때문에 컨테이너가 시작/중지될 때 호스트 시스템에서 파일을 로드/저장하기 위해 NFS 서버의 emptyDir 및 일부 수명 주기 후크를 사용하여 해결 방법을 구축했습니다.

코드는 다음과 같습니다.https://github.com/tonomychaelson/k8s-nfs-eration-not-permittied-workaround

NFS 서버가 클라이언트가 아닌 호스트 경로 볼륨에 파일을 생성하는 방법은 매우 이상합니다. 그러나 이는 로컬 개발자에게만 적용되므로 이에 많은 시간을 소비하고 싶지 않습니다. 또한 클라우드의 솔루션은 절대 HostPath를 사용하지 않습니다.

건배, 토니

관련 정보