Commit Graph

67 Commits

Author SHA1 Message Date
Daniel J Walsh
e4eb553d12 virtcontainers: Add SELinux support for running VM Confinement
We want to launch the KVM launcher tool (qemu?) with an SELinux label, similar
to what we do with libvirt.

Currently when I use kata with Podman, it complains if we specify a label that
kata does not support SELinux labels. What I would like to do is have kata just
use this label to apply to the KVM launcher. Then I will work to generate a new
policy type (container_kvm_t) that will allow the KVM Launcher tool to do its
thing, but prevent breakout.

Fixes: #2501

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-04-02 09:19:45 -04:00
Jose Carlos Venegas Munoz
0a1ffc1d97 types: Make FS sharing disable by default
All the other caps are inverted (not supported by default).

Make fs sharing not supported by default and let hypervisors
expose if it supports it.

Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
2020-03-27 06:14:20 +00:00
Penny Zheng
d60902a95e FC: change minimum supported version of Firecracker to v0.21.1
Some changes in Firecracker v0.21.1 is incompatible with the old versions.
So we need to update the minimum supported FC version to v0.21.1

Fixes: #2504

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-23 09:57:25 +08:00
Penny Zheng
44e23493a2 FC: Fix error of overlong firecracker API unix socket
When sandbox id is too long, it will incur error of overlong firecracker
API unix socket.
In Linux, sun_path could maximumly contains 108 bytes in size.
http://man7.org/linux/man-pages/man7/unix.7.html
So here we try to truncate FC id to only keep the size of UUID(128bit).

Fixes: #2504

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-23 09:57:25 +08:00
Penny Zheng
c3bafd5793 FC: Change default API socket path
Firecracker has changed default API socket path to `/run/firecracker.socket`.
This path also applies when running with the jailer.
Related PR: https://github.com/firecracker-microvm/firecracker/pull/1500
kata is letting jailer automatically create API socket, so we need to
change api socket path from `/api.socket` to `/run/firecracker.socket` accordingly.

Fixes: #2504

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-23 09:57:25 +08:00
Penny Zheng
2945bcd796 FC: Removed redundant --seccomp-level jailer parameter
Firecracker has removed redundant `--seccomp-level` jailer parameter
since it can be simply forwarded to the Firecracker executable using
"end of command options" convention.
Related PR: https://github.com/firecracker-microvm/firecracker/pull/1491
Since kata is just using default seccomp level for firecracker, here
then we just removed the setting for jailer.

Fixes: #2504

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-23 09:57:25 +08:00
Penny Zheng
d2cae59ec7 FC: Removed redundant RescanBlockDevice action
Firecracker has removed RescanBlockDevice from the /actions API.
Related PR: https://github.com/firecracker-microvm/firecracker/pull/1542.
We need to remove according settings in kata-containers.

Fixes: #2504

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-23 09:57:25 +08:00
Penny Zheng
37b91b3378 FC: Remove logger.options
Firecracker has removed `memory.dirty_pages` metric and `logger.options`
configuration.
Related PR: https://github.com/firecracker-microvm/firecracker/pull/1532.
We need to remove according setting in kata-containers.

Fixes: #2504

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-23 09:57:16 +08:00
Penny Zheng
13390df005 Jailer: re-mount jailerRoot with exec
The default chrootBaseDir "/run/vc" in many distributions is mounted
with `noexec` flag, which will bring 'permission denied' error
when running kata-containers with jailer.
Therefore, we decided to remount the jailerRoot dir with exec when setting
up a new firecracker sandbox and umount it when cleaning up.

Fixes: #2511

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-17 04:10:33 +00:00
Penny Zheng
9d3022a85a mount: modify func bindMount
originally, we forcefully set any bind-mount with `private` propagation
type, and it's not applied for all scenarios. e.g. we need to provide
`slave` or `shared` propagation type for bind-mounts in setting up jail
house.
Here, we add another parameter `pgtype` in func bindMount for providing
customized propagation parameters.

Fixes: #2511

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2020-03-17 04:10:28 +00:00
Peng Tao
c3629d37c4 Merge pull request #2239 from WeiZhang555/persist-storage
Land experimental "newstore" as formal feature
2020-01-14 13:12:05 +08:00
Wei Zhang
8e88859ee4 persist: remove all usage of VCStore
Remove VCStore usage from all modules

Signed-off-by: Wei Zhang <weizhang555.zw@gmail.com>
2019-12-30 18:42:15 +08:00
Wei Zhang
633748aa76 persist: remove VCStore from hypervisor
Remove usage of VCStore from hypervisors.

Signed-off-by: Wei Zhang <weizhang555.zw@gmail.com>
2019-12-30 18:39:39 +08:00
Penny Zheng
09198eed84 FC: jailer failed when importing new flag "--config-file"
When we used jailer to launch firecracker, kata container failed due
to the following causes:
1. new flag `--config-file` belongs to the jailed firecracker,
so, adhering to the `end of command options` convention, we need to
give `--config-file` a prefix `--`.
2. The path of the config file(`fcConfig.json`) should be also
relative to the jailed firecracker.
3. Since we do the configuration before func `fcInit` now, we also need
to bring `jailer check` ahead.
4. The config file should be umounted and cleaned up.

Fixes: #2362

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2019-12-19 05:47:43 +00:00
Penny Zheng
8f6d0ab165 FC: introduce --config-file to replace API configure request
New command-line parameter for firecracker v0.19.0, named `--config-file`,
which represents the path to a file that contains a JSON which can be
used for configuring and starting a microVM without sending any API
requests.

Fixes: #2199

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2019-12-03 23:46:29 -08:00
Penny Zheng
f2d8d715d3 FC: func checkVersion should be more independent
func checkVersion could be called anywhere, not always after
DescribeInstance `\` API request, so it should be more independent.
We could also get version number from `firecracker --version` command.

Fixes: #2199

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2019-12-03 23:46:24 -08:00
Penny Zheng
9ce2113535 FC: remove API Ready state
Since we decide to adopt config file to configure, we could bypass
API Ready state.
Here, we also create a new config ready state: `cfReady`, to represent
configuration part is done.

Fixes: #2199

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2019-12-03 23:46:19 -08:00
Eric Ernst
06971246ea fc: update comments for startSandbox
The comment didn't reflect what the function does. Updated accordingly.

Fixes: #2277

Signed-off-by: Eric Ernst <eric.ernst@intel.com>
2019-11-26 15:25:51 -08:00
Hui Zhu
191ee63750 fc.go: Set fc log level to debug if hypervisor.enable_debug is true
Set firecracker log level to debug if hypervisor.enable_debug is true.

Fixes: #2260

Signed-off-by: Hui Zhu <teawater@antfin.com>
2019-11-25 17:08:00 +08:00
Hui Zhu
562d9fd5c2 Merge pull request #2073 from Pennyzct/firecracker_fifo_log
FC: extract error info from firecracker built-in log and metrics scheme
2019-11-25 16:15:36 +08:00
Ted Yu
618666ed8c vc: Remove unnecessary call to kill
Fixes #2207

Signed-off-by: Ted Yu <yuzhihong@gmail.com>
2019-11-19 05:46:33 -08:00
lifupan
a2b6afcd9a FC: log out the firecracker's console when debug enabled
For shimv2 case, when hypervisor's debug option set, log out
the firecracker's console output which contains the kernel boot
logs; thus it would be easy for system panic debugging.

When agent debug was enabled by passing "agent.log=debug" to
kernel parameter, it will also log out the agent logs from
the console output.

Fixes: #2201

Signed-off-by: lifupan <lifupan@gmail.com>
2019-11-15 11:51:32 +08:00
lifupan
13a00a2cf2 virtcontainers: add a stateful to FC struct
Add a 'sateful' variable to FC to indicate
when it is called with cli or shimv2.

Signed-off-by: lifupan <lifupan@gmail.com>
2019-11-15 11:48:13 +08:00
Penny Zheng
daae1db893 log: extract error info from firecracker built-in log and metrics scheme
Firecracker have its own logging scheme, providing two fifo files with log
and metrics info.
We should extract error info for better debugging.

Fixes: #2072

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
Signed-off-by: Haibo Xu <haibo.xu@arm.com>
2019-11-13 09:22:26 +08:00
Julio Montes
78ca966e8d virtcontainers: bump firecracker minimum supported version
firecracker 0.19.0 API is not backward compatible, hence we need
to bump the firecracker minimum supported version to 0.19.0

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-11-11 22:22:03 +00:00
Julio Montes
77b0dfb05f virtcontainers: use new firecracker API
Support new firecracker API 0.19.0:
* remove vsock ID from http request

fixes #2183

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-11-11 22:19:57 +00:00
Julio Montes
aa43e2a9ac virtcontainers: set agent's logs vsock port
In firecracker, there is no socket connected to /dev/console, so let's
use a vsock port to get agent's logs

Depends-on: github.com/kata-containers/shim#210

fixes #2103

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-10-07 16:39:18 +00:00
Jose Carlos Venegas Munoz
2591a1fb65 Merge pull request #2102 from devimc/topic/virtcontainers/fcFixSocketPerm
virtcontainers: change firecracker socket permissions
2019-10-04 09:26:50 -05:00
Julio Montes
8f6b0a6a41 virtcontainers: change firecracker socket permissions
For security reasons, let's make sure 'others' don't have access to the
firecracker hybrid vsock

fixes #2101

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-10-03 21:23:19 +00:00
Julio Montes
312f3e7234 virtcontainers/fc: implement remove device
Unmount and unassign block device when it's required, that way the disk
can be unmounted and destroyed in the host.

fixes #1966

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-10-02 17:01:11 +00:00
Julio Montes
7e9cc5690d virtcontainers/fc: improve create disk pool process
Create a raw file and bind mount it to use it as disk is not needed,
instead a the raw file can be created at the jail path and use it directly
as disk, if a new container is added the real disk/device can be bind mounted
in the raw file.

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-10-02 17:01:11 +00:00
Julio Montes
07932d59ab virtcontainers/fc: add logs and improve others to make debugging easier
add more logs and improve others to make firecracker debugging less painful

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-10-02 16:56:28 +00:00
Julio Montes
3d0949d60d virtcontainers: check minimum supported version of firecracker
Check minimum supported version of firecracker to make sure it's compatible
with kata containers

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-09-20 13:55:19 +00:00
Julio Montes
5ac6e9a897 virtcontainers: make socket generation hypervisor specific
Kata support several hypervisor and not all hypervisor support the
same type of sockets, for example QEMU support vsock and unix sockets, while
firecracker only support hybrid vsocks, hence sockets generations should be
hypervisor specific

fixes #2027

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-09-19 19:39:07 +00:00
Julio Montes
f42dd7d115 virtcontainers/fc: Add support for hybrid vsocks
Currently only firecracker supports hybrid vsocks, change the implementation
to use hybrid vsocks in firecracker.

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-09-19 11:25:11 -05:00
Julio Montes
bb87b44b30 virtcontainers/fc: Add logger to the http transport
Add logger to the http transport to log the requests that the runtime writes
in the firecracker's socket. Enable debug it's enabled.

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-09-19 11:25:11 -05:00
Sebastien Boeuf
2a8af23de6 virtcontainers: Make fc.go fit the new API
Make fc.go fit the new API

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2019-09-19 11:25:11 -05:00
Peng Tao
0075bf85ba hypervisor: allow to return a slice of pids
so that for qemu, we can save and export virtiofsd pid,
and put it to the same cgroup as the qemu process.

Fixes: #1972
Signed-off-by: Peng Tao <bergwolf@hyper.sh>
2019-08-21 11:37:01 +08:00
Peng Tao
6c77d76f24 qemu: check guest status with qmp query-status
When guest panics or stops with unexpected internal
error, qemu process might still be running but we can
find out such situation with qmp. Then monitor can still
report such failures to watchers.

Fixes: #1963
Signed-off-by: Peng Tao <bergwolf@hyper.sh>
2019-08-16 12:58:25 +00:00
Wei Zhang
3bfbbd666d persist: merge "network.json"
Merge "network.json" into "persist.json" so that new store can manage
network part.

Signed-off-by: Wei Zhang <weizhang555.zw@gmail.com>
2019-07-23 17:10:00 +08:00
Wei Zhang
7d5e48f1b5 persist: manage "hypervisor.json" with new store
Fixes #803

Merge "hypervisor.json" into "persist.json", so the new store can take
care of hypervisor data now.

Signed-off-by: Wei Zhang <weizhang555.zw@gmail.com>
2019-07-23 17:09:11 +08:00
Manohar Castelino
78ea50c36c virtcontainers: Jailer: Add jailer support for firecracker
Firecracker provides a jailer to constrain the VMM. Use this
jailer to launch the firecracker VMM instead of launching it
directly from the kata-runtime.

The jailer will ensure that the firecracker VMM will run
in its own network and mount namespace. All assets required
by the VMM have to be present within these namespaces.
The assets need to be copied or bind mounted into the chroot
location setup by jailer in order for firecracker to access
these resouces. This includes files, device nodes and all
other assets.

Jailer automatically sets up the jail to have access to
kvm and vhost-vsock.

If a jailer is not available (i.e. not setup in the toml)
for a given hypervisor the runtime will act as the jailer.

Also enhance the hypervisor interface and unit tests to
include the network namespace. This allows the hypervisor
to choose how and where to lauch the VMM process, vs
virtcontainers directly launching the VMM process.

Fixes: #1129

Signed-off-by: Manohar Castelino <manohar.r.castelino@intel.com>
2019-07-11 21:32:36 +00:00
Manohar Castelino
4d526dbb6e firecracker: Update virtcontainer to use latest swagger definition
Update virtcontainer to use latest swagger definition.
Most changes are around mandatory parameters which need to be
passed in via pointers so that the absence of the same can be
detected (vs using default values).

Signed-off-by: Manohar Castelino <manohar.r.castelino@intel.com>
2019-06-20 09:36:44 -07:00
Penny Zheng
7e6fcddefa kernelRootParams: define agnostic commonkernelRootParams
Let's define agnostic commonkernelRootParams for all hypervisors,
including qemu, firecracker, etc. for now, it has two scenarios,
one for NVDIMM, one for virtio-blk.

Fixes: #1642

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
2019-05-29 15:12:56 +08:00
Marco Vedovati
a27a3e7049 virtcontainers: kill hypervisor if startSandbox fails
Make sure the hypervisor is stopped if startSandbox does not succeed, by
calling stopSandbox.

Fixes: #1636

Signed-off-by: Marco Vedovati <mvedovati@suse.com>
2019-05-16 12:31:51 +02:00
Manohar Castelino
5e9cb48b8f firecracker: Setup rootfs to be RO
Setup rootfs to be RO both from the VMM point of view and the
VM point of view.

Fixes: #1632

Signed-off-by: Manohar Castelino <manohar.r.castelino@intel.com>
2019-05-07 15:03:28 -07:00
Manohar Castelino
c15577565e Firecracker: Fix kernel command line parameters
Firecracker does not support pci. It also uses kbd to implement reboot/reset.
Fix the kernel boot params to address this.

It also does not have good entropy at startup. Use the hardware random
number generator to support entropy.

Fixes: #1620

Signed-off-by: Manohar Castelino <manohar.r.castelino@intel.com>
2019-05-03 16:08:56 -07:00
Eric Ernst
fada1e94b0 Merge pull request #1614 from mcastelino/topic/firecracker_015
firecracker: Add support for v0.15.x
2019-05-02 17:37:53 -06:00
Manohar Castelino
b496f3f71d firecracker: Add support for default VM configuration
Kata support specifing the default VM configuration via
configuration.toml. This allows the system or cluster admin
to choose the default (i.e minimum) size of the VM.

Add support in kata to respect the VM configuration for firecracker.

Also refactor some code to make error handling uniform.

Fixes: #1594

Signed-off-by: Manohar Castelino <manohar.r.castelino@intel.com>
2019-05-02 17:06:11 +00:00
Manohar Castelino
f75b7fed7e firecracker: Add support for v0.15.x
Add support for v0.15.x. Change the drive naming scheme to match
the requirement of v0.15.x

Fixes: #1598

Signed-off-by: Manohar Castelino <manohar.r.castelino@intel.com>
2019-05-02 16:47:15 +00:00