https://www.inflearn.com/course/ansible-%EC%9D%91%EC%9A%A9
ㅇ 앤서블 노드 추가하기
- Vagrantfile
1. 앤서블 노드 2개를 CentOS를 이용하여 추가 구성
2. 기존과 동일한 방법으로 구성파일 작성
1) Vagrant에서 부르는 호스트 이름 작성
2) VirtualBox 설정 변경
a. VirtualBox에서 구분하는 호스트 이름 작성
b. CPU와 메모리를 최소한 사용하게 변경
3) 가상 머신의 호스트 이름을 변경
4) 호스트PC와 가상머신의 공유 디렉터리는 사용하지 않음
5) 인터넷에 연결되는 IP설정
6) 호스트 PC의 포트를 IP 주소와 유사하게 변경
7) 앤서블 서버에서 add_ssh_auth.sh를 실행
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant_API_Version ="2"
Vagrant.configure(Vagrant_API_Version) do |config|
#Ansible-Node01
config.vm.define:"ansible-node01" do |cfg|
cfg.vm.box = "centos/7"
cfg.vm.provider:virtualbox do |vb|
vb.name="Ansible-Node01 (Udemy-Bloter)"
vb.customize ["modifyvm", :id, "--cpus",1]
vb.customize ["modifyvm", :id, "--memory",512]
end
cfg.vm.host_name="ansible-node01"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.network "public_network", ip: "192.168.0.11"
cfg.vm.network "forwarded_port", guest: 22, host: 19211, auto_correct: false, id: "ssh"
end
#Ansible-Node02
config.vm.define:"ansible-node02" do |cfg|
cfg.vm.box = "centos/7"
cfg.vm.provider:virtualbox do |vb|
vb.name="Ansible-Node02 (Udemy-Bloter)"
vb.customize ["modifyvm", :id, "--cpus",1]
vb.customize ["modifyvm", :id, "--memory",512]
end
cfg.vm.host_name="ansible-node02"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.network "public_network", ip: "192.168.0.12"
cfg.vm.network "forwarded_port", guest: 22, host: 19212, auto_correct: false, id: "ssh"
end
#Ansible-Server
config.vm.define:"ansible-server" do |cfg|
cfg.vm.box = "centos/7"
cfg.vm.provider:virtualbox do |vb|
vb.name="Ansible-Server (Udemy-Bloter)"
end
cfg.vm.host_name="ansible-server"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.network "public_network", ip: "192.168.0.10"
cfg.vm.network "forwarded_port", guest: 22, host: 19210, auto_correct: false, id: "ssh"
cfg.vm.provision "shell", path: "bootstrap.sh"
cfg.vm.provision "file", source: "Ansible_env_ready.yml", destination: "Ansible_env_ready.yml"
cfg.vm.provision "shell", inline: "ansible-playbook Ansible_env_ready.yml"
cfg.vm.provision "shell", path: "add_ssh_auth.sh", privileged: false
end
end
- Ansible_env_ready.yml
1. /etc/hosts에 서버와 노드 등록
2. /etc/ansible/hosts에 앤서블을 통해 관리할 노드 등록
3. Yum을 통해서 앤서블 서버에 sshpass를 설치
---
- name: Setup for the Ansible's Enviorment
hosts: localhost
gather_facts: no
tasks:
- name: Add "/etc/hosts"
blockinfile: |
dest=/etc/hosts
content="
192.168.0.10 server
192.168.0.11 node01
192.168.0.12 node02"
- name: Add "/etc/ansible/hosts"
blockinfile: |
dest=/etc/ansible/hosts
content="
[CentOS]
node01
node02"
- name: Install sshpass for Authentication
yum:
name: sshpass
state: present
- name: Install vim-enhanced
yum:
name: vim-enhanced
state: present
- name: Install git
yum:
name: git
state: present
- name: Download pathogen.vim
shell: "curl -fLo /home/vagrant/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim"
- name: Git clone vim-ansible-yaml
git:
repo: 'https://github.com/chase/vim-ansible-yaml.git'
dest: /home/vagrant/.vim/bundle/vim-ansible-yaml
- name: Configure vimrc
lineinfile:
dest: /home/vagrant/.vimrc
line: "{{ item }}"
with_items:
- "set number"
- "execute pathogen#infect()"
- "syntax on"
- name: Configure Bashrc
lineinfile:
dest: /home/vagrant/.bashrc
line: "{{ item }}"
with_items:
- "alias vi='vim'"
- "alias ans='ansible'"
- add_ssh_auth.sh
1. sshpass를 이용해 앤서블 서버에 앤서블 노드의 ssh_key를 등록
#! /usr/bin/env bash
#ssh key 생성
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node01
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node02
- 작성 후 재기동 시에는
1) Ansible-Server를 삭제하고 , vagrant up
=> 이걸로 진행
# vagrant destroy ansible-server
# vagrant up
2) Ansible-Server Provisioning 하고, node01 node02는 따로 vagrant up 하기
- 완료 후, ssh key교환 확인시 .ssh/known_hosts에 값이 잘 들어가있으나 ping 모듈이 작동을 안한다. 왜일까?
=> /etc/ssh/sshd_config 의 PasswordAuthentication no 를 yes 로 수정해줘야한다. (현재 이미지 default 값이 no로 되어있음)
> 방법 1) 앤서블의 플레이북을 통해
=> Ansible-Server 에 적용
---
- name: Ansible_ssh_conf_4_CentOS
hosts: localhost
gather_facts: no
tasks:
- name: PasswordAuthentication change from no to yes
replace:
dest: /etc/ssh/sshd_config
regexp: 'PasswordAuthentication no'
replace: 'PasswordAuthentication yes'
backup: yes
- name: sshd restart to apply "PasswordAuthentication"
service:
name: sshd
state: restarted
> 방법 2) 배시의 셸 프로그래밍을 통해
=> node01, node02 에 적용
#! /usr/bin/env bash
now=$(date +"%m_%d_%Y")
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_$now.backup
sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart sshd
완료 후, ansible-server에서
# ansible all -m ping -k 입력 하면 정상적으로 성공! (ssh 접속도 가능)