전체 목차

 

이전 챕터에서 nginx 이미지를 올려서 배포하는 것 까지 테스트 했습니다.

이에는 로컬에서 개발한  spring boot 어플리케이션을 쿠버네티스 클러스터에 배포하기 위한 준비 작업을 하겠습니다.

더보기

먼저 이전에 설치한 쿠버네티스 환경이 IPv6 환경 문제로 설정이 꼬여서 정상 작동하지 않았습니다.

ChatGPT와 Gemini 를 통해 이것 저것 확인하고 의심되는 것을 수정하였으나 결국 해결되지 않아서

master와 node1~3 을 OS 부터 재설치 하게 되었습니다.

재설치 하면서 hostname 파일을 설정 할 때 IPv6 관련 설정은 모두 제거 했습니다.

Docker 를 통해 이미지를 빌드하기 위한 준비 작업입니다

 

윈도우용 도커를 설치하는 방법은 검색하면 수없이 나오니 생략하도록 하겠습니다.

주의 : Docker Hub 가입시 무료 계정은 단 1개의 리포지토리만 Private으로 설정 할 수 있습니다.

향후 진행할 방법대로 이미지를 도커 허브에 올리게 되면 Public 로 등록되어서 주소만 알면 누구나 다운 받을 수 있습니다.

본 글에서 진행하는 보안 정보가 없는 간단한 프로잭트라면 관계가 없지만 배포하는 이미지에 중요한 접근 정보가 소스에 하드코딩 되어 있거나 파일이 포함된 경우 심각한 문제가 발생 할 수 있습니다.

 

Docker Hub Repositories 에 등록되어 있는 이미지 공개 상태는 도커 허브의 My Hub > Repository 에서 확인 할 수 있습니다.

중요한 정보가 있는 이미지를 공개로 올리지 않도록 주의 하시기 바랍니다.

 

1. 컨테이너 연결

도커를 설치하면 기본적인 컨테이너가 하나 보입니다.

도커에서 새로 설치한 쿠버네티스 클러스터를 함께 바라보도록 하기 위해 서버의 config 파일을 다운 받아서 연결 하도록 했습니다.

1.1. Remote(쿠버네티스 클러스터)의 config 파일 복사

이전에 구축한 쿠버네티스 클러스터의 master 노드에서 config 파일을 내려 받아서 Docker Desktop 이 바라보고 있는 config 파일에 머지를 해줘야 합니다.

PowerShell 에서 C:\Users\<사용자>\.kube 디렉토리에 마스터 노드의 config 파일을 내려 받습니다.

PS C:\Users\user\.kube> dir


    디렉터리: C:\Users\user\.kube


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-01-16   오후 7:05                cache
-a----      2026-01-19   오후 4:37           5688 config

PS C:\Users\user\.kube>

 

SCP 명령의 사용법은 아래와 같습니다.

$ scp <원격사용자명>@<원격주소>:<원격파일경로> <저장할파일명>

더보기
PS C:\Users\user\.kube> scp basscraft@192.168.2.100:./.kube/config ./config_remote
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:35+q0GUfbtl0WbVKaLXwvcLsoz8N/YyCiutCd+6PoJM.
Please contact your system administrator.
Add correct host key in C:\\Users\\user/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in C:\\Users\\user/.ssh/known_hosts:11
Host key for 192.168.2.100 has changed and you have requested strict checking.
Host key verification failed.
C:\WINDOWS\System32\OpenSSH\scp.exe: Connection closed
PS C:\Users\user\.kube>

SCP 명령으로 서버의 파일을 내려받으려고 했지만 서버를 새로 설치하면서 SSH key 가 변경되어서 접속이 안됩니다.

메시지를 자세히 보면 C:\User\<사용자>\.ssh\known_hosts 의 11 라인에 Host key가 변경되어서 발생한 문제 입니다.

다른 SSH 클라이언트 프로그램으로 접속하는 경우는 변경된 경우 기존 키를 덮어쓸 것인지 물어보는데 파워쉘의 SSH 명령어는 그렇게 친절하지는 않습니다.

해결 방법 : 메모장이나 NodePad++, 울트라 에디트 같은 텍스트 에디터로 해당 파일을 열어서 해당 라인에 192.168.2.100 으로 시작하는 라인을 삭제하고 저장합니다.

PS C:\Users\user\.kube> scp basscraft@192.168.2.100:./.kube/config ./config_remote
The authenticity of host '192.168.2.100 (192.168.2.100)' can't be established.
ED25519 key fingerprint is SHA256:35+q0GUfbtl0WbVKaLXwvcLsoz8N/YyCiutCd+6PoJM.
This host key is known by the following other names/addresses:
    C:\Users\user/.ssh/known_hosts:26: 192.168.2.22
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Warning: Permanently added '192.168.2.100' (ED25519) to the list of known hosts.
basscraft@192.168.2.100's password:
config                                                                                100% 5653     1.1MB/s   00:00
PS C:\Users\user\.kube> dir


    디렉터리: C:\Users\user\.kube


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-01-16   오후 7:05                cache
-a----      2026-01-19   오후 4:37           5688 config
-a----      2026-01-17   오전 2:33           5676 config-remote

PS C:\Users\user\.kube>

config-remote 로 잘 저장이 되었습니다.

 

1.2. 컨텍스트 확인

현재 컨텍스트는 docker-desktop 기본 컨텍스트 입니다.

PS C:\Users\user\.kube> kubectl config get-contexts
CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
*         docker-desktop   docker-desktop   docker-desktop
PS C:\Users\user\.kube>

 

새로 받아온 config-remote 의 컨텍스트를 임시로 연결 해보겠습니다.

환경변수 KUBECONFIG 값을 새로 받아온 config-remote 로 덮어씁니다.

(현재 터미널 세선에서만 유효 합니다. 현재 터미널을 닫고 새로운 PowerShell 창을 실행하면 기존 값을 참조 하게 됩니다)

PS C:\Users\user\.kube> $env:KUBECONFIG = "C:\Users\user\.kube\config-remote"

 

컨텍스트가 변경된 것을 확인하고 하위에 노드들이 잘 인식 되는지 확인합니다.

PS C:\Users\user\.kube> kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
PS C:\Users\user\.kube> kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   44h   v1.30.14
node1    Ready    <none>          44h   v1.30.14
node2    Ready    <none>          44h   v1.30.14
node3    Ready    <none>          44h   v1.30.14
PS C:\Users\user\.kube>

이전에 설치된 쿠버네티스 클러스터의 master, node1, node2, node3 노드들이 로컬에서도 모두 Ready 상태로 잘 보여집니다.

1.3. config 파일 병합

두개의 파일을 병합 하기 전에 반드시 기존 config 파일들을 복사 또는 압축해서 보관하기를 권장합니다.

  • 기존 파일 : C:\Users\user\.kube\config
  • 원격 파일 C:\Users\user\.kube\config-remote

두개 파일 경로를 세미콜론으로 연결해서 KUBECONFIG 환경변수에 지정합니다.

PS C:\Users\user\.kube> $env:KUBECONFIG = "C:\Users\user\.kube\config;C:\Users\user\.kube\config-remote"

 

두개 파일을 병합해서 config-meged 파일로 생성합니다.

PS C:\Users\user\.kube> kubectl config view --flatten > C:\Users\user\.kube\config-merged
PS C:\Users\user\.kube> dir


    디렉터리: C:\Users\user\.kube


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-01-16   오후 7:05                cache
-a----      2026-01-19   오후 4:37           5688 config
-a----      2026-01-19   오후 7:25          22512 config-merged
-a----      2026-01-19   오후 5:36           5653 config-remote


PS C:\Users\user\.kube>

 

병합된 파일에 두개의 컨텍스트가 제대로 연결 되는지 확인합니다.

PS C:\Users\user\.kube> kubectl config get-contexts --kubeconfig="C:\Users\user\.kube\config-merged"
CURRENT   NAME                          CLUSTER          AUTHINFO           NAMESPACE
*         docker-desktop                docker-desktop   docker-desktop
          kubernetes-admin@kubernetes   kubernetes       kubernetes-admin
PS C:\Users\user\.kube>

doker-desktop 과 kubernetes-admin@kubernetes 두개의 컨텍스트가 제대로 보여집니다.

 

기존 config 파일의 이름을 config-backup으로 변경합니다.

 

PS C:\Users\user\.kube> Move-Item C:\Users\user\.kube\config C:\Users\user\.kube\config-backup

 

두개의 파일을 병합한 config-merged 파일의 이름을 config 로 변경합니다.

PS C:\Users\user\.kube> Move-Item C:\Users\user\.kube\config-merged C:\Users\user\.kube\config

 

이제 KUBECONFIG 환경변수를 초기화 합니다.

PS C:\Users\user\.kube> $env:KUBECONFIG = $null

 

컨텍스트 목록 확인

PS C:\Users\user\.kube> kubectl config get-contexts
CURRENT   NAME                          CLUSTER          AUTHINFO           NAMESPACE
*         docker-desktop                docker-desktop   docker-desktop
          kubernetes-admin@kubernetes   kubernetes       kubernetes-admin
PS C:\Users\user\.kube>

CURRENT 항목에 * 표가 표시된 항목이 현재 선택된 컨텍스트 입니다.

 

현재 컨텍스트를 kubernetes-admin@kubernetes로 변경

PS C:\Users\user\.kube> kubectl config use-context kubernetes-admin@kubernetes
Switched to context "kubernetes-admin@kubernetes".
PS C:\Users\user\.kube>

 

잘 연결 되었나 확인해 봅니다.

PS C:\Users\user\.kube> kubectl config get-contexts
CURRENT   NAME                          CLUSTER          AUTHINFO           NAMESPACE
          docker-desktop                docker-desktop   docker-desktop
*         kubernetes-admin@kubernetes   kubernetes       kubernetes-admin
PS C:\Users\user\.kube> kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   45h   v1.30.14
node1    Ready    <none>          44h   v1.30.14
node2    Ready    <none>          44h   v1.30.14
node3    Ready    <none>          44h   v1.30.14
PS C:\Users\user\.kube>

현재 컨텍스트가 kubenetes-admin@kubernetes 로 변경되었고 하위에 노드들도 잘 보여집니다.

 

원래의 doker-desktop 컨텍스트로 변경하려면 docker-desktop 을 선택하면 됩니다.

PS C:\Users\user\.kube> kubectl config use-context docker-desktop
Switched to context "docker-desktop".
PS C:\Users\user\.kube> kubectl config get-contexts
CURRENT   NAME                          CLUSTER          AUTHINFO           NAMESPACE
*         docker-desktop                docker-desktop   docker-desktop
          kubernetes-admin@kubernetes   kubernetes       kubernetes-admin
PS C:\Users\user\.kube> kubectl get nodes
NAME             STATUS   ROLES           AGE     VERSION
docker-desktop   Ready    control-plane   2d17h   v1.34.1
PS C:\Users\user\.kube>

 

도커 데스크탑 하단에 초록색 Kubenetes running 왼쪽의 아이콘을 클릭,  Kubernetes Context 메뉴에서 현재 컨텍스트를 선택 할 수도 있습니다.

 

다음 챕터에서 간단한 Spring boot 프로잭트를 작성하고 리모트에 배포해 보도록 하겠습니다.

 

끝.

+ Recent posts