본문 바로가기
Virtualization & Cloud Infra/Network Automation

네트워크 자동화 (Network Automation) - (3)

by TwoJun 2024. 8. 8.

2024-08-07(WED)

 

 

 

※ 금일 예정

(1) Rocky, CentOS 9 OS Image 스토리지 데이터스토어로 전송

 

(2) Ansible Infra Automation

- LAB : router  + switch + BGP + ansible (장비 1-2대 설정)

 

(3) Configuration Settings(환경 구성)

 

(4) Ad-hoc Mode

 

(5) Playbook

 

 

※ 금요일 예정 

LAB TEST : router  + switch + BGP + ansible (장비 1-2대 설정)

SUMMARY TEST : [80%] - 괄호 단답형, [20%] - 서술형, 주관식 1문제

 

 

 

01. 전일 내용 - Python automation

(1) 화면 구성 : PYQT5 사용

(2) PYUIC5 기반의 UI 파일을 실제 코드로 동작하는 형태의 .py 파일로 변환

(3) 실제 버튼을 클릭하면 .py 내부의 메서드가 동작하고 메서드 내부의 로직이 실행된다.

 

(4) 실행코드는 전반적으로 아래와 같다.

- 계정, 암호 입력 → Telnet 접속 완료  → ENABLE 모드 전환 → 패스워드 입력 → conf t 모드에서 명령 수행 → 파이썬 내부 코드인 tr.write() 코드를 통해 입력한 명령에 대한 처리 내역 확인 가능

 

(5) 이러한 Python 기반의 자동화 코드는 Idempotent를 보장하지 않는다.

 

(6) 프로그래밍 코드로 반복적인 작업을 수행하려고 하면, 코드 로직상, 이전 작업의 내역이 남아있어서 이 부분을 초기화를 매번 시켜줘야 하는 번거로움이 발생한다.

 

(7) 따라서 Idempotent 를 보장하는 Ansible을 사용하면 자동화 작업을 효율적으로 처리할 수 있게 된다.

 

 

 

 

 

02. 전일 내용 - Ansible Infra Automation 

02-1. Ansible

(1) Ansible은 프로비저닝, 환경 설정, 애플리케이션 배포 등 인프라 관리가 고도화되고 복잡해짐에 따라 이러한 부분들을 보다 효율적으로 처리하기 위한 오픈소스 기반 자동화 소프트웨어를 말한다. 

 

(2) 인프라 구성 장비가 이전에 비해 급격하게 증가함에 따라 자동화의 필요성이 높아졌다.

- 서비스 요구사항의 급격한 변화, 가상화, 클라우드 컴퓨팅의 발전함에 따라 인프라의 집적도가 증가한 상황

 

(3) Ansible은 RedHat에서 운영하고 관리하고 있다.

 

 

 

02-2. Ansible 특징

(1) 특정 관리 도구인 에이전트가 필요하지 않다.

- SSH protocol을 통해 관리 노드와 통신하게 된다.

 

(2) Idempotent가 보장된다.

 

(3) 쉬운 사용법이 특징이며 다양한 모듈을 제공한다.

 

 

 

02-3. 실행 환경

(1) 제어 노드는 Linux 기반의 실행환경을 갖는다.

- Python이 설치되어 있어야 한다.

 

(2) 관리 노드는 Linux, Windows OS에서도 실행 가능하다. (가상화, 클라우드 솔루션, 네트워크 디바이스)

- 마찬가지로 Python이 설치되어 있어야 한다.

 

 

 

02-4. 구성 요소

(1) 제어 노드

-  Ansible Core

- 인벤토리(관리 노드들의 리스트 파일)

- 플레이북( 관리 노드에서 수행할 작업을 YAML 문법을 통해 순서대로 작성해 놓은 파일)

 

(2) 관리 노드

- Python 환경이 구성되어 있어야 함

 

 

 

02-5. 제품군 : 오픈소스 기반으로 아래와 같은 두 가지 제품군이 존재

(1) Community Ansible

- 누구나 사용 가능한 버전의 Ansible이다.

 

(2) RedHat Ansible Automation Platform 

- 상용 버전의 Ansible이다.

 

 

 

 

 

 

1. Ansible-Server(CentOS) Configuration Settings

1-1. Command : nmtui

 

(1) 해당 명령을 통해 각 이더넷에 대한 주소 대역 변경, 호스트 이름 등 수정이 가능하다.

 

 

 

 

1-2. ip addr, ifconfig

(1) ifconfig는 기본적인 네트워크 인터페이스 설정 및 상태 확인 기능을 제공하고 있다. 하지만 최신 네트워크 기능이나 복잡한 설정에 대한 지원이 부족하다.

 

(2) ip addr은 더 많은 기능과 유연성을 제공하며, 네트워크 인터페이스를 더 세밀하게 제어할 수 있다.

 

 

 

 

1-3. systemctl

(1) systemctl은 리눅스 시스템에서 시스템과 서비스의 상태를 관리하고 제어하기 위한 명령어를 의미한다.

 

 

 

 

1-4. ifdown [인터페이스명] / ifup [인터페이스명]

(1) ifdown : 해당 네트워크의 인터페이스를 Disable하는 명령어 / ifup :인터페이스를 Enable하는 명령어

 

 

 

 

 

 

 

2. Ansible Installation

2-1. Ansible Installation

(1) 실습 환경이 구성되면 가상 서버의 주소 대역을 설정하고 인터넷에 연결되면 Ansible을 설치한다.

 

(2) 기본적으로 epel-release 커맨드로 CentOS Package Repository를 설치한다. 

 

 

 

 

 

 

 

 

 

3. Rocky(Ansible-Server II), Ubuntu(T-Node II) Installation

3-1. Rocky OS Installation 

(1) OS/Rocky-9.4-x86_64-dvd.iso (Ansible-Server II)

- VM 이름 설정

 

(2) 이전에 설치했던 설정을 그대로 유지하고 부팅 이미지 파일을 OS/Rocky-9.4-x86_64-dvd.iso으로 선택해서 부팅한다.

 

 

(3) 주소 대역을 설정한다.

 

(4) 루트는 시스템 관리자, 시스템 전체 설정에 관여할 수 있는 역할이며 잠글 경우 루트 계정이 막히게 된다. 또한 SSH 원격 접속을 허용할지도 물어보는데 아래만 체크 후 진행한다.

 

 

 

(5) 모든 사항을 지정한 후 설치를 시적한다.

 

 

 

 

3-2. Ubuntu OS Installation(tnode2-ubuntu)

(1) 새로운 관리 노드를 생성한다.

 

 

 

해상도를 바꾸고 설치 프로그램을 재실행한다.

 

 

 

(1) Ubuntu 설치를 마치고 재시작을 진행한 뒤 나머지 기타 설정까지 마무리되면 설치 과정이 완료된다.

 

 

 

 

 

 

4.  자동화 대상 호스트 선정 및 Ansible Command Test

4-1. tnode2

(1) 주소 대역 할당 인터넷 연결

(2) 호스트 이름 및 주소대역 & 연결 설정 : nmtui

 

 

(2) Ansible-s에서 게이트웨이 주소로 ping test

 

(3) NatServer에서 Ansible-s으로 ping test

 

 

 

 

4-2. ansible-server2(ansible-server)로 접속해서 ansible install

(1) dnf install epel-release

 

(2) dnf install ansible

(3) 설치 후 버전 확인 : ansible --version

 

 

 

 

4-3. ~/ cd etc → gedit hosts : 호스트명을 이용한 인벤토리 파일 생성

(통신 대역)      (노드 이름, 호스트명)

192.168.100.4   ansible-server

192.168.100.5   tnode1-centos

192.168.100.6   tnode2-ubuntu

192.168.100.7   tnode3-centos

192.168.100.8   tnode4-centos

 

(1) 앤서블이 호스트명으로 관리 노드에 접근할 수 있도록 IP 주소와 호스트명을 etc/hosts에 위와 같이 등록한다.

 

(2) 이렇게 주소와 호스트명 간의 관계를 통해 매핑이 이루어지는 이유는, hosts 파일의 역할대로 호스트를 식별하고 그룹핑하고 관리하며 유지보수 및 가독성을 올리도록 설계되어 있기 때문이다.

 

 

 

 

4-4. 원격 접속 수행

(1) ssh root@192.168.100.5, ssh root@tnode1-centos (원격 접속 여부 확인)

- 위에서 등록한 것처럼 SSH 접속을 통신 대역, 호스트명 별로 모두 수행해야 SSH 접속에 대한 키 값이 생성된다.

- 키값 생성 위치 : .ssh/known_hosts

 

- 4-3에서 설정한 대로 ssh 연결을 수행하는 이유는 ansible 기반 명령들이 ssh 통신으로 진행됨에 따라 ssh 통신 세션과 관련된 키 값을 .ssh/known_hosts에 저장하고 해당 파일에 저장된 키값을 기반으로 연결 수립 및 작업이 진행된다.

 

- 이에 따라 물리적 연결이 잘 이루어지는지 확인함은 물론, ssh 연결 성공 후 이에 대한 키값을 파일에 저장하고 관리하기 위함이다.

 

- SSH 접속 키 값이 다 반영되었는지 확인 -> 루트 경로 기준으로 cd root/.ssh → cat known_hosts

 

- 이후에 다른 가상머신쪽으로 ping 확인, 원격접속 확인

 

ex) ping ansible-serve

 

 

(2) history 명령어로 사용자가 과거에 준 명령어들을 확인할 수 있다.

 

 

 

 

4-5. 그룹별 호스트 지정 

(1) 그룹별로 호스트를 설정하여 사용하면 ansible playbook 실행 시 그룹별로 작업을 처리할 수 있게 된다.

 

(2) [] 대괄호로 그룹명 작성 후 호스트명 또는 주소 대역을 명시한다.

 

(3) 아래 Config 파일로 접속 : ~/ etc/ansible/hosts (/ 기준으로의 경로)

 

(4) 위의 경로로 접속한 후 그룹별 호스트 지정을 위한 명령 수행 : gedit hosts

 

 

 

 

4-6. 결과 확인

(1) ansible all -m ping -k (/etc/ansible에서 진행)

- ansible all -m ping -k 명령어는 Ansible의 ping 모듈을 사용하여 모든 호스트에 대해 연결을 테스트하는 데 사용

 

 

(2) ansible centos(그룹명) -m ping -k

- 명시적으로 그룹 내부에 지정해준 관리 노드들을 대상으로 ping test 

 

 

 

 

 

 

 

5. Reference

(1) Ansible로 시작하는 인프라 자동화(Infrastructure Automation)

https://www.hanbit.co.kr/store/books/look.php?p_code=B2465301723

 

앤서블로 시작하는 인프라 자동화

“효율적인 IT 자동화를 위한 도구, 앤서블”

www.hanbit.co.kr

※ 해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.

개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!

댓글