본문으로 바로가기

https://www.inflearn.com/course/ansible-%EC%9D%91%EC%9A%A9

 

[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의

센트OS 이외에 얼마나 다양한 시스템에 엔서블이 사용될 수 있는지 배워봅시다. 앤서블을 리눅스 이외에 윈도우 및 네트워크 시스템과 같은 여러가지 시스템에 대해서 다양한 목적으로 사용하

www.inflearn.com

 

ㅇ 앤서블 노드 추가하기

- 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 접속도 가능)