containerd/docs/cri
Akihiro Suda b2f254fff0
cri: make read-only mounts recursively read-only
Prior to this commit, `readOnly` volumes were not recursively read-only and
could result in compromise of data;
e.g., even if `/mnt` was mounted as read-only, its submounts such as
`/mnt/usbstorage` were not read-only.

This commit utilizes runc's "rro" bind mount option to make read-only bind
mounts literally read-only. The "rro" bind mount options is implemented by
calling `mount_setattr(2)` with `MOUNT_ATTR_RDONLY` and `AT_RECURSIVE`.

The "rro" bind mount options requires kernel >= 5.12, with runc >= 1.1 or
a compatible runtime such as crun >= 1.4.

When the "rro" bind mount options is not available, containerd falls back
to the legacy non-recursive read-only mounts by default.

The behavior is configurable via `/etc/containerd/config.toml`:
```toml
version = 2
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  # treat_ro_mounts_as_rro ("Enabled"|"IfPossible"|"Disabled")
  # treats read-only mounts as recursive read-only mounts.
  # An empty string means "IfPossible".
  # "Enabled" requires Linux kernel v5.12 or later.
  # This configuration does not apply to non-volume mounts such as "/sys/fs/cgroup".
  treat_ro_mounts_as_rro = ""
```

Replaces:
- kubernetes/enhancements issue 3857
- kubernetes/enhancements PR 3858

Note: this change does not affect non-CRI clients such as ctr, nerdctl, and Docker/Moby.
RRO mounts have been supported since nerdctl v0.14 (containerd/nerdctl PR 511)
and Docker v25 (moby/moby PR 45278).

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2024-02-01 09:39:36 +09:00
..
architecture.md Replace broken and redirection link for CRI and kubelet in docs 2022-11-15 09:57:42 +05:30
architecture.png Move CRI plugin's docs from docs/ to docs/cri/ 2020-11-10 11:49:05 -08:00
config.md cri: make read-only mounts recursively read-only 2024-02-01 09:39:36 +09:00
cri.png docs: point cri release tarball to github release page 2021-01-03 17:50:40 +08:00
crictl.md upgrade registry.k8s.io/pause version 2023-05-28 07:59:10 +08:00
decryption.md fixing some doc links 2021-06-21 18:24:47 -05:00
registry.md Update CRI registry configuration docs 2023-04-29 23:54:25 -07:00
testing.md added make help for cri integration 2022-03-28 16:44:12 -05:00