On 2/13/15 11:09 , Dirk Steinberg via smartos-discuss wrote:
> Hi,
> 
> I read that Joyent is working on extending SmartOS/SDC with network
> virtualization based on VXLAN. I assume that in addition to a kernel
> module for VXLAN interfaces there will be some control plane /
> orchestration layer that works together with SDC.
> 
> Is there some architecture documentation available that would explain 
> the big picture? How is the overlay network supposed to work?
> Just plain basic MAC learning, or something more advanced with
> an actual control plane (BGP?) like in Juniper Contrail or Alcatel
> Nuage?
> 
> Will use cases like service chaining be supported?
> 
> Is a current (2015, with lxbrand) binary build available for testing?
> The latest bits I could find are almost 5 month old.
> http://dtrace.org/blogs/rm/2014/09/23/illumos-overlay-networks-development-preview-02/
>  
> <http://dtrace.org/blogs/rm/2014/09/23/illumos-overlay-networks-development-preview-02/>
> 
> The userland lookup as explained in that blog post sounds promising,
> I am hoping for a BGP based control plane in userland in the future…
> Does anyone care to share plans and status updates?

Hi Dirk,

I'm probably the best person to answer this as I'm in the coal mine. I
haven't put out another preview of the bits, but I could probably get
something out in the next week or two. We're currently working at
getting the whole system up and into SDC. Let me start with explaining
how that works, and then we'll go into how the broader SDN is designed
so you can build your own and interface with other existing SDN
solutions. As an aside, I had a presentation at illumos day where I
talked about this:
https://www.youtube.com/watch?v=mLvi3nPNqiQ&list=PLH8r-Scm3-2VmZhZ76tFPAhPOG0pvmjdA&index=3
and slides http://fingolfin.org/illumos/talks/sdn.pdf.

In SDC, we're adding the notion of what we call a 'fabric'. The idea
behind this fabric is that it represents the equivalent of a physical
networking fabric, eg. a loosely connected series of hardware that may
or may not have overlapping L2/L3 domains that's similar to the SDC
sense of this. From an SDC perspective, this allows users to go and
create any number of VLANs and L3 Networks on top of it, as long as it
uses RFC1918 addresses. With the foundation in place, there are lots of
ways one can then extend this to things like elsatic ips, etc.

As part of SDC, all of the network state is stored in moray -- our
key/value store backed by manatee (HA Postgres). That data is proxied
and abstracted by a service we call portolan
(https://github.com/joyent/sdc-portolan). This service is still in
development, but the idea is that we have a small TCP based protocol
that the individual compute nodes speak to talk to these portolan
instances which in turn talk to the key-value store. Their purpose is to
abstract the backing store and allow us a bit more flexibility in terms
of upgrade. You can read more about that API here:
https://github.com/joyent/sdc-portolan/blob/master/docs/varp.

Of course, this brings us to the individual architecture in illumos. The
core philosophy of the illumos architecture is that logic in encap/decap
should be separate from how we do look ups. The README here:
https://github.com/joyent/illumos-joyent/tree/dev-overlay explains a bit
of what's going on.

They key here is that when the kernel tries to send to a link layer
address it doesn't know (generally a MAC), it goes and does a call to
the varpd daemon in userland. It does this in an asynchronous fashion
that generally resembles ARP, hence why we called it varpd - the virtual
arp daemon.

>From there, there's a plug-in interface that one can implement to define
how you do look ups. The documentation is a bit sparse, but the API is
here:
https://github.com/joyent/illumos-joyent/blob/dev-overlay/usr/src/lib/varpd/libvarpd/common/libvarpd_provider.h.

Currently, I've implemented three different plugins for this. The first
is a simple point to point plugin, eg. it's basically just a glorified
tunnel, send everything over here --
https://github.com/joyent/illumos-joyent/tree/dev-overlay/usr/src/lib/varpd/direct.
The second is basically a glorified form of /etc/ethers, basically a
file plugin that you can use as a static form of defining dynamic
lookups --
https://github.com/joyent/illumos-joyent/tree/dev-overlay/usr/src/lib/varpd/files.

Finally, the last and most complicated example is what we've done for
SDC, which you can see here:
https://github.com/joyent/illumos-joyent/tree/dev-overlay/usr/src/lib/varpd/svp.


So, given all this, it allows you to go ahead and figure out how you
want to interact with it and go from there. If someone wants something
that goes and interacts with some existing system or does it in some
other way, it should hopefully be able to fit into this model and you'd
have to define and write your own plugin.

There's a lot here, so let me know what questions you have and what I
can better clarify.

Thanks,
Robert


-------------------------------------------
smartos-discuss
Archives: https://www.listbox.com/member/archive/184463/=now
RSS Feed: https://www.listbox.com/member/archive/rss/184463/25769125-55cfbc00
Modify Your Subscription: 
https://www.listbox.com/member/?member_id=25769125&id_secret=25769125-7688e9fb
Powered by Listbox: http://www.listbox.com

Reply via email to