실습 개요
아키텍처
- Ansible-Server (control-node): 1대
- Ansible-Nodes (host-node): 2대
Vagrantfile 구성
1. 앤서블 노드 2개를 CentOS를 이용하여 구성
2. 기존과 동일한 방법으로 구성 파일 작성
1) 베이그런트에서 인식하는 호스트 이름 지정
2) 버추얼박스 설정 변경
- 버추얼박스에서 구분하는 호스트 이름 지정
- CPU와 메모리를 최소한으로 사용하도록 변경
3) 가상 머신의 호스트 이름 변경
4) 호스트 PC와 가상 머신의 공유 디렉토리 사용 X
5) 인터넷에 연결되는 IP 설정
6) 호스트 PC의 포트를 IP 주소와 유사하게 변경
7) 앤서블 서버에서 add_ssh_auth.sh 실행
Ansible_env_ready.yml 구성
1. /etc/hosts에 서버와 노드 등록2. /etc/ansible/hosts에 앤서블을 통해 관리할 노드 등록3. yum을 통해서 앤서블 서버에 sshpass 설치
add_ssh_auth.sh 구성
1. sshpass를 이용해 앤서블 서버에 앤서블 노드의 ssh_key 등록2. 해당 파일의 목적: 노드의 ssh 키를 non-host에 등록하기 위함
Vagrantfile 구성
# -*- 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"
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: "172.30.1.110"
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"
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: "172.30.1.120"
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"
end
cfg.vm.host_name = "ansible-server"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.network "public_network", ip: "172.30.1.100"
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 구성
blockinfile: 블록 단위로 수정, 파이프( | )를 필수로 입력
---
- name: Setup for the Ansible's Environment
hosts: localhost
gather_facts: no
tasks:
- name: Add "/etc/hosts"
blockinfile: |
path=/etc/hosts
content="
172.30.1.100 server
172.30.1.110 node01
172.30.1.120 node02"
- name: Add "/etc/ansible/hosts"
blockinfile: |
path=/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:
path: /home/vagrant/.vimrc
line: "{{ item }}"
with_items:
- "set number"
- "execute pathogen#infect()"
- "syntax on"
- name: Configure Bashrc
lineinfile:
path: /home/vagrant/.bashrc
line: "{{ item }}"
with_items:
- "alias vi='vim'"
- "alias ans='ansible'"
- "alias anp='ansible-playbook'"
add_ssh_auth.sh 구성
StrictHostKeyChecking=no: ssh 접속 시 ssh 키 확인 경고창을 확인하지 않겠다는 옵션
#! /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
vagrant up
기존의 앤서블 서버 삭제 후 진행
PS C:\HashiCorp\udemy-ansible> vagrant destroy ansible-server
ansible-server: Are you sure you want to destroy the 'ansible-server' VM? [y/N] y
PS C:\HashiCorp\udemy-ansible> vagrant up
구성 완료
적용 사항 확인
# 노드 정보 확인
[vagrant@ansible-server ~]$ cat .ssh/known_hosts
node01,172.30.1.110 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP5AG7RgArSxOru587iWE6EpQtq5AnVf/zkMng3s8CqEq8+SSzPTuroQylfCkIIun8tiErQtF5HbCjqqpuWCKV4=
node02,172.30.1.120 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLUjlCIUB5zGlm9CD240edVQUendXDjzjMSdl8sFie6Cy552TVXeBCTVwgGbCVeOEm8XzrdSpj2Tq1G4Hv3JF2E=
# 앤서블에서 관리하는 블록 정보 확인
[vagrant@ansible-server ~]$ cat .ssh/known_hosts
# BEGIN ANSIBLE MANAGED BLOCK
172.30.1.100 server
172.30.1.110 node01
172.30.1.120 node02
# END ANSIBLE MANAGED BLOCK
[vagrant@ansible-server ~]$ cat /etc/ansible/hosts
# BEGIN ANSIBLE MANAGED BLOCK
[CentOS]
node01
node02
# END ANSIBLE MANAGED BLOCK
앤서블 서버와 노드 간의 통신 확인
[vagrant@ansible-server ~]$ ans all -m ping -k
SSH password:
node01 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
"unreachable": true
}
node02 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
"unreachable": true
'Ansible' 카테고리의 다른 글
220608_3_앤서블_응용_앤서블 노드에 nginx 구성 (0) | 2022.06.08 |
---|---|
220608_2_앤서블_응용_앤서블 서버와 노드 간 통신 설정-sshd_config (0) | 2022.06.08 |
220607_1_앤서블_응용_플레이북 제작 환경 구성 (0) | 2022.06.08 |
220603_2_앤서블_응용_Vagrantfile 수정 및 bootstrap.sh 생성 (0) | 2022.06.03 |
220603_1_앤서블_응용_vagrant를 이용한 프로비저닝 (0) | 2022.06.03 |