Information Security Study
앤서블 개요, 환경설정하기 본문
앤서블 개요
- IT 인프라를 자동화하고 관리하는 도구로 주로 설정 관리(Configuration Management), 애플리케이션 배포, 작업 자동화 및 오케스트레이션 등을 위해 사용한다.
1. 앤서블의 기본 개념
- 에이전트리스(Agentless)
- 앤서블의 가장 큰 특징 중 하나는 에이전트리스라는 점이다.
- 앤서블을 사용하려면 별도의 소프트웨어 에이전트를 관리 대상 시스템에 설치할 필요가 없다.
- SSH 프로토콜을 통해 원격으로 시스템에 접근하여 작업을 수행하므로 대상 서버에 SSH 접근 권한만 있으면 된다.
- 데클러러티브(declarative) 방식
- 앤서블은 "무엇을" 해야 하는지를 명확히 기술하는 선언형 방식으로 동작한다.
- ex) 서버에 특정 패키지를 설치하거나 특정 파일의 내용이 어떻게 되어야 하는지를 정의하면 앤서블은 해당 상태에 도달하기 위해 필요한 작업을 수행한다.
- 플레이북(Playbook)
- 앤서블 작업의 주요 구성 요소는 플레이북이다.
- 플레이북은 YAML 형식으로 작성되며 여러 개의 작업 단계를 정의할 수 있다.
- 플레이북 기반으로 앤서블은 정의된 작업을 순차적으로 실행한다.
2. 앤서블의 주요 구성 요소
- 플레이북(Playbook)
- 작업의 정의가 들어 있는 파일로 여러 태스크(tasks)를 포함한 일련의 자동화 단계를 기록한다.
- YAML 형식으로 작성된다.
- 하나의 플레이북은 여러 개의 "플레이(plays)"로 구성되며 각 플레이는 하나 이상의 호스트 그룹에 적용된다.
- 모듈(Modules)
- 앤서블은 다양한 모듈을 통해 구체적인 작업을 실행한다.
- 모듈은 파일 복사, 패키지 설치, 서비스 관리 등의 작업을 수행하는 작은 스크립트다.
- 대표적인 모듈로는 yum, apt, service, command, copy 등이 있다.
- 인벤토리(Inventory)
- 앤서블이 관리하는 호스트 목록을 정의하는 파일이다.
- 기본적으로 /etc/ansible/hosts 파일에 관리 대상 호스트들을 정의할 수 있으며 그룹을 나누어 관리할 수도 있다.
- 호스트는 IP 주소 또는 DNS 이름으로 정의되며 다양한 그룹으로 분류할 수 있다.
- 롤(Roles)
- 롤은 플레이북을 보다 효율적으로 관리하기 위한 방식으로 태스크, 핸들러, 변수, 템플릿, 파일 등을 구조적으로 조직화하여 재사용할 수 있게 한다.
- 큰 규모의 자동화 작업에서 유용하다.
- 핸들러(Handlers)
- 특정 이벤트가 발생했을 때 실행되는 태스크로 보통 조건부로 실행된다.
- ex) 설정 파일을 변경한 후 서비스를 재시작해야 할 경우 핸들러를 사용할 수 있다.
- 템플릿(Templates)
- 앤서블에서 템플릿은 Jinja2 템플릿 엔진을 사용하여 구성 파일을 동적으로 생성하는 데 사용된다.
- 플레이북에서 변수 값을 사용해 템플릿 파일의 내용을 생성하고 대상 시스템에 배포할 수 있다.
3. 앤서블의 작동 원리
앤서블은 주로 컨트롤 노드(Control Node)와 매니지드 노드(Managed Node)로 구성된다.
- 컨트롤 노드
- 앤서블 명령을 실행하는 시스템이다.
- 플레이북을 작성하고 실행하며 SSH를 통해 매니지드 노드와 통신한다.
- 매니지드 노드
- 컨트롤 노드가 관리하는 대상 시스템들이다.
- 앤서블은 SSH 연결을 통해 매니지드 노드에 접속하여 작업을 수행한다.
4. 앤서블의 주요 특징
- 간단하고 직관적인 사용
- 앤서블은 YAML을 기반으로 하여 쉽게 이해할 수 있는 구조를 가지고 있다.
- 복잡한 구문 없이도 자동화 작업을 정의할 수 있다.
- 확장성
- 앤서블은 모듈 기반 구조로 확장 가능하며 필요한 경우 사용자 정의 모듈을 작성하여 추가할 수 있다.
- 멀티 플랫폼 지원
- 리눅스, 윈도우, 클라우드 환경 등 다양한 플랫폼을 지원한다.
- 커뮤니티 및 상용 지원
- 오픈소스 프로젝트로서 강력한 커뮤니티의 지원을 받으며 Red Hat Ansible Tower라는 상용 버전을 통해 대규모 환경에서도 안전하게 사용할 수 있다.
5. 앤서블의 주요 활용 사례
- 서버 설정 관리
- 앤서블을 사용하여 여러 서버에 대해 일관된 설정을 적용하고 관리할 수 있다.
- ex) 웹 서버, 데이터베이스 서버 등의 설정을 자동화할 수 있다.
- 애플리케이션 배포
- 새로운 애플리케이션을 배포하거나 기존 애플리케이션의 업데이트 작업을 자동으로 수행할 수 있다.
- CI/CD 파이프라인 구성
- 앤서블을 사용하여 지속적 통합/지속적 배포(CI/CD) 파이프라인에서 서버와 애플리케이션의 자동화를 수행할 수 있다.
- 클라우드 인프라 관리
- AWS, GCP, Azure 등의 클라우드 인프라에 대해 리소스를 프로비저닝하고 관리할 수 있다.
6. 앤서블의 장점과 단점
장점
- 간편한 학습 곡선
- YAML 기반의 간단한 구문 덕분에 사용하기 쉬워 IT 자동화 입문자에게 적합하다.
- 에이전트리스
- 추가 에이전트를 설치할 필요가 없으므로 유지 관리가 간편하다.
- 다양한 모듈 제공
- 네트워킹, 클라우드, 컨테이너, 데이터베이스 등 다양한 영역을 지원하는 모듈을 제공한다.
단점
- 속도 문제
- 에이전트리스 특성상 대규모 환경에서 SSH 통신을 통해 작업이 이루어지므로 퍼포먼스 측면에서 일부 제한이 있을 수 있다.
- 복잡한 작업에 대한 한계
- 매우 복잡한 논리적인 흐름을 처리할 때는 플레이북이 복잡해질 수 있으며 다른 도구에 비해 처리하는 데 한계가 있을 수 있다.
앤서블 환경설정하기
# sudo apt -y update
# sudo apt -y upgrade
# sudo apt -y install ansible sshpass
# ansible --version
ansible 2.10.8
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
위 명령어들로 앤서블을 설치한다.
앤서블은 ssh 기반으로 명령을 수행하기 때문에 sshpass 패키지도 설치해야 한다.
$ sudo mkdir /etc/ansible
$ sudo nano /etc/ansible/hosts
위 파일에서 앤서블의 작업 타겟이 될 인스턴스들을 호스트로 등록할 수 있다.
[target]
ip 적기
추가 아이피가 있다면 줄로 구분해서 계속 적기...
[추가그룹명]
추가아이피들...
위와 같이 그룹명 하위에 ip를 적으면 된다.
그리고 원격지에서 앤서블 서버가 보낸 스크립트를 실행해야 하기 때문에 공개키/비밀키 설정을 해야 한다.
$ ssh-keygen -t rsa -b 4096
rsa 키를 만든 후 공개키를 타겟 인스턴스의 ~/.ssh/authorized_keys 파일에 붙여넣으면 된다.
'네트워크 캠퍼스 > 3차 프로젝트' 카테고리의 다른 글
ansible galaxy로 원하는 롤, 콜렉션 찾기 (0) | 2024.08.26 |
---|---|
엔서블 플레이북 사용하기 (0) | 2024.08.26 |
ISMS (0) | 2024.08.26 |
failover 동작 원리와 실습하기 (0) | 2024.08.26 |
트래픽 폭주 제어하기 (0) | 2024.08.19 |