Ansible 이란
- Ansible은 IaC 도구의 한 종류이다. 즉, 말그대로 인프라를 자동화 할 수 있는 도구이다. Ansible로 호스트들을 관리 및 구성하고, 배포를 자동화 할 수 있다.
- Ansible은 openSSH를 기본 전송 방법으로 사용한다. 따라서 보안과 신뢰성을 가지고 통신한다.
- Ansible에서는 에이전트 없이 Ansible이 바로 호스트들을 관리한다.
- Ansible은 절차적으로 수행된다. 작업이 정해진 순서대로 실행되어서 원하는 상태에 도달한다.
IaC (Infrastructure as Code)
전통적인 인프라 환경에서는 수동으로 각각의 인프라를 구성해주어야 했다. 수동으로 관리하게 되면, 작업 속도도 느리고 사람이 수동으로 구성하다보니 실수와 같은 문제가 일어날 수 있다. 또한 비용적 측면에서도 비효율적이다.
이러한 문제점을 해결해주는 것이 IaC이다. 인프라를 구성할 때 인프라 정의 파일로 인프라를 구성, 관리, 배포할 수 있게 하는 것이 바로 IaC 이다. IaC는 구성 관리 도구와 배포 도구로 나뉘게 된다.
- 구성 관리 도구 : Ansible, Chef ..
- 배포 도구 : Terraform, AWS CloudFormation, Open Stack ..
Ansible은 IaC 도구들 중에서 구성 관리를 도와주는 도구에 해당한다.
가변 인프라 vs 불변 인프라
구성 관리 도구들은 인프라들 중에서도 가변 인프라를 관리하는 데에 유용하다. 여기서 가변 인프라란, 인프라에서 각 서버가 독립적으로 관리되어야 할 필요가 있는 경우를 말한다. 독립적으로 관리되어서 각 서버에 별도의 구성 작업을 해 주어야 한다.
가변 인프라와 달리, 불변 인프라는 도커에서의 이미지를 떠올려 보면 쉽게 이해할 수 있다. 이미지의 경우 메모리에 올라가서 컨테이너로 실행되기 이전까지는 내용을 변경할 수 없다. (read-only) 즉, 배포 이후에 변경되지 않는 인프라가 바로 불변 인프라이다.
Ansible Architecture
Ansible의 아키텍처는 위와 같다. 사용자가 Ansible을 통해 Playbook을 생성해서 여러개의 작업을 절차적으로 수행할 수 있다. 또는 Ad Hoc 명령어를 통해 간단한 작업을 직접 커맨드로 수행할 수 있다.
- Inventory: Ansible에서 관리하는 노드들에 대한 정보이다. 또한 관리하는 노드들에 대해 호스트 이름, IP를 저장한다.
- Modules: Ansible을 실행하는 코드의 단위이다. 모듈로 패키지를 설치하거나 각 노드에 작업을 실행시킬 수 있다. 또한 DB 사용자 관리, Host들에 패키지 설치 등의 작업을 할 수 있다.
- Plugins: Ansible에서 기능을 확장하여 사용할 수 있게 한다. ex) Httpapi
Ansible은 Control node가 다른 node들을 관리할 수 있다. 주의할 점은 Control Node는 Unix 계열만 지원한다. (윈도우 X) 반면 관리되는 Node들은 상관없이 대부분의 운영체제에서 동작한다. 그리고 Node 들간 통신은 OpenSSH 프로토콜을 사용한다.
모듈을 확인하는 명령어는 다음과 같다.
ansible-doc -l # 모든 모듈 확인
ansible-doc MODULE_NAME # 특정 모듈 확인
OpenSSH 프로토콜
SSH 는 Secure Shell의 약자이고, 원격 호스트에 안전하게 접속하기 위한 인터넷 프로토콜이다. 기존에 원격 접속을 하기 위해서는 텔넷이라는 프로토콜이 사용되었으나, 텔넷은 암호화 과정이 없어서 데이터가 탈취되거나 노출될 수 있으므로 보안에 취약하다.
반면 SSH는 암호화를 추가하여 안전하게 통신을 할 수 있다.
OpenSSH에는 SSH Key 기반 인증과 SSH Password 기반 인증이 있다. Ansible을 설치할 때 둘 중에 하나를 사용하면 된다.
이 중에서 SSH Key 기반 인증을 사용하는 경우 클라이언트는 서버에 접속할 때 key를 제출한다. SSH Client가 SSH 접속을 시도하면 로컬의 비공개키와 원격 호스트의 비공개키를 비교한다.
'Cloud Engineering > Ansible' 카테고리의 다른 글
[Ansible] Playbook 변수 사용하기 / vars_prompt / filter (필터) / lookup (조회) (0) | 2023.02.28 |
---|---|
[Ansible] Playbook (플레이북) 이란? (0) | 2023.02.28 |
[Ansible] Ansible 설정 파일 ansible.cfg (0) | 2023.02.27 |
[Ansible] Ad-Hoc 명령 (0) | 2023.02.27 |
[Ansible] Inventory (인벤토리) 란? (1) - 정적 인벤토리 (0) | 2023.02.27 |