Puppet 설치 가이드

최근 자바 프로젝트 환경에서 빌드/배포는 상당히 중요한 포지션을 갖고 있습니다.

이유는 시간이 지날수록 프로젝트의 아티팩트(artifact)의 수 와 운영하는 물리적 서버가
점점 증가하기 때문 입니다.
특히나 클라우드 환경이 도래하는 이시점에서 프로그램을 빌드/배포 및 형상 관리는
시스템은 중추적 기능을 한다고 해도 과언이 아닐 것입니다.

빌드 같은 경우는 Maven + Nexus + Jekins를 통해서 주로 사용을 하고 있습니다.
하지만 배포 같은 경우는 여러가지 환경을 고려해야 하기 때문에 대부분
수작업으로 할것 입니다.
하지만 위에서 말했듯 서버의 수가 증가하면 사람이 할수 있는 일을 벗어나게 됩니다.
특히사 클라우드 환경에서 서버 설정을 변경하는데 100대 이상이라고 가정하면
일일 접속해서 수정을 하고 확인 작업을 해야 하다면 많은 시간이 걸릴 것이고,
그 만큼 실수 확률도 증가할 것입니다.

이런 Needs를 만족하기 위해서 나온 오픈 소스가 “Puppet”입니다.
Puppet은 아래의 그림 처럼 하나의 Master 서버에서 설정(아파치 설정, war 배포, WAS 기동등..)을
하면 각 Agent에게 설정 정보를 보냅니다. (이러한 명령을 “catalog” 라고 합니다.)
수신된한 Agent는 변경된 설정 정보를 실행하고, 결과 리포트는 Master에게
전송 합니다.



1. 다른 오픈 소스

2. 설치 환경

(1)  OS

설치 환경은 “CentOS 5.8.x” 입니다. 하지만 설치 과정이 Window, 데미안 계열(Ubuntu)의 리눅스 OS 와
유사한 설치 과정을 진행하기 때문에 큰 무리는 없을듯 합니다.

(2) Ruby

Puppet은 Ruby로 만들었기 때문에 반드시 Ruby를 반드시 설치해야 합니다.
현재까지 1.9.3.x 가 나왔습니다. 하지만 설치 테스트 진행 결과
1.9.x 버전이 OpenSSL과 연동시 이슈가 있었습니다.
외국의 블로그나 wiki 사이트를 봐도 해결책이 현재로썬
찾기가 어려웠습니다.
그래서 현 시점에서는 1.8.x 버전을 설치 하시길 권고 드립니다.
하지만 추후 1.9.x에 대한 관심은 필요할듯 합니다.

(3) 서버 구성

서버는 Master 1 대, Agent 1대 총 2대로 진행 하며, Puppet은 Master <-> Agent 간에
SSL 통신을 하기 때문에 도메인이 필요 합니다.
하지만 이번 설치에는 /etc/hosts 파일에 설정을 하면서 진행 했습니다.
Master 도메인 : puppet1.example.com
Agent 도메인 : node1.example.com

(4) Install 방법

개인적으로는 yum 방식 보다는 “make install” 방식을 좋아하지만, 설치 테스트
는 경험상 버전에도 영향을 받기 때문에 설치/재설치를 해야 하는 경우가 있어서
되도록 “yum” 방식으로 진행을 했습니다.

3. Master 설치 하기

(1) 루비 및 관련 라이브러리 설치

※ruby 외에 관련 라이브러리들을 설치 합니다.
# yum install ruby ruby-libs ruby-shadow 

(2) RPM 최신 업데이트

※openssl 등 참조하는 패키지 설치 및 최신 버전 업데이트를 위해서 아래의 명령을 실행 합니다.
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

참고로 위에는 CentOS 5.x 버전 입니다. 6.x 버전을 설치 하려면 아래의 사이트를 참고 하시면 됩니다.
(http://www.freshblurbs.com/install-ruby-1-9-centos)

(3) Puppet 마스터 설치 하기

Puppet을 설치하려면 3가지 패키지를 설치해 해야 합니다.

  • puppet : Agent 모듈
  • puppet-server : Master 모듈
  • facter : 서버 정보를 gathering 하는 모듈

※ Mater 서버 설치시는 3개의 모듈을 설치해야 합니다.
# yum install puppet puppet-server facter

4. Agent 설치 하기

Master 설치하기 와 동일하고 3번 설치 항목에서 2개만 설치 합니다.

# yum install puppet facter

5. Master 설정 하기

  • Master가 설치된 서버로 이동 합니다.
  • vi /etc/puppet/puppet.conf” 을 오픈합니다.
  • 아래와 같이 설정 정보를 추가 합니다.

          [master]
          certname=master.example.com

※설정의 크게 3가지로 구분이 됩니다. “[main]”은 공통 설정, “[master]”는 master 전용 설정, 마지막으로
“[agent]”는 agent를 위한 설정 입니다.  “cetname”은 master 도메인 정보를 설정하는 속성입니다. 추후에
이 도메인명을 가지고 SSL 인증서를 발급 합니다.

6. Agent 설정 하기

  • Agent가 설치된 서버로 이동 합니다.
  • vi /etc/puppet/puppet.conf” 을 오픈합니다.
  • 아래와 같이 설정 정보를 추가 합니다.

 [agent]
  certname=node1.example.com

※ Agent의 도메인 정보를 입력 합니다. 추후에 서버에서 SSL 인증서를 발급 받습니다.

  • 만약 master 도메인이 퍼블릭 도메인이 아닌 경우는 “/etc/hosts” 파일에 도메인 정보를 추가 합니다.

 192.168.0.1 puppet1.example.com

7. Master to Agent 연동 하기

Master 와 각 Agent는 SSL 통신을 합니다. Master 입장에서는 승인된 Agent정보가 필요하며,
반대로 Agent도 승인된 Master가 필요 합니다. 즉 쌍뱡향 SSL 승인절차를 필요 합니다.
서로 같에 SSL 승인이 되지 않으면 연동 자체가 불가 합니다.
Puppet 같은 경우는 자체 CA (certificate authority) 인증 기관이 있고,  SSL 인증을 최적화
되어 있습니다.
이유는 공인인증서를 발급하면 비용이 들어가는데, 만약 Agent가 100대 이상이면
비용이 만만치 않습니다.
그래서 공인인증 수준의 SSL 인증 발급을 쉽게 할수 있도록 지원을 합니다.
Puppet은 큰 특징 중 하나가 바로 SSL 인증 발급을 하는 것입니다.
또한 Customize 할수 있는 기능도 제공 합니다.

     인증서 발급 FLOW는 아래와 같습니다.

(1) Master 서버가 기동을 해서 Agent를 리스닝 합니다.
(2) Agent는 서버에 접속을 합니다.
(3) Master는 Agent의 도메인 정보를 얻은 후 SSL을 발급 합니다.
(4) 발급된 “.pem” 파일을 Agent에 전송 합니다.
(5) Agent는 “/etc/puppet/ssl” 폴더에 서버 와 본인 인증서를 저장 합니다.
(6) 이후 부터는 인증서를 통해서 ssl 통신을 합니다.

위의 flow를 통해서 어떻게 구현하는지 설명 하겠습니다.

(1) <<Master Side>>  “puppet master –no-daemonize -d -v” 명령어를 실행해서 기동을 합니다.

※참고로 테스트를 위해서 foreground로 띄우는 옵셥 입니다.

(2)  <<Agent Side>> “puppet agent –server puppet1.example.com –no-daemonize –verbose”를
실행 해서 기동을 합니다. 접속을 하면 인증키 발급이 되지 않았다는 메세지를 받습니다.

(3) <<Master Side>> puppet cert –all and –list” 명령을 실행 합니다.
“+” 표기된 부분은 발급이 완료된 Agent들을 말합니다. 지금 접속한 “node1.example.com”
은 “+” 표시가 되어 있지 않습니다.

즉, 서버에 접속은 되어 있지만 발급이 안되서 대기중인 상태를 말합니다.

(4)<<Master Side>> “puppet cert –sign node1.example.com” 명령을 실행 합니다.
이 명령어는 “node1.example.com”으로 접속한 Agent에게 SSL 인증서를 발급 하겠다는 내용 입니다.

(5)  <<Agent Side>> 발급이 완료되면 Master로 부터 새로운 catalog(설정 변경에 대한 지시 사항)을 받습니다.

(6) 최종적으로 아래와 같이 Master/Agent 로그가 나오면 정상적으로 설정이 완료 됩니다.
       추후 Agent가 추가가 되면 위에 설정 방식을 반복해서 설정을 하면 됩니다.

<<Master Side>>

<<Agent Side>>


8. 참고 자료


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중