Giter Club home page Giter Club logo

gnmi-test's Introduction

gNMI

gRPC Network Management Interface (gNMI)

gRPC기반에 디바이스의 설정을 수정 또는 조회할수 있는 프로토콜로 원격으로 디바이스를 제어하고 스트림으로 데이터를 받아올수 있다. 하나의 gRPC service 정의로 제어와 조회를 모두 가능하게 되어있다. (하나의 NMS로 디바이스의 정보를 조회 또는 설정을 할 수 있다.)

모든 메시지는 gRPC service에 정의되고 protocol buffer로 사용된다. gRPC service는 protobuf IDL로 기능을 표현된 내용을 통해 정의된다.

  • 용어
    • Telementry - device에 근본적이 문자 데이터들을 streaming 한다. (either operational state or configuration)
    • Configuration - 읽고 쓰는 데이터형태이고 client에 의해 조작된다.
    • Target - 데이터가 조작되거나 report되는 디바이스이다. 보통 network device이다.
    • Client - target을 query/modify 하기위해 표현된 protocol 데이터를 사용하는 device 혹은 system, data를 스트리밍하여 collector로 사용되기도 한다. 보통은 network management system이다.

gNMI란?

  • Configuration을 다루고, state를 읽어올 수 있는 프로토콜
    • gNMI를 통에 데이터를 다룰때 name들과 map<stirng,string> 로 구성된 path를 구성할 수 있어야한다.
    • 꼭 YANG-model일 필요는 없다.
  • gRPC를 바탕으로 개발되었다. google에 의해 개발된 오프소스이고 CNCF에서 관리하고 있다.
    • RPC는 HTTP/2로 만들어져있다.
    • 서버 스트리밍, 클라이언트 스트리밍, 양방향 스트리밍

gNMI를 사용하는 이유

플랫폼 개발에 있어서 CLI와 같은 구조화 되지 않은 방법은 핸들링이나 관리에 있어서 어려움이 많다.

  • CLI는 프로그래밍을 할 수 없다.
    • 트렌젝션 관리가 어렵다.
    • 구조화 되지않아 error 핸들링이 어렵다.
    • 구조나 커맨드 문법이 바뀐다.
  • gNMI vs Openflow
    • Openflow -> Forwarding Plane
      • Packet A goes to X
    • gNMI -> Platform
      • Configuration
      • Hardware/Software
      • Environmental/Power

gNMI 구성

gRPC, gNMI, Tree-structured data 로 구성된다.

  • gRPC - transport
    • High 퍼포먼스의 RPC framework로 어떤 환경에서도 실행할 수 있다.
  • gNMI - action
    • Get/Set/Subscribe/Capabilities (proto 파일을 통해 서비스를 정의한다)
  • Tree-structured data - properties
    • OpenConfig - YANG data models

gNMI - 서비스 정의

gnmi는 다음과같이 서비스를 정의할 수 있다.

service gNMI {
 rpc Capabilities(CapabilityRequest) returns (CapabilityResponse);
 rpc Get(GetRequest) returns (GetResponse);
 rpc Set(SetRequest) returns (SetResponse);
 rpc Subscribe(stream SubscribeRequest) returns (stream SubscribeResponse);
}
  • Server is named Target
  • Target always authenticates Client
  • Client always authenticates Target
  • Session is always encrypted
  1. gNMI SET - (delete, replace & update)

    message SetRequest {
     <...>
     repeated Path delete = 2;
     repeated Update replace = 3;
     repeated Update update = 4;
    }
    • SET은 Transactional 하다. (중간에 다른 트랜젝션이 끼어들 수 없다.)
    • Steate는 설정전체가 accepted 되지 않으면 바뀌지 않는다.
  2. Subscribe - (streaming telemetry)

    service gNMI {
     <...>
     rpc Subscribe(stream SubscribeRequest) returns (stream SubscribeResponse);
    }
    • The SubscribeRequest Message

      SubscribeRequest 메시지는 path들을 통해 구성되어있고, target으로 부터 update 요청이 오게된다.

      다음은 내부 SubscribeRequest의 내부 필드이다.

      • subscribe: 타입은 SubscriptionList로 클라이언트가 subscribe할 path들을 의미한다.

      • poll: 타입은 SubscriptionList로 클라이언트가 poll 방식으로 subscribe할 path들을 의미한다.

      • aliases: 클라이언트는 path에 대한 alias를 정의 할 수 있다.

  3. Capabilities

    service gNMI {
     rpc Capabilities(CapabilityRequest) returns (CapabilityResponse);
     <...>
    }
    
    message CapabilityResponse {
     repeated ModelData supported_models = 1; // Supported schema models.
     repeated Encoding supported_encodings = 2; // Supported encodings.
     string gNMI_version = 3; // Supported gNMI version.
    }
    

Encoding

gNMI의 Encoding 정의 이다.

enum Encoding {
 JSON = 0; <-----(rfc7159)- OKish
 BYTES = 1;
 PROTO = 2;
 ASCII = 3;
 JSON_IETF = 4; <-(rfc7951)- Prefered (made for YANG)
}

Certificates

gNMI를 통한 session은 인증된 상태이다.

  • 만드시 인증서를 사용한다.
  • 클라이언트는 Target에 인증해야 한다.
  • Target도 Client를 인증해야된다.

스크린샷 2021-11-02 오후 1.36.47

참고

gnmi-test's People

Contributors

yun-seyeong avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.