kubectl cp는 어떻게 작동할까?

파드 안에 파일을 넣을 일이 있어서 kubectl cp 명령어를 사용했는데,
대체 어떻게 작동하는지 크게 공감이 되지 않아서 따로 공부해봤습니다.
kubectl cp | attach | exec | port-foward 의 네트워크 흐름은 모두 동일합니다.
세부적인 구성이 다를 수 있으나, 개략적인 흐름을 중점으로 다루고자 합니다.
공식문서에서는 kubectl cp에 대해서 다음과 같이 소개하고 있습니다.
컨테이너로/컨테이너에서 파일과 디렉터리 복사 [ Ref ]
kubectl cp
명령을 사용하려면 컨테이너 이미지에 'tar' 바이너리가 포함되어 있어야 한다. 'tar'가 없으면,kubectl cp
는 실패할 것이다. 심볼릭 링크, 와일드카드 확장, 파일 모드 보존과 같은 고급 사용 사례에 대해서는kubectl exec
를 고려해 볼 수 있다.
하지만
위 내용을 봐도 어떤 경로로 통신이 흘러가고 연결이 유지되는지 알 수 없습니다.
결론부터 말하면
kubectl cp 명령어는 아래와 같이 통신하고 연결을 유지하게 됩니다.
kubectl cp는 아래와 같은 경로를 통해서 실제로 파일을 복사합니다.
kubectl cp →
master-node
kube-apiserver →worker-node
(kubelet → cri → kernel → target container)kubectl cp는 연결 상태를 유지하기 위해서 SPDY || WebSocket을 사용합니다.
k8s ~1.30 SPDY 사용
k8s 1.31+ WebSocket 사용
더 자세한 작동과정은
아래 문서를 참고해서 직접 테스트하면 좋을 것 같습니다.
(아마 kubernetes 구성환경 별로 조금씩 달라질 것이라서… 환경 by 환경…)