안녕하세요, 이 프로젝트를 시작하게 된 이유는 레거시 환경의 네트워크 정보를 전문가가 아닌 사람들도 쉽게 볼 수 있을까? 또 해당 정보를 토대로 Resource management 까지 가능하지 않을까 ? 라는 생각으로 시작하게 되었습니다. 네트워크 장비에 접속해서 명령어로 필요한 부분을 확인하는 방법은 당연히 네트워크 엔지니어라면 매일 반복되는 작업이지만 개발자 등등 장비를 직접 다뤄보지 않은 사람은 해당부분이 쉽지 않을것이라 판단 하여 진행되었습니다.
Systems architecture
Netbox
NetBox는 컴퓨터 네트워크를 관리하고 문서화하도록 설계된 오픈 소스 웹 응용 프로그램입니다. 처음에 DigitalOcean 의 네트워크 엔지니어링 팀이 고안 한 NetBox는 네트워크 및 인프라 엔지니어의 요구를 해결하기 위해 특별히 개발되었습니다.
- netbox.readthedocs.io/en/stable/ (Netbox 어플리케이션 공식 홈페이지)
- github.com/bootc/netbox-chart (Netbox 설치를 위한 Helm 차트)
- github.com/netbox-community/netbox (Netbox community)
helm install netbox --namespace netbox -f values.yaml ~/Documents/netbox
OR
helm repo add bootc https://charts.boo.tc
helm install my-release \
--set postgresql.postgresqlPostgresPassword=[password1] \
--set postgresql.postgresqlPassword=[password2] \
bootc/netbox
※ Netbox 설치시 redis , postgresql 이 함께 설치됩니다.
정상 설치가 완료된 후 Netbox 접속 한 모습
오른쪽 하단에 보시면 Docs , API 를 제공한다는 것을 확인 할 수 있습니다.
- ex) htts://test_netbox.co.kr/api 로 API에 대한 정보를 얻을 수 있습니다 (해당 API 로 GET , POST 등등 RestAPI가 제공됩니다)
이제 Netbox 라는 Resource Management 를 위한 준비가 되었습니다. network 장비의 정보를 netbox로 업로드 하기 위하여 자동화 도
구인 AWX(Ansible Tower형 오픈소스)를 사용하여 정보를 입력하는 코드를 작성해 보겠습니다.
※ Ansible 을 택한 이유는 netbox 관련 module 을 설치하여 손쉽게 사용할 수 있기 때문입니다.
[Network Device]
- cisco_l2_to_netbox.yml
- cisco_l2_inteface_to_netbox.yml
- cisco_l2_interface_to_netbox_test.yml
- cisco_l3_to_netbox.yml
- cisco_l3_vlan_to_netbox.yml
- cisco_l3_ipaddress_to_netbox.yml
- cisco_l3_ipaddress_to_netbox_test.yml
- cisco_config_backup.yml
(_TEST 파일은 Ansible Loop 구조에 대해 저와 같이 고민하시는 분이 있으실까봐 공유드립니다)
- AWX에서 hostvar 를 사용하기 위하여 host를 group별로 정리 하였습니다.
[AWS Resource]
Netbox의 VM 저장구조가 AWS 리소스 값을 표현하기에 부족한 부분이 있어 tag쪽으로 정보를 업로드 하였습니다.
[TIP]
galaxy로 custom 모듈 설치 방법
ansible-galaxy collection install $module_name
pip 명령어를 이용하는 경로 (venv 이외의 경로에서는 설치가 되지 않습니다)
/var/lib/awx/venv/ansible/bin/pip3 install $module_name --user
AWX를 Pod로 띄운경우 재배포시 지워지지 않도록 설정방법
launch-awx-task: |
#!/usr/bin/env bash
echo "pip3 installing.."
/var/lib/awx/venv/ansible/bin/pip3 install pynetbox==4.3.3 --user
/var/lib/awx/venv/ansible/bin/pip3 install PyMySQL --user
echo "check pip3 list"
/var/lib/awx/venv/ansible/bin/pip3 list
[느낀점]
총평
자동화 구성을 통하여 일반사용자도 좀더 편리하게 볼 수 있고, 매번 하던 수작업 만큼의 시간을 확보 할 수 있었습니다. (시간은 금이다..)
TO-BE
- AWX를 사용함에 있어 jinja2 구문을 잘 써야 할것같습니다. 가능하다면 if문 등등을 사용한다면 좀더 깔끔한 정보를 얻을 수 있다고 생각됩니다.
- Netbox는 API에 친화적이어서 구축 및 운영에 큰 장점이 있는것 같습니다.
- AWS , GCP 등등 EC2 뿐만이 아닌 나머지 리소스도 담고 싶습니다. (Cloud 플랫폼을 한눈에 볼 수 있는 Topology? 를 만들수 있을 지도?)
'IT Information > Network' 카테고리의 다른 글
Softether VPN (오픈소스) 사용자 관리 (0) | 2021.03.19 |
---|