GithubHelp home page GithubHelp logo

kne's Introduction

Kubernetes based network emulation

This is not an officially supported Google product

Goal

For network emulation there are many approaches using VM's for emulation of a hardware router. Arista, Cisco, Juniper and Nokia have multiple implementations of their network operating system and various generations of hardware emulation. These systems are very good for most validation of vendor control plane implementations and data plane for limited certifications. The idea of this project is to provide a standard "interface" so that vendors can produce a standard container implementation which can be used to build complex topologies.

  • Have standard lifecycle management infrastructure for allowing multiple vendor device emulation to be present in a single "topology"
  • Allow for control plane access via standard k8s networking
  • Provide a common networking interface for the forwarding plane between network pods.
    • Data plane wires between pods
    • Control plane wires between topology manager
  • Define service implementation for allowing interaction with the topology manager service.
    • Topology manager is the public API for allowing external users to manipulate the link state in the topology.
    • The topology manager will run as a service in k8s environment.
    • It will provide a gRPC interface for tests to interact with
    • It will listen to CRDs published via the network device pods for discovery
  • Data plane connections for connectivity between pods must be a public transport mechanism
    • This can't be implemented as just exposing "x eth devices on the pod" because linux doesn't understand the associated control messages which are needed to actually make this work like a wire.
      • Transceiver state, optical characteristics, wire state, packet filtering / shaping / drops
      • LACP or other port aggregation protocols or APS cannot be simulated correctly
    • The topology manager will start a topology agent on each host for the pod to directly interact with.
      • The topology agent will provide the connectivity between nodes
  • Define how pods boot an initial configuration
    • Ideally this method would allow for dynamic
  • Define how pods express services for use in-cluster as well as external services

Use Cases

Test Development

The main use case of this infrastructure is for the development of tests to validate control plane / configuration of network devices without needing real hardware.

The main use case we are interested in is the ability to bring up arbitrary topologies to represent a production topology. This would require multiple vendors as well as traffic generation and end hosts.

In support of the testing we need to be able to provide every tester, engineer and continuous automated run a set of environments to validate test scenarios used in production. These can also be used to pre-validate hardware testing as well. This can reduce cycle time as there will be no contention for the virtual testbed vs. the hardware testbed. This also allows for "unit testing" the integration test.

Software Development

For the development of new services or for offering a better environment to developers for existing services, virtual testbeds would allow for better scaling of resources and easier to use testbeds that would be customized for a team's needs. Specifically workflow automation struggles to have physical representations of metros that need to be validated for workflows. A virtual testbed would allow for the majority of workflows to be validated against any number of production topologies.

Building

  • Install go
  • Build CLI
cd kne_cli
go build 

Thanks

This project is mainly based on the k8s-topo from github.com/networkop/k8s-topo and meshnet-cni plugin from github.com/networkop/meshnet-cni.

kne's People

Contributors

marcushines avatar mhines01 avatar hashwini-keysight 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.