Ubuntu 17.04에 Chef 서버 설치 및 구성

중요: Ubuntu 17.04는 최신 장기 지원(LTS) 버전이 아닐 수 있습니다. 가능한 경우 최신 LTS(예: Ubuntu 20.04/22.04 등)로 마이그레이션을 고려하세요. 이 문서는 원본 대상이 17.04인 환경을 전제로 합니다.
소개
Chef는 Ruby와 Erlang으로 작성된 무료 오픈소스 구성 관리 도구입니다. AWS, OpenStack, RackSpace 등 클라우드 플랫폼과 쉽게 통합되어 서버를 자동으로 생성하고 관리할 수 있습니다. 조직이 성장해 노드 수가 증가하면 개별 노드를 수동으로 관리하기 어려워지므로 중앙에서 노드를 관리할 수 있는 Chef 같은 도구가 필요합니다.
간단 정의: Chef 서버는 중앙 구성 저장소이며, 워크스테이션은 관리 작업을 수행하는 클라이언트 환경, 노드는 Chef가 관리하는 대상 시스템입니다.
주요 단계 요약
- 시스템 업데이트
- 호스트네임(FQDN) 설정
- NTP로 시간 동기화
- Chef Server 패키지 다운로드 및 설치
- chef-server-ctl reconfigure로 서비스 구성
- 웹 관리 콘솔(Chef Manage) 설치 및 구성
- 관리자 사용자와 조직 생성
- 선택적 플러그인(Reporting, Push Jobs) 설치
사전 준비
- 최소 Ubuntu 17.04 서버 인스턴스
- 루트 권한(또는 sudo -i로 루트 전환)
- 서버로 향하는 도메인 이름(권장) 또는 고정 퍼블릭 IP
참고: 루트가 아닌 사용자를 통해 안내된 명령을 실행하는 경우 명령 앞에 sudo를 붙이십시오.
시스템 업데이트
패키지와 저장소를 최신 상태로 만드세요.
apt update && apt -y upgrade
업데이트 후 재시작이 필요한 커널/서비스가 있으면 서버를 재시작하세요.
호스트네임 설정
Chef는 해석 가능한(FQDN) 호스트네임이 필요합니다. 예: chef.example.com. 아래 예시를 실제 도메인/호스트네임으로 교체하세요.
hostname 'chef.yourdomain.com'
/etc/hostname 파일 업데이트:
echo "chef.yourdomain.com" | tee /etc/hostname
/etc/hosts에 IP와 호스트네임 추가(예: 퍼블릭 IP):
echo "192.168.1.1 chef.yourdomain.com" >> /etc/hosts
192.168.1.1을 실제 서버 IP로 바꾸세요.
NTP 설정(시간 동기화)
Chef는 시간 변화에 민감하므로 정확한 시계 동기화가 중요합니다. NTP는 UDP 포트 123을 사용합니다. 설치 및 시작:
apt install ntp
systemctl start ntp
systemctl enable ntp
동기 상태 확인:
ntpq -p
정상적으로 동기화되면 출력에 여러 원격 서버와 상태 열이 표시됩니다. 시간 동기화가 실패하면 방화벽(UDP 123) 또는 네트워크 연결을 확인하세요.
중요: 가상환경 또는 클라우드의 경우 하이퍼바이저/호스트 측 시간 동기화를 확인하세요. 호스트 시간과 컨테이너/VM 시간 동기화가 충돌하면 NTP가 예측 불가능하게 동작할 수 있습니다.
Chef 서버 패키지 다운로드 및 설치
공식 패키지 링크는 Chef 다운로드 페이지에서 확인할 수 있습니다. 예시(원본 문서 기준):
wget https://packages.chef.io/files/stable/chef-server/12.15.8/ubuntu/16.04/chef-server-core_12.15.8-1_amd64.deb
패키지 이름은 아키텍처(amd64 등)와 Ubuntu 릴리스에 따라 달라질 수 있습니다. 최신 버전 및 올바른 플랫폼용 패키지를 선택하세요.
설치:
dpkg -i chef-server-*.deb
설치 후 Chef 서버 컴포넌트들을 구성해야 합니다.
Chef 구성 및 서비스 시작
모든 서비스를 생성·설정하려면 다음을 실행하세요:
chef-server-ctl reconfigure
이 명령은 몇 분이 걸릴 수 있으며, 내부적으로 각종 구성요소(nginx, postgresql, rabbitmq 등)를 설치·구성합니다. 완료 시 아래와 유사한 메시지가 표시됩니다:
Chef Client finished, 491/1096 resources updated in 03 minutes 13 seconds
Chef Server Reconfigured!
서비스 상태 확인:
chef-server-ctl status
정상 실행 예시 출력에는 bookshelf, nginx, postgresql, rabbitmq 등 여러 서비스의 상태가 표시됩니다.
웹 관리 콘솔 설치
Chef Manage(웹 GUI)를 설치하면 데이터백, 런리스트, 롤, 환경, 쿠크북 등을 웹에서 관리할 수 있습니다.
chef-server-ctl install chef-manage
chef-server-ctl reconfigure
chef-manage-ctl reconfigure
라이선스 동의 요청을 자동 수락하려면:
chef-manage-ctl reconfigure --accept-license
설치가 완료되면 웹 콘솔 URL(기본적으로 http://Your-Server-IP 혹은 도메인)을 통해 로그인 화면에 접근할 수 있습니다.
이미지 설명: Chef 서버 웹 로그인 화면의 예시 인터페이스
로그인 후 대시보드 예시:
이미지 설명: Chef 관리 콘솔의 대시보드 화면
관리자와 조직 생성
관리 콘솔 접근 전 관리자 사용자와 조직을 만들어 RSA 개인키를 생성해야 합니다. 개인키는 워크스테이션과 노드 설정에 필요합니다.
키 저장용 디렉터리 생성:
mkdir ~/.chef
관리자 사용자 생성(예시):
chef-server-ctl user-create admin Chef Administrator [email protected] StrongPassword -f ~/.chef/admin.pem
- admin: 사용자 계정(짧은 이름)
- Chef Administrator: 성과 이름(공백으로 구분)
- 이메일: 관리자 이메일
- StrongPassword: 강력한 비밀번호로 변경
- -f 옵션은 개인키 파일 저장 경로
조직 생성(예시):
chef-server-ctl org-create my_org 'My Organization' --association_user admin -f ~/.chef/my_org.pem
- my_org: 조직의 짧은 이름
- ‘My Organization’: 조직의 전체 이름
- –association_user로 관리자를 연결
생성 후 ~/.chef 디렉터리에 admin.pem, my_org.pem 같은 키 파일들이 생성됩니다. 이 키들은 워크스테이션에서 chef-repo 또는 knife 설정에 사용됩니다.
웹 콘솔 접근
브라우저에서 다음 주소로 접속합니다:
http://Your-Server-IP
도메인을 구성한 경우 도메인 이름을 사용하세요. 로그인 화면이 표시되면 위에서 만든 관리자 계정으로 로그인합니다.
선택적 플러그인 설치
보고서(Reporting) 설치:
chef-server-ctl install opscode-reporting
chef-server-ctl reconfigure
opscode-reporting-ctl reconfigure
opscode-reporting-ctl test
Push Jobs 설치(노드에 독립적인 작업 실행):
chef-server-ctl install opscode-push-jobs-server
chef-server-ctl reconfigure
opscode-push-jobs-server-ctl reconfigure
각 모듈을 설치한 후 관련 테스트 명령으로 정상 동작을 확인하세요.
일반적인 문제 해결 팁
- reconfigure가 실패하면 로그 파일(/var/log/chef-server/ 또는 /var/log/chef-manage/)을 확인하세요.
- 포트 충돌: nginx(80/443), rabbitmq, postgresql 등의 포트 충돌 여부를 확인하세요.
- 방화벽: Chef 서버 접근에 필요한 포트(80, 443 등)가 열려 있는지 확인하세요.
- 시간 동기화 실패는 인증과 통신에 문제를 일으킵니다. ntpq -p로 동기 상태를 확인하세요.
보안 권장사항
- HTTPS 설정: 운영 환경에서는 nginx에 TLS 인증서를 적용해 HTTPS로 접속하세요.
- 개인키 보호: ~/.chef/*.pem 파일은 엄격히 보호(권한 600)하세요.
chmod 600 ~/.chef/*.pem
- 최소 권한 원칙: 관리자 계정은 필요 최소한의 인원만 사용하세요.
- 백업: postgresql 데이터베이스와 중요한 키 파일을 정기적으로 백업하세요.
마이그레이션 및 호환성 팁
- Chef 패키지 버전과 Ubuntu 릴리스(16.04, 18.04 등) 호환성을 확인하세요. 다운로드 페이지에서 운영체제별 패키지를 선택해야 합니다.
- 오래된 OS(예: 17.04)는 보안 업데이트가 제공되지 않을 수 있으므로 가능한 경우 LTS로 업그레이드하거나 최신 지원 버전으로 재설치하는 것을 권장합니다.
역할별 체크리스트
운영팀:
- NTP 및 호스트네임 확인
- 방화벽 규칙 검토
- TLS 인증서 적용
SRE/DevOps:
- chef-server-ctl reconfigure 모니터링
- 백업 스케줄 설정
- 모니터링 지표(프로세스, 메모리, 디스크) 수집
보안팀:
- PEM 파일 권한 점검
- 사용자 및 조직 접근 감사
- 취약점 스캔 수행
간단 체크리스트(실행 전/후)
실행 전:
- 시스템 업데이트 완료
- 퍼블릭 IP와 도메인 준비
- 포트(80,443,123 등) 허용
설치 후:
- chef-server-ctl status 확인
- 웹 콘솔 로그인 확인
- 관리자/조직 키 파일 안전 저장
- 선택적 플러그인 동작 확인
수용 기준
- chef-server-ctl status가 모든 주요 서비스의 실행 상태를 반환한다.
- 웹 관리 콘솔에 관리자 계정으로 로그인 가능하다.
- 관리자 키(~/.chef/*.pem)가 생성되어 워크스테이션에서 접근 가능하다.
- NTP가 동기화되어 ntpq -p 출력에서 서버가 적어도 하나 이상의 정상 원격 서버와 연결되어 있다.
명령 치트시트
- 시스템 업데이트: apt update && apt -y upgrade
- 호스트네임 설정: hostname ‘chef.example.com’
- NTP 설치: apt install ntp && systemctl enable –now ntp
- 패키지 설치: dpkg -i chef-server-*.deb
- 구성 적용: chef-server-ctl reconfigure
- 상태 확인: chef-server-ctl status
- 관리자 생성: chef-server-ctl user-create … -f ~/.chef/admin.pem
- 조직 생성: chef-server-ctl org-create … -f ~/.chef/my_org.pem
간단 방법론(설치 절차 요약)
- 인프라 준비: DNS, 방화벽, 루트 접근
- OS 업데이트 및 시간 동기화 설정
- Chef 패키지 다운로드 및 설치
- chef-server-ctl reconfigure로 서비스 구성
- Chef Manage로 웹 관리 기능 추가
- 관리자·조직 생성 및 키 배포
- 모니터링·백업·보안 조치 적용
FAQ(간단 답변)
- Q: Ubuntu 17.04가 반드시 필요한가요? A: 원본 가이드는 17.04를 기준으로 했지만 최신 LTS 사용을 권장합니다.
- Q: Chef Server를 HA(고가용성)로 운영할 수 있나요? A: 네. 고가용성 구성에는 추가 아키텍처(로드밸런서, 외부 DB 등)가 필요합니다. 본 문서는 단일 노드 설치를 다룹니다.
요약
- 이 가이드는 Ubuntu 17.04에 Chef 서버를 설치·구성하는 단계별 절차와 체크리스트, 보안 권장사항, 문제 해결 팁을 제공합니다.
- 설치 후에는 관리자 계정과 조직을 생성하고 개인키를 안전하게 보관해야 합니다.
- 운영 환경에서는 TLS 적용, 정기 백업, 모니터링, 시간 동기화 검증을 반드시 수행하세요.
핵심 포인트:
- 호스트네임은 FQDN이어야 합니다.
- NTP로 시간 동기화 필수.
- chef-server-ctl reconfigure로 모든 서비스 구성.
- 관리자 및 조직 키는 안전하게 보관.
더 읽을거리: Chef 공식 문서와 패키지 다운로드 페이지에서 최신 패키지와 추가 설정(HA, LDAP 통합, 외부 DB 연동 등)을 확인하세요.