Kubernetes에서 Pod 간에 데이터를 옮기는 가장 일반적인 방법은 공유 볼륨(PVC)을 사용하는 것입니다. 하지만 상황에 따라 중간 저장 없이 Pod에서 다른 Pod로 직접 데이터를 옮겨야 할 때도 있습니다. 이번 글에서는 같은 네임스페이스 내 Pod끼리 직접 데이터를 주고받는 실용적인 방법들을 소개합니다.
1. kubectl cp는 실제로는 "직접"이 아니다
많이 알려진 kubectl cp는 다음과 같은 방식으로 사용됩니다.
kubectl cp pod-a:/app/data/file.txt ./file.txt
kubectl cp ./file.txt pod-b:/app/data/
하지만 이 방식은 실제로는 로컬 PC를 거칩니다. 즉, Pod A → 로컬 → Pod B의 흐름이기 때문에 '직접' 옮긴다고 보기 어렵고, 자동화나 실시간 처리에도 적합하지 않습니다.
2. 진짜 직접 전송하려면? 네트워크를 활용하자
같은 네임스페이스에 있는 Pod들은 기본적으로 서로 DNS로 통신이 가능합니다. 이를 활용하면 한 Pod에서 다른 Pod로 HTTP, scp, curl 등을 통해 데이터를 직접 전송할 수 있습니다.
방법 1. Python HTTP 서버 + curl로 파일 전송
가장 간단하면서도 실용적인 방법입니다.
Pod B에서 Python HTTP 서버 열기
Pod B에 접속해서 다음 명령어를 실행합니다.
python3 -m http.server 8080 --directory /data
이렇게 하면 /data 디렉토리에 대해 HTTP 파일 서버가 열립니다.
Pod A에서 파일 전송
Pod A에 접속해서 curl 명령어로 파일을 전송합니다.
curl -T /path/to/file.txt http://pod-b:8080/file.txt
여기서 pod-b는 Pod B의 이름이거나, 서비스 이름을 사용할 수도 있습니다.
방법 2. SSH 서버 + scp 명령어
Pod B에 SSH 서버가 설치되어 있다면 scp 명령어로도 전송이 가능합니다.
scp file.txt user@pod-b:/data/
다만 Kubernetes 환경에서 SSH를 설정하는 것은 번거롭고 보안 관리도 필요하기 때문에 일반적으로는 잘 사용되지 않습니다.
방법 3. 파일 업로드 API (Flask 등)
Pod B에 Flask나 Express 같은 간단한 웹 서버를 띄워서 파일 업로드 API를 제공하고, Pod A에서 curl -F를 사용해 전송하는 방식도 가능합니다.
curl -X POST -F "file=@file.txt" http://pod-b:8080/upload
이 방식은 조금 더 유연하고 복잡한 처리가 필요할 때 유용합니다.
결론
Pod 간 데이터를 직접 옮기는 방법은 생각보다 간단하지만, 전송 대상 Pod에 HTTP 서버든 SSH든 어떤 방식이든 수신할 준비가 되어 있어야 합니다. 실무에서는 보통 아래와 같은 기준으로 방법을 선택하면 좋습니다.
| 상황 | 추천 방법 |
|---|---|
| 일회성 복사 | kubectl cp (단, 로컬 거침) |
| 빠르게 직접 전송하고 싶음 | Python HTTP 서버 + curl |
| 보안 필요 or 인증된 전송 | scp (SSH 설정 필요) |
| API 기반 처리 원할 때 | Flask 등으로 업로드 서버 구성 |
'개발 (Development) > Kubernetes' 카테고리의 다른 글
| [Kubernetes] Kubernetes에서 컨테이너와 파드는 무엇이 다를까? (0) | 2025.07.13 |
|---|---|
| [Kubernetes] Kubernetes Pod 간 Connection reset 오류, 원인과 해결 방법 (2) | 2025.07.13 |
| [Kubernetes] Kubernetes 클러스터 구조 확인 방법 (0) | 2025.04.06 |