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. 서비스 개발 프로세스

  1. 서비스 요구사항 분석

    • 비즈니스 요구사항
      • 어떤 서비스를 자동화할 것인가?
      • 필요한 구성 매개변수는 무엇인가?
      • 서비스 제약 조건 및 검증 규칙?
    • 기술 요구사항 정의
      • 지원할 장비 유형 및 벤더
      • 필요한 인터페이스 및 프로토콜
      • 기존 서비스와의 통합 요구사항
  2. 서비스 패키지 생성

    • 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: 장비에 적용 될 구성 템플릿 정의
    • 참고
  3. 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>
    • 예시
  4. 서비스 템플릿 작성

    • 디바이스 구성 생성 템플릿 작성
      • 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>
    • 참고
  5. 서비스 로직 구현 (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)
    • 참고
  6. 테스트 및 검증

    • 서비스 인스턴스 생성
      • 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 네트워크 장비의 구성 변경 사항을 감지하고, 서비스 정의에 따라 구성 재동기화
        devices sync-from
        config
        loopback-service test re-deploy dry-run
        loopback-service test re-deploy
        end
        sync-from 명령은 NSO가 장비의 현재 구성을 학습하도록 하고, re-deploy 명령은 서비스 정의에 따라 장비 구성을 다시 적용
    • 참고

6. 서비스의 장점

  • 재사용성 및 일관성: 정의된 서비스를 여러 장치에 일관되게 적용 가능
  • 추상화: 복잡한 장비별 설정을 단순화된 인터페이스로 제공
  • 라이프사이클 관리: 서비스 인스턴스의 생성, 업데이트 및 제거를 체계적으로 관리
  • 자동화: Python 또는 Java 코드를 통합하여 복잡한 워크플로우를 자동화 가능

7. 진행 상황


출처: https://developer.cisco.com/learning/