본 강의는 클라우드 네이티브 애플리케이션을 구성하는 4가지 핵심 요소(MSA, CI/CD, DevOps, Container) 중 하나인 CI(Continuous Integration, 지속적인 통합)과 CD(Continuous Deployment, 지속적인 배포) 파이프라인에 대한 다루는 강의입니다. 본 강의를 통해 CI/CD 도구인 Jenkins를 이용하여 로컬 환경과 클라우드 환경에 자신만의 자동화 파이프라인을 구축하고, 배포하는 데에 필요한 과정을 이해하고 실습해 볼 수 있습니다.
ansible-server에서 windows의 K8s로의 테스트 시 참조
** ansible-server에서 windows의 K8s로의 테스트 시 참조
ansible-server를 이용하영 Windows에 설치한 docker-desktop의 Kubernetes에 접속을 하여 테스트를 진행할 경우 아래 내용을 확인해 보시기 바랍니다.
ansible-server에서 ssh-copy-id 명령어를 이용하여 windows에 id_rsa.pub 키 파일의 내용을 복사하려고 할 때, 정상적인 키 파일의 내용이 아닌, ECHO~ 라는 문자열이 삽이되어 버리는 경우가 있습니다. 이럴 경우는 ssh-copy-id 명령어 대신, 해당 id_rsa.pub 키 파일의 내용을 직접 복사해서 사용하셔야 합니다. 어떤 방법을 사용하던 결과로는 windows의 .ssh 폴더에 있는 authorized_keys 파일에 ansible-server에서 생성한 id_rsa.pub 키 파일의 내용이 저장되어 있으면 됩니다. 이 때 주의하실 점은, ansible-server에 로그인 한 계정과 windows 서버에 로그인하는 계정이 일치해야 하며, 해당 계정은 windows에서 관리자 권한을 가지고 있어야, docker나 kubectl 등의 명령어를 사용하는데 오류가 발생하지 않습니다. 요약하면 Windows에 로그인하는 계정과 동일한 계정명으로 ansible-server의 계정을 생성후, 키를 복사해야 합니다. 이러한 과정이 번거로우시면, ssh 접속할 때 인증 없이 접속하기 위해 ssh-copy-id 명령어를 사용하는 것이니, 이부분은 그대로 암호를 입력하면서 진행하고, ansible-playbook에서는 ansible의 hosts파일에 windows 접속 정보를 기록하여 사용하시면, playbook 실행시에는 문제없이 진행할 수 있습니다.
아래에 실행 과정에 대해 설명한 내용을 참조하시기 바랍니다.
Windows OS (docker-desktop 설치, Kubernetes 실행, IP: 192.168.0.7)
docker-server (도커 컨테이너, IP: 172.17.0.3)
ansible-server (도커 컨테이너, Ansible 설치, IP: 172.17.0.4)
먼저 ansible-server에서 생성한 id_rsa.pub 키를 docker-server에 ssh-copy-id 명령어를 이용하여 복사합니다. docker-server의 키를 복사해서 ssh가 암호 없이 접속 되는 것을 확인해 보실 수도 있습니다.
ansible-server의 id_rsa.pub 키를 windows 서버에 복사합니다. (아래 이미지는 docker-server로 되어 있지만, ansible-server에서 진행하시면 됩니다). 다만, id_rsa.pub 키를 생성할 때의 계정과 windows의 openssh에 접속 할 계정이 동일해야 해여, 해당 windows 계정은 docker나 kubectl 명령어를 실행할 수 있는 관리자 권한을 가지고 있어야 합니다. 이 때, ssh-copy-id 명령어를 사용하여 id_rsa.pub 키 복사를 시도하면, Windows의 authorized_keys 파일에 id_rsa.pub 키의 내용이 복사되는 것이 아니라, ECHO~ 라는 문자열이 복사되어 버리는 경우가 있는데, 이럴 경우에는 해당 키를 직접 COPY-PASTE 방식으로 Windows의 authorized_keys 파일에 복사해 넣으시면 됩니다. (만약 authorized_keys 파일에 windows에 없다면, 파일도 직접 생성하시면 됩니다)
id_rsa.pub 키를 복사하는 작업을 하기 전에, 아래 4)번과 같이 windows에서 ssh 명령어를 이용하여 windows 서버에 접속이 되는지 확인해 보시기 바랍니다. (openssh가 설치되어 있지 않다면 설치하시기 바랍니다.)
이번에는 ansible-server에서 직접 ssh 명령어로 Windows의 openssh 서버에 접속하는 테스트를 해 보시기 바랍니다.
위의 2번에서 설명드린 것 처럼 id_rsa.pub 키를 복사할 때는 id_rsa.pub 키가 Windows의 계정과 동일한 계정으로 생성해야 하는데, 이 과정이 번거로우시면, 아래와 같이, ansible의 hosts 파일에 windows 접속 정보를 기록하여 사용하시기를 권장드립니다. 어차피 ssh 명령어를 이용하여 직접 접속을 시도하는 경우보다는 ansible 명령어를 이용하여 처리하는 경우가 더 많을 것이기 때문에, ssh-copy-id 작업을 진행하지 않고 직접 ansible hosts 파일에 접속 정보를 저장하여 사용하도록 합니다. 이 부분에서 ansible_user, ansible_password 항목에 Windows 접속 계정 정보 (저는 관리자 권한을 가지고 있는 사용자 계정 정보와 암호를 입력했습니다)를 저정하시면 됩니다. ansible hosts 파일 정보를 완성하였다면 ,다음 ansible 명령어를 이용하여 ping 모듈이 정상적으로 실행되는지 확인해 보시기 바랍니다.
ansible windows -m in_ping -u [windows 계정]
ansible-playbook 실행에 앞서, windows에 K8s의 manifest 파일이 저장되어 있는 위치를 확인하고, kubectl 명령어를 이용하여 Kubernetes의 리소스들을 확인해 봅니다. 아래 예제에서는 K8s의 Service 목록을 확인하고 있으며, 기본으로 생성되는 서비스외 사용자가 생성한 서비스는 보이지 않는 것을 확인하고 있습니다.
ansible-server에서 playbook 파일의 내용을 확인합니다. windows에 명령어를 전달할 것이기 때문에, 아래 예제와 같이 win_command 명령어를 사용하고 (MacOS의 경우 command 명령어를 사용) 실행하고자 하는 manifest 파일의 위치를 절대경로로 명시해 줍니다. playbook 파일을 실행하여 실행된 결과를 확인해 보실 수 있습니다.
마지막으로 windows에서 실행한 리소스가 정상적으로 반영되었는지, kubectl 명령어를 이용하여 확인해 보실 수 있습니다.
위 내용에 대해 추가 질문사항 있으시면 질문 게시판에 글 남겨주시기 바랍니다.
해당 문제가 고민하셨던 분들께 도움이 되었으면 좋겠습니다.
감사합니다.