상세 컨텐츠

본문 제목

NFS + DNS 구성으로 Kubernetes 인프라 안정화하기

AWS CLOUD SCHOOL 9기

by AI Engineer crystal 2025. 4. 18. 13:57

본문

Kubernetes에서 애플리케이션 배포의 안정성내부 통신의 효율성을 높이기 위해, 이번 포스팅에서는 다음 두 가지를 다룹니다.

  • NFS를 활용한 Pod의 영속 데이터 저장 (동적 프로비저닝)
  • DNS 서버를 이용한 내부 도메인 네임 매핑

✅ 목표 요약

🔒 NFS Pod의 영속 데이터를 위한 동적 PV 프로비저닝
🌐 DNS Harbor 도메인 hub.aws9.pri, Ingress용 www.aws9.pri 등 내부 도메인 매핑 구성

📦 NFS로 동적 프로비저닝 하기

Kubernetes에서 PersistentVolumeClaim(PVC)만 생성하면 자동으로 PersistentVolume(PV)이 생성되도록 하기 위해, 다음 순서를 따라 진행합니다.


1. NFS 서버 구축 (Rocky Linux 9)

dnf -y install nfs-utils
# /etc/exports 수정
/shared *(rw,sync,no_root_squash)

chmod 707 /shared
systemctl restart nfs-server
systemctl enable nfs-server
exportfs -v
systemctl stop firewalld  # 내부망이라 보안은 생략

2. NFS 클라이언트 설정 (Ubuntu 기준)

sudo apt update
sudo apt install nfs-common -y

showmount -e <NFS서버_IP>

mkdir -p ~/remote
sudo mount -t nfs <NFS서버_IP>:/shared ~/remote

touch ~/remote/test.txt

부팅 시 자동 마운트를 위해 /etc/fstab에 아래 내용 추가:

<NFS서버_IP>:/shared /home/ubuntu/remote nfs defaults 0 0

3. Kubernetes에 NFS-CSI 드라이버 설치

git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
cd csi-driver-nfs
./deploy/install-driver.sh v4.7.0 local

4. StorageClass 정의

# nfs-csi.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dev1-sc
mountOptions:
  - nfsvers=4.2
parameters:
  server: 211.183.3.99
  share: /shared
provisioner: nfs.csi.k8s.io
reclaimPolicy: Delete
kubectl apply -f nfs-csi.yml

5. 동적 프로비저닝 테스트

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: dev1-sc
  resources:
    requests:
      storage: 1Gi

PVC 생성 → 자동으로 PV 생성 → Pod와 연동 가능


🌐 내부 DNS 서버 설정

Harbor, Ingress 등에 도메인을 부여해 사람이 읽기 좋은 방식으로 접근할 수 있도록 합니다.


1. BIND 기반 네임 서버 설치 (캐싱 전용)

dnf -y install bind bind-chroot

/etc/named.conf 설정 예시:

listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
allow-query     { any; };
dnssec-validation no;
systemctl restart named
systemctl enable named

2. Forward Zone 설정 (도메인 → IP 매핑)

# /etc/named.conf 마지막에 추가
zone "aws9.pri" IN {
    type master;
    file "aws9.pri.db";
    allow-update { none; };
};

/var/named/aws9.pri.db 예시:

$TTL    3H
@       SOA     @       root.   ( 2 1D 1H 1W 1H )
        IN      NS      @
        IN      A       211.183.3.99

www     IN      A       211.183.3.202  ; Ingress
hub     IN      A       211.183.3.98   ; Harbor

3. 도메인 확인

named-checkconf
named-checkzone aws9.pri aws9.pri.db
systemctl restart named

4. 클라이언트에서 네임서버 설정

/etc/resolv.conf 파일에 추가:

nameserver 211.183.3.99

테스트:

dig @211.183.3.99 www.aws9.pri
nslookup hub.aws9.pri

 

관련글 더보기