Riklet SDN

This component onboard a network component which will manage network exposure and routing. Depending on the workload, it will be configured to use a specific network implementation. For now, only Function workload have an implementation of network configuration. This implementation is based on iptables and rtnetlink.

Function network implementation

This network feature allows you to forward traffic from a specific port to a Function instance port. We achieve this using iptables, a widely used linux tool for managing network traffic. The translation of IP and port is targetting a TAP interface on the machine that is communicating with the Function instance (microVM).


┌──────────────────────────────────────────────────────────────────┐
│                      Host Machine (riklet)                       │
│                                                                  │
│                                                                  │
│  ┌─────────────────────────────┐   ┌─────────────────────────┐   │
│  │Iptables                     │   │    Function Instance    │   │
│  │                             │   │                         │   │
│  │ ┌─────────────────────────┐ │   │                         │   │
│  │ │APPLY NAT ON             │ │   │┌───────────────────────┐│   │
│  │ │host:${port}             │ │   ││      Guest_veth       ││   │
│  │ │                         │ │   ││                       ││   │
│  │ │TO                       │─┼┐  │└───────────────────────┘│   │
│  │ │host_tap:${service_port} │ ││  │            ▲            │   │
│  │ │                         │ ││  └────────────┼────────────┘   │
│  │ └─────────────────────────┘ ││               │                │
│  │              ▲              ││               │                │
│  └──────────────┼──────────────┘│   ┌───────────────────────┐    │
│                 │               │   │       Host_tap        │    │
│                 │               └──▶│                       │    │
│                 │                   └───────────────────────┘    │
│     ┌───────────────────────┐                                    │
│     │Host Ethernet Interface│                                    │
│     │                       │                                    │
│     └───────────────────────┘                                    │
│                 ▲                                                │
└─────────────────┼────────────────────────────────────────────────┘
                  │

This is what the network configuration looks like when you deploy a Function instance with a port mapping, please not it is very specific to Function. The host_tap interface is created by the riklet and is used to communicate with the Function instance. The Guest_veth interface is created by the firecracker microVM and is used to communicate with the host_tap interface. The host_tap is connecteed to the internet and is not restricted in bandwidth.

Iptables

Riklet will use a custom chain called RIKLET on the table nat to do DNAT (Destination NAT), it matches two use cases:

  • Local processes: when another workload wants to communicate with a Function instance
  • Internet: when the workload needs to be exposed externally on the worker node
    .─────────────────.               .─────────────────.
 ,─'                   '─.         ,─'                   '─.
(     Local processes     )       (        Internet         )
 `──.                 _.─'         `──.                 _.─'
     `───────────────'                 `───────────────'
             │                                 │
             │                                 │
             │                                 │
             ▼                                 ▼
  ┌────────────────────┐            ┌────────────────────┐
  │    OUTPUT (nat)    │            │  PREROUTING (nat)  │
  └────────────────────┘            └────────────────────┘
             │                                 │
             │                                 │
             │      ┌──────────────────────────┤
             │      │                          │
             ▼      ▼                          ▼
  ┌────────────────────┐            ┌────────────────────┐
  │    RIKLET (nat)    │───────────▶│      FORWARD       │
  └────────────────────┘            └────────────────────┘
                                                │
                                                │
                                                │
                                                │
                                                ▼
                                     ┌────────────────────┐
                                     │    POSTROUTING     │
                                     └────────────────────┘
                                                │
                                                │
                                                │
                                                ▼