CISCO NSO
1. Cisco NSO 개요
- NSO란?
- 네트워크에 배포할 서비스 인스턴스를 생성하는 메커니즘
서비스 인스턴스: 클라우드 컴퓨팅 환경에서 특정 서비스나 어플리케이션을 실행하기 위해 할당된 가상 머신 - 멀티 벤더 네트워크 자동화 및 오케스트레이션 플랫폼( = 자동관리 서비스)
- 관리하는 네트워크 장치의 구성상태를 CDB (구성 데이터베이스)에 수집, 분석 및 저장
- 네트워크에 배포할 서비스 인스턴스를 생성하는 메커니즘
- 핵심 가치
- 네트워크 장비 설정을 서비스 중심으로 추상화
- 단일 인터페이스로 다양한 벤더 장비 관리
- 설정 변경의 자동화 및 오케스트레이션
- 참고
2. 네트워크 자동화의 필요성
구분 | 과거 네트워크 | 현대 네트워크 | 네트워크 자동화 필요성 |
---|---|---|---|
복잡성 | 비교적 단순한 구조, 적은 장비 수 | 매우 복잡하고 동적인 구조, 가상화, 클라우드 연동 증가 | 수동 관리의 한계, 복잡성 증가로 인한 운영 오류 가능성 증대 |
관리 방식 | 주로 CLI 기반의 수동 설정 및 관리 | GUI, API 기반 관리, 프로그래밍 방식 도입 | 효율적인 대규모 네트워크 관리, 일관성 유지, 신속한 변경 및 배포 |
변화 속도 | 변화가 비교적 느림 | 비즈니스 요구사항 변화에 따라 빠른 변화 요구 | 신속한 서비스 배포 및 변경 대응, 민첩성 확보 |
주요 기술 | 물리적 장비 중심 (라우터, 스위치 등) | SDN, NFV, 클라우드, 컨테이너 등 소프트웨어 정의 기술 도입 | 자동화를 통한 기술 복잡성 관리 및 효율적인 활용 |
운영 목표 | 안정적인 연결성 제공 | 민첩성, 확장성, 효율성, 보안 강화 | 운영 효율성 증대, 비용 절감, 오류 감소, 서비스 품질 향상 |
- 결론
- 운영 효율성 증대
- 오류 감소
- 일관성 유지
- 신속한 배포 및 변경
- 비용 절감
- 복잡성 관리
3. NSO 핵심 기능과 아키텍처
- 주요기능
- 서비스 모델링 및 활성화
- 멀티벤더 지원
- 트랜잭션 기반 변경 관리
- 설정 동기화 및 검증
- 롤백 및 복구 기능
- 아키텍처
- 사용자 인터페이스 및 상호 작용
- NSO
- NSO 코어
- 추상화 레이어
- 인프라
- 가상화된 장비
4. YANG 데이터 모델링
- YANG 이란?
- 데이터 구조와 제약조건(ACL)을 정의하는데 초점을 맞춘 언어
- RFC 6020 표준
- 네트워크 설정과 상태 정보를 구조화
- YANG 활용 목적
- NETCONF: 네트워크 장비의 설정을 관리하기 위한 표준 프로토콜에서 설정 데이터와 상태 데이터를 모델링하는데 사용(XML 기반)
- RESTCONF: HTTP 기반의 네트워크 관리 프로토콜에서 데이터 모델을 정의하는데 사용(JSON 또는 XML 기반)
- SDN: SDN 컨트롤러와 네트워크 장비 간의 인터페이스를 정의하고 관리 정책을 모델링하는데 사용(하드웨어와 소프트웨어 분리)
- 네트워크 자동화: 네트워크 장비의 설정을 자동화하고 관리하기 위한 스크립트나 툴에서 데이터 모델로 사용
- 참고
5. 서비스 개발 프로세스
서비스 요구사항 분석
- 비즈니스 요구사항
- 어떤 서비스를 자동화할 것인가?
- 필요한 구성 매개변수는 무엇인가?
- 서비스 제약 조건 및 검증 규칙?
- 기술 요구사항 정의
- 지원할 장비 유형 및 벤더
- 필요한 인터페이스 및 프로토콜
- 기존 서비스와의 통합 요구사항
- 비즈니스 요구사항
서비스 패키지 생성
- ncs-make-packages 명령어를 통한 서비스 패키지 기본 구조 생성
cd ~/src/nso-instance/packages/ ncs-make-package --service-skeleton template loopback-service ├── package-meta-data.xml ├── src │ ├── Makefile │ └── yang │ └── loopback-service.yang ├── templates │ └── loopback-service-template.xml └── test ├── Makefile └── internal ├── Makefile └── lux ├── Makefile └── basic ├── Makefile └── run.lux
- loopback-service.yang: 서비스 데이터 모델을 정의
- loopback-service-template.xml: 장비에 적용 될 구성 템플릿 정의
- 참고
- ncs-make-packages 명령어를 통한 서비스 패키지 기본 구조 생성
YANG 데이터 모델 설계
- 서비스 인터페이스 정의
- 사용자가 입력해야 할 매개변수
- 장비 참조 방법(leafref)
- 검증 규칙 (must, when)
- 예시 (loopback-service.yang)
<config-template xmlns="http://tail-f.com/ns/config/1.0"> <devices xmlns="http://tail-f.com/ns/ncs"> <device> <name>{/device}</name> <config> <interface xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg"> <Loopback> <id>{/interface-id}</id> <ipv4 xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ipv4-io-cfg"> <addresses> <primary> <address>{/ip-address}</address> <netmask>255.255.255.255</netmask> </primary> </addresses> </ipv4> </Loopback> </interface> </config> </device> </devices> </config-template>
- 예시
- 서비스 인터페이스 정의
서비스 템플릿 작성
- 디바이스 구성 생성 템플릿 작성
- XML 기반 템플릿 구조
- 변수 참조 및 조건문 사용
- 다양한 장비 유형에 대한 템플릿 분기
- 예시 (loopback-service-template.xml)
<config-template xmlns="http://tail-f.com/ns/config/1.0"> <devices xmlns="http://tail-f.com/ns/ncs"> <device> <name>{/device}</name> <config> <interface xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg"> <Loopback> <id>{/interface-id}</id> <ipv4 xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ipv4-io-cfg"> <addresses> <primary> <address>{/ip-address}</address> <netmask>255.255.255.255</netmask> </primary> </addresses> </ipv4> </Loopback> </interface> </config> </device> </devices> </config-template>
- 참고
- 디바이스 구성 생성 템플릿 작성
서비스 로직 구현 (Python)
- 서비스 기능
- 동적 서비스 생성
- 유효성 검사
- 추가 리소스 할당/계산
- 예시
from ncs.application import Service import ncs class LoopbackServiceCallback(Service): @Service.create def cb_create(self, tctx, root, service, proplist): self.log.info('Service create(service=', service._path, ')') # 서비스 로직 구현 device_name = service.device interface_id = service.interface_id ip_address = service.ip_address # 템플릿 적용 vars = ncs.template.Variables() vars.add('DEVICE', device_name) vars.add('INTERFACE_ID', interface_id) vars.add('IP_ADDRESS', ip_address) template = ncs.template.Template(service) template.apply('loopback-service-template', vars)
- 참고
- 서비스 기능
테스트 및 검증
- 서비스 인스턴스 생성
- NSO CLI를 이용한 서비스 인스턴스 생성
config loopback-service test device dist-rtr0 dummy 192.168.1.1 top commit dry-run outformat native show configuration | nomore commit and-quit
test
라는 이름의loopback-service
인스턴스를 생성하고,dist-rtr0
장치에 IP 주소192.168.1.1
을 할당하는 설정
- NSO CLI를 이용한 서비스 인스턴스 생성
- 서비스 재배포(구성동기화)
- NSO 네트워크 장비의 구성 변경 사항을 감지하고, 서비스 정의에 따라 구성 재동기화
devices sync-from config loopback-service test re-deploy dry-run loopback-service test re-deploy end
sync-from
명령은 NSO가 장비의 현재 구성을 학습하도록 하고,re-deploy
명령은 서비스 정의에 따라 장비 구성을 다시 적용
- NSO 네트워크 장비의 구성 변경 사항을 감지하고, 서비스 정의에 따라 구성 재동기화
- 참고
- 서비스 인스턴스 생성
6. 서비스의 장점
- 재사용성 및 일관성: 정의된 서비스를 여러 장치에 일관되게 적용 가능
- 추상화: 복잡한 장비별 설정을 단순화된 인터페이스로 제공
- 라이프사이클 관리: 서비스 인스턴스의 생성, 업데이트 및 제거를 체계적으로 관리
- 자동화: Python 또는 Java 코드를 통합하여 복잡한 워크플로우를 자동화 가능
7. 진행 상황
- 현재
- 향후
- PNETlab 기반 토폴로지 망 구성 및 NSO 제어