전말
Jenkins를 이용한 CI/CD Pipeline 구축 강의 중 섹션 4 - Ansible에서 Kubernetes 제어하기 과정 중에 오류가 생겼고 이틀 내내 찾아서 고쳤다.
강의 커뮤니티에도 윈도우를 사용하는 대부분의 수강생들이 겪는 에러인 것 같은데, 해결 방법이 없고 구글링해도 정보가 너무 없어서 포스팅하고자 한다.
이하 내 호스트 IP는 가상으로 192.168.1.11로 표기하겠다. (or 스티커로 가리기)
먼저 진행한 과정은 hosts 파일에 아래와 같이 입력하고
[ansible-server]
localhost
[kubernetes]
192.168.1.11
ansible로 ping 모듈을 테스트하는 것이었다.
# ansible -i /k8s/hosts kubernetes -m ping
첫 번째 난관 봉착!
Failed to connect to the host via ssh - Permission denied (publickey,password,keyboard-interactive) 발생
윈도우는 리눅스와 다르게 winrm(Windows Remote Management)을 통해 ansible을 이용할 수 있다고 한다.
그래서 ping이 아니라 winrm을 사용해 win_ping모듈로 테스트를 해야 한다.
하나씩 해결해보자
1. OpenSSH 설치
2. ansible 설정 파일 적용
파워셸에서 아래 명령어를 실행한다.
$url = "https://github.com/AlbanAndrieu/ansible-windows/blob/master/files/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file
두 번째 난관 봉착!
해당 설정 파일이 제대로 적용이 안됨
C:\Users\박경현_인터넷망\AppData\Local\Temp 경로에 ConfigureRemotingForAnsible 파일이 있을 건데,
열어보니 해당 사이트 자체가 크롤링 된 것 같았다.
그래서 https://github.com/AlbanAndrieu/ansible-windows/blob/master/files/ConfigureRemotingForAnsible.ps1 이 파일을 그냥 다운로드 받아서 같은 경로에 넣어준 다음 아래 명령어로 스크립트 실행했다.
powershell.exe -ExecutionPolicy ByPass -File $file
적용됐다..!
3. ansible-server 서버에서 hosts 파일 수정
현재 접속중인 윈도우 계정의 아이디와 패스워드를 기입하면 된다.
그룹 이름은 windows말고 다른 이름으로 작성해도 된다.
[ansible-server]
localhost
[windows]
192.168.1.11
[windows:vars]
ansible_password='윈도우접속패스워드'
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_user=윈도우접속아이디
ansible_port=5986
4. winrm 설치
ansible은 파이썬 기반이므로 파이썬을 먼저 설치하고 pip을 사용해 pywinrm 모듈을 설치한다.
# yum install python39
# pip install pywinrm
5. 다시 ping 테스트 해보기
# ansible -i hosts windows -m win_ping
보통은 여기서 성공할 것이다....
세 번째 난관 봉착!
'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256) 에러 발생..
구글링해도 깃허브 이슈에 1개 올라온 거밖에 없었고 그 사람도 윈도우 계정명이 영어가 아니라 생긴 문제 같았다.
[root@ea3a4e776da2 k8s]# ansible -i hosts windows -m win_ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
192.168.1.11 | UNREACHABLE! => {
"changed": false,
"msg": "ssl: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)",
"unreachable": true
}
그래서 윈도우 계정명을 영어로 바꾸고 나니 드디어 성공했다..ㅠㅠ
참고