[Ansible] Inventory 관리
inventory 는 관리 대상의 서버를 관리하는 디렉터리 라고 배웠다. ansible 은 크게 control 노드와 managed 노드로 나뉜다. control 노드는 ansible 설치되어 있는 서버를 뜻하고 managed 노드는 ansible 스크립트가 적용되는 서버를 뜻한다.
inventory 에는 group 과 host 를 다음과 같이 나누어 정의할 수 있다.
# inventory/all.ini
[web] <- [group]
web1 ansible_host=192.168.1.10 <- [host]
web2 ansible_host=192.168.1.11 <- [host]
[db] <- [group]
db1 ansible_host=192.168.1.20 <- [host][group] 은 playbook.yaml 에서 hosts 에 입력되고, group 에 속한 모든 host 들이 적용된다. hosts 에 all 로 명시하면 모든 host 들에 적용한다는 의미이다. hosts 에는 group 을 명시할 수 있지만 각 host 이름을 나열해도 된다.
- name: Deploy All Servers
hosts: all
become: yes
roles:
- add_user
- install_docker
- name: Deploy DB Servers
hosts: db
become: yes
roles:
- install_postgres
- name: Deploy API Servers
hosts: web1, web2
become: yes
roles:
- apply_git
1. ansible-vault
관리 서버를 등록할 때, 사설망으로만 등록한다면 보안에 크게 신경쓰이지 않는다. 하지만 123.45.678.9 와 같은 외부망으로 등록하고 유출된다면 크게 우려되는 것들이 많다. 그래서 계정이나 비밀번호, 서버IP 등 보안에 유의할 정보를 명시하는 파일들을 암호화하여 실행할 수 있도록 ansible 이 제공하고 있다.
$ ansible-vault encrypt inventory/all.ini \
--output inventory/all.ini.vault
$ echo "password!2" > vault_password.txt
$ ansible-playbook -i inventory/all.ini.vault playbook.yaml --vault-password-file vault_password.txt위 명령어를 입력 후 비밀번호를 입력하면 all.ini.vault 파일이 생성된다. 이 파일로 playbook.yaml 실행 시 사용할 수 있다. 원본 파일을 수정하면 매번 다시 생성해야하므로 유의하자.
비밀번호가 입력된 파일을 생성하여 playbook 실행 시, vault-password-file 로 지정하면 비밀번호 없이 실행가능하다.
2. Attributes
[servers]
server1 ansible_host=192.168.0.104 ansible_port=22 ansible_user=ubuntu ansible_ssh_pass=password!2 ansible_become_password=password!2
inventory 에 서버를 등록할 때, 입력하는 속성은 다양하다. 내가 입력한 것들에 대해서 정리해보자.
- ansible_port
- ssh 접속 포트
- ansible_user
- 접속할 계정
- ansible_ssh_pass
- 접속할 계정의 비밀번호
- ansible_become_password
- sudo 명령어 시, 입력할 비밀번호