[Cloud] Vagrant, Ansible

MeltingOlafยท2022๋…„ 4์›” 12์ผ

[Cloud]

๋ชฉ๋ก ๋ณด๊ธฐ
1/25

โญ Vagrant


  • Vagrantfile ์ƒ์„ฑ
vagrant init <IMAGE>
  • VM ์ƒ์„ฑ ๋ฐ ๋ถ€ํŒ…
vagrant up [VM_NAME]
  • VM ์žฌ๋ถ€ํŒ…
vagrant reload [VM_NAME]
  • VM ์ข…๋ฃŒ
vagrant halt [VM_NAME]
  • VM ์‚ญ์ œ
vagrant destroy [VM_NAME]
  • VM SSH ์ ‘์†
vagrant ssh [VM_NAME]

โญ Ansible


  • Ansible ์„ค์น˜
    controller
sudo yum install centos-release-ansible-29 -y
sudo yum install ansible -y
  • ์„ค์น˜ ํ™•์ธ
ansible --version
  • ์ธ๋ฒคํ† ๋ฆฌ
vi inventory.ini

inventory.ini

192.168.100.11
192.168.100.12

Ad-hoc ๋ช…๋ น:


  • yum ๋ชจ๋“ˆ๋กœ httpd ํŒจํ‚ค์ง€ ์„ค์น˜
ansible 192.168.100.11 -i inventory.ini -m yum -a "name=httpd state=present" -b
  • ansible: ad-hoc ๋ช…๋ น
  • 192.168.100.11: ๊ด€๋ฆฌ ๋…ธ๋“œ(์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ ์ •์˜ ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ)
  • -i inventory.ini: ์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ๋ช…
  • -m yum: ๋ชจ๋“ˆ ์ด๋ฆ„
  • -a: ๋ชจ๋“ˆ ํŒŒ๋ผ๋ฏธํ„ฐ
  • -b: ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ์ทจ๋“(become --> sudo)
  • service ๋ชจ๋“ˆ๋กœ httpd ์„œ๋น„์Šค ์‹œ์ž‘
ansible 192.168.100.11 -i inventory.ini -m service -a "name=httpd state=started enabled=yes" -b
  • Playbook:

apache_install.yaml

- hosts: 192.168.100.11
  tasks:
  - yum:
      name: httpd
      state: present
  - service:
      name: httpd
      enabled: yes
      state: started
ansible-playbook -i inventory.ini apache_install.yaml -b

โญ Ansible ํ™˜๊ฒฝ ์„ค์ •


~/vagrant/ansible/Vagrantfile

Vagrant.configure("2") do |config|
	# Define VM
	config.vm.define "controller" do |centos|
		centos.vm.box = "centos/7"
		centos.vm.hostname = "controller"
		centos.vm.network "private_network", ip: "192.168.100.10"
		centos.vm.provider "virtualbox" do |vb|
			vb.name = "controller"
			vb.cpus = 2
			vb.memory = 2048
		end
	end
	# Define VM
	config.vm.define "node1" do |centos|
		centos.vm.box = "centos/7"
		centos.vm.hostname = "node1"
		centos.vm.network "private_network", ip: "192.168.100.11"
		centos.vm.provider "virtualbox" do |vb|
			vb.name = "node1"
			vb.cpus = 2
			vb.memory = 2048
		end
	end
	# Define VM
	config.vm.define "node2" do |centos|
		centos.vm.box = "centos/7"
		centos.vm.hostname = "node2"
		centos.vm.network "private_network", ip: "192.168.100.12"
		centos.vm.provider "virtualbox" do |vb|
			vb.name = "node2"
			vb.cpus = 2
			vb.memory = 2048
		end
	end
end
  • ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ
    - UTF-8
    - UTF-16

  • ๋ผ์ธ์˜ ๋
    - CRLF: Windows
    - LF: Unix-like

vagrant up

node1 ํŒจ์Šค์›Œ๋“œ ์ธ์ฆ ํ™œ์„ฑํ™”

node1

vagrant ssh node1

sudo vi /etc/ssh/sshd_config

PasswordAuthentication yes

sudo systemctl restart httpd

node2 ํŒจ์Šค์›Œ๋“œ ์ธ์ฆ ํ™œ์„ฑํ™”

node2

vagrant ssh node2

sudo vi /etc/ssh/sshd_config

PasswordAuthentication yes

sudo systemctl restart httpd

controller

controller

vagrant ssh controller

ssh-keygen

ssh-copy-id vagrant@192.168.100.11
ssh-copy-id vagrant@192.168.100.12

โญ SSH


  • /etc/ssh/<Key_Pair>
  • ~/.ssh/<Key_Pair>
  • ~/.ssh/known_hosts
  • ~/.ssh/authorized_keys
  • ~/.ssh/config

A(Client) ---SSH---> B(Server)

ํŒจ์Šค์›Œ๋“œ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ

  1. A๋Š” B์˜ ๊ณต๊ฐœํ‚ค
    • /etc/ssh/ssh_host_<Algorithm>.pub
    • /etc/ssh/ssh_host_<Algorithm>
      - RSA
      - DSA
      - ECDSA
  2. (B ์‹œ์Šคํ…œ์— ์ตœ์ดˆ ์ ‘์†์‹œ)
    A์˜ ์‹œ์Šคํ…œ์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ B์˜ ๊ณต๊ฐœํ‚ค(์ง€๋ฌธ) ๋งž๋Š”์ง€ ํ™•์ธ?
    - YES
  3. A์˜ ~/.ssh/known_hosts ํŒŒ์ผ์— B์˜ ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
    • B์˜ IP/Domain
    • B์˜ ๊ณต๊ฐœํ‚ค
  4. ID/PWD ๋ฌป๋Š”๋‹ค!(์ธ์ฆ)

ํ‚ค ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ

  1. A์—์„œ (์ธ์ฆ์šฉ)ํ‚ค ์Œ์„ ์ƒ์„ฑ
    ssh-keygen
    ~/.ssh/id_rsa: ๊ฐœ์ธํ‚ค
    ~/.ssh/id_rsa.pub: ๊ณต๊ฐœํ‚ค
  2. B์— A์˜ ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
    • B ์‹œ์Šคํ…œ์˜ ~/.ssh/authorized_keys : ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
    • EC2(ํด๋ผ์šฐ๋“œ ์ธ์Šคํ„ด์Šค): A์—์„œ ์ง€์ •ํ•œ A์˜ ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
    • BM, VM: ssh-copy-id ๋ช…๋ น์œผ๋กœ ๋“ฑ๋ก
      - B์— ํŒจ์Šค์›Œ๋“œ ์ธ์ฆ ๋ฐฉ๋ฒ•์ด ํ™”์„ฑํ™” ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
  3. (B ์‹œ์Šคํ…œ์— ์ตœ์ดˆ ์ ‘์†์‹œ)
    A์˜ ์‹œ์Šคํ…œ์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ B์˜ ๊ณต๊ฐœํ‚ค(์ง€๋ฌธ) ๋งž๋Š”์ง€ ํ™•์ธ?
    - YES
  4. A์˜ ~/.ssh/known_hosts ํŒŒ์ผ์— B์˜ ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
    • B์˜ IP/Domain
    • B์˜ ๊ณต๊ฐœํ‚ค
  5. A์˜ ๊ฐœ์ธํ‚ค๋กœ ์ธ์ฆ

๊ธฐ๋ณธ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž

  • Amazon Linux: ec2-user
  • Ubuntu: ubuntu
  • Debian: debian
  • Centos: centos
  • RHEL: cloud-user
  • vagrant: vagrant
  • ...

์„œ๋ฒ„์˜ SSH ๊ณต๊ฐœํ‚ค ์ง€๋ฌธ ํ™•์ธ

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

์„œ๋ฒ„์˜ SSH ๊ณต๊ฐœํ‚ค ๋ฏธ๋ฆฌ ํ™•์ธ

ssh-keyscan 192.168.100.11
ssh-keyscan -t <rsa|ecdsa> 192.168.100.11
  • ์ง€๋ฌธ ํ™•์ธ
ssh-keyscan -t ecdsa 192.168.100.11 | ssh-keygen -l -f -
  • ๋ฏธ๋ฆฌ ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
ssh-keyscan -t ecdsa 192.168.100.11 >> ~/.ssh/known_hosts
  • /etc/ssh/ssh_config: ํด๋ผ์ด์–ธํŠธ ์„ค์ • ํŒŒ์ผ
  • /etc/ssh/sshd_config: ์„œ๋ฒ„์˜ ์„ค์ • ํŒŒ์ผ

/etc/ssh/sshd_config

PasswordAuthentication no # ํŒจ์Šค์›Œ๋“œ ์ธ์ฆ
GSSAPIAuthentication yes # ํ‚ค ์ธ์ฆ

ํ‚ค ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ตฌ์„ฑ

  • Client
ssh-keygen

๐Ÿ’ก ์‹ค์ œ์—์„œ๋Š” ํŒจ์Šคํผ๋ ˆ์ด์ฆˆ๋ฅผ ์„ค์ •

ssh-keyscan -t ecdsa 192.168.100.11 >> ~/.ssh/known_hosts
ssh-keyscan -t ecdsa 192.168.100.12 >> ~/.ssh/known_hosts
ssh-copy-id vagrant@192.168.100.11
ssh-copy-id vagrant@192.168.100.12

Windows --> Vagrant SSH ์ ‘๊ทผ

vagrant ssh <VM_NAME>

ssh -i .\.vagrant\machines\controller\virtualbox\private_key 192.168.100.10

ssh -i .\.vagrant\machines\node1\virtualbox\private_key vagrant@192.168.100.11

 ssh -i .\.vagrant\machines\node2\virtualbox\private_key vagrant@192.168.100.12

SSH ํด๋ผ์ด์–ธํŠธ ์„ค์ • ํŒŒ์ผ

~/.ssh/config

Host controller
    HostName 192.168.100.10
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\controller\virtualbox\private_key

Host node1
    HostName 192.168.100.11
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\node1\virtualbox\private_key

Host node2
    HostName 192.168.100.12
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\node2\virtualbox\private_key
profile
How R U Today :)

0๊ฐœ์˜ ๋Œ“๊ธ€