[kata-dev] vsock & network namespaces in Kata

Stefano Garzarella sgarzare at redhat.com
Thu Dec 5 10:15:20 UTC 2019


On Thu, Dec 05, 2019 at 05:49:08PM +0800, Peng Tao wrote:
> On 2019/12/5 17:31, Stefano Garzarella wrote:
> > On Thu, Dec 05, 2019 at 10:39:08AM +0800, Peng Tao wrote:
> > > Hi Stefano,
> > 
> > Hi Tao,
> > 
> > > 
> > > While I understand the motivation of the change, do users have an option to
> > > opt out of the namespaced vsock communication? I'm considering a possible
> > > scenario that someone uses a single host daemon to manage all the guests
> > > like we did in the hyperd project. Then there is no way for such a daemon to
> > > communicate with guests with namespaced vsock.
> > > 
> > 
> > It could be possible, but we would like to avoid it, because if the kernel
> > is compiled with netns support, then we would like to leave it also in vsock.
> > 
> > A possible solution whould be to provide a way to define the netns
> > assigned to the device, adding a new ioctl to vhost-vsock device (and a new
> > parameter to the QEMU's vsock device) or extending ip-link(8) to
> > handle vsock devices.
> > 
> Sorry, I don't quit understand your solution. Could you elaborate a bit
> more?

Sure, sorry for that.

> 
> In my scenario, there is one management daemon on the host that needs to
> talk to many guests via vsock. Assuming the daemon lives in the host init
> netns, and each guest vmm is put in a different netns, how do you propose to
> solve the problem?

1. If we add an ioctl to vhost-vsock, the VMM can specify the ID of netns
   where to assign the device (this requires to assign an id to the netns):

    $ ip netns add ns1
    $ ip netns add ns2
    $ ip netns set ns2 2

    # qemu runs in ns1 but vsock device is assigned to ns2 (e.g. the
    # management daemon is running in ns2)
    $ ip netns exec ns1 qemu-system-x86_64 ... \
        -device vhost-vsock-device,guest-cid=3,netns-id=2

    # qemu runs in ns1 but vsock device is assigned to init_ns (e.g. -1)
    $ ip netns exec ns1 qemu-system-x86_64 ... \
        -device vhost-vsock-device,guest-cid=3,netns-id=-1

2. If we extend the ip-link(8) we could do as for veth devices:

    $ ip link list (modified to show vsock${guest_cid}, so in this case
                    there are two guests with CID 42 and 54)
    ...
    10: vsock42: ...

    11: vsock54: ...

    # assign to ns2
    $ ip link set vsock42 netns ns2
    $ ip link set vsock54 netns ns2

    # assign to init_ns (netns accepts also pid, so we can use 1 for init_ns)
    $ ip link set vsock42 netns 1
    $ ip link set vsock54 netns 1

The second option could be more complicated to do.

Cheers,
Stefano




More information about the kata-dev mailing list