NFS란 무엇인가요?
공유된 원격 호스트의 파일을 로컬에서 사용할 수 있도록 개발된 파일 시스템을 네트워크 파일 시스템(Network File System, NFS)이라고 합니다. 전통적인 유닉스 환경에서는 오랫동안 네트워크에서 자료를 공유하는 방법으로 NFS를 사용했습니다. NFS 서버가 파일을 공유하면 NFS 클라이언트가 공유한 디렉터리를 마운트해서 원격 호스트(NFS 서버)의 파일을 사용합니다.
NFS는 손쉽게 파일을 공유할 수 있다는 장점이 있지만 보안에 취약하다는 단점이 있습니다. NFS로 공유한 파일에는 일반적인 소유권과 접근 권한이 그대로 적용됩니다. 원격 시스템에서 어떤 사용자가 파일 소유자와 같은 UID로 공유 디렉터리에 접근해서 파일을 마음대로 사용할 수 있습니다. 루트 권한이 부여된 사용자가 공유 디렉터리에 접근한다면 더욱 위험합니다. NFS로 파일을 공유할 때는 보안에 특별히 신경 써야 합니다.
NFS 구축하기
NFS로 사용한 가상 머신(192.168.0.165)과 NFS를 마운트할 가상 머신(192.168.0.170), 총 2대를 준비합니다
가상 머신의 OS는 ubuntu20입니다.
NFS VM(192.168.0.165)
우선 NFS에 필요한 패키지를 설치해줍니다.
$ apt install nfs-common nfs-kernel-server portmap
NFS로 사용할 디렉터리를 생성한 후 권한을 777로 줍니다.
$ mkdir /home/nfs
$ chmod 777 /home/nfs/
공유하려는 디렉토리와 서버 설정을 해줍니다.
$ vim /etc/exports
vim 에디터로 exports 을 연 뒤 아래와 같이 디렉터리와 서버 설정을 해줍니다. 192.168.0.170에 가상머신에서 NFS를 사용할 수 있게 작성해줍니다.
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home/nfs 192.168.0.165(rw,sync,no_subtree_check) 192.168.0.170(ro,sync,no_subtree_check)
#<원하는 디렉토리> <공유 대상 장치(아이피)>(옵션1,옵션2)
#옵션1에는 ro(read-only), rw(read-write)등이 있음
작성 후 nfs-server를 재시작해줍니다.
$ service nfs-server restart
실행이 잘되었는지 확인해줍니다.
$ showmount -e 127.0.0.1
테스트 하기 위하여 /hom/nfs 경로에 임의의 파일을 만듭니다.
$ echo 'test' > /home/nfs/test.txt
NFS를 사용할 VM(192.168.0.170)
NFS 서버를 마운트합니다.
$ mount -t nfs 192.168.0.165:/home/nfs /mnt
NFS 서버에서 만든 test.txt가 존재하는지 확인합니다.
$ cat /mnt/test.txt
쿠버네티스에서 볼륨을 사용할 때 온프레미스 환경일 경우 NFS를 많이 사용하게 됩니다. 퍼블릭 클라우드 환경이라면 AWS에서 제공해주는 EFS를 이용하여 볼륨을 파드에 마운트 할 수 있습니다.
이상 NFS 서버 구축에 대해 알아보았습니다.
*추가
apiVersion: v1
kind: Pod
metadata:
name: nfs-httpd
spec:
containers:
- image: httpd
name: web
volumeMounts:
- mountPath: /usr/local/apache2/htdocs
name: nfs-volume
readOnly: true
volumes:
- name: nfs-volume
nfs:
server: 192.168.0.165
path: /home/nfs
참고로 파드에서 nfs를 볼륨으로 사용하고 싶다면 위와 같이 yaml 파일을 작성하시면 됩니다.