kubectl cp는 어떻게 작동할까?

kubectl cp, kubectl attach, kubectl exec, kubectl post-forward
unchaptered's avatar
Jul 08, 2025
kubectl cp는 어떻게 작동할까?

파드 안에 파일을 넣을 일이 있어서 kubectl cp 명령어를 사용했는데,
대체 어떻게 작동하는지 크게 공감이 되지 않아서 따로 공부해봤습니다.

kubectl cp | attach | exec | port-foward 의 네트워크 흐름은 모두 동일합니다.
세부적인 구성이 다를 수 있으나, 개략적인 흐름을 중점으로 다루고자 합니다.

공식문서에서는 kubectl cp에 대해서 다음과 같이 소개하고 있습니다.

컨테이너로/컨테이너에서 파일과 디렉터리 복사 [ Ref ]
kubectl cp 명령을 사용하려면 컨테이너 이미지에 'tar' 바이너리가 포함되어 있어야 한다. 'tar'가 없으면, kubectl cp는 실패할 것이다. 심볼릭 링크, 와일드카드 확장, 파일 모드 보존과 같은 고급 사용 사례에 대해서는 kubectl exec 를 고려해 볼 수 있다.

하지만
위 내용을 봐도 어떤 경로로 통신이 흘러가고 연결이 유지되는지 알 수 없습니다.

결론부터 말하면
kubectl cp 명령어는 아래와 같이 통신하고 연결을 유지하게 됩니다.

  1. kubectl cp는 아래와 같은 경로를 통해서 실제로 파일을 복사합니다.

    kubectl cp → master-node kube-apiserver → worker-node (kubelet → cri → kernel → target container)

  2. kubectl cp는 연결 상태를 유지하기 위해서 SPDY || WebSocket을 사용합니다.

    k8s ~1.30 SPDY 사용
    k8s 1.31+ WebSocket 사용

더 자세한 작동과정은
아래 문서를 참고해서 직접 테스트하면 좋을 것 같습니다.
(아마 kubernetes 구성환경 별로 조금씩 달라질 것이라서… 환경 by 환경…)

  1. How does 'kubectl exec' work? [ Ref 1 ]

  2. Container Runtime Interface streaming explained [ Ref 2 ]

  3. Kubernetes 1.31: Streaming Transitions from SPDY to WebSockets [ Ref 3 ]

Share article

Unchaptered