Skip to content

Commit 0888d0a

Browse files
committed
Update RootlessKit (3.0.0)
- slirp4netns is no longer needed as gvisor-tap-vsock is now embedded in RootlessKit. slirp4netns is still used when installed. - The `builtin` port driver can now correctly propagate the source IP. Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
1 parent 1a341a6 commit 0888d0a

File tree

18 files changed

+38
-54
lines changed

18 files changed

+38
-54
lines changed

Dockerfile

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ ARG STARGZ_SNAPSHOTTER_VERSION=v0.18.1@BINARY
2828
# Extra deps: Encryption
2929
ARG IMGCRYPT_VERSION=v2.0.2@6892f4df2405cd15acbefd1dca970f53ba38bfda
3030
# Extra deps: Rootless
31-
ARG ROOTLESSKIT_VERSION=v2.3.6@BINARY
32-
ARG SLIRP4NETNS_VERSION=v1.3.3@BINARY
31+
ARG ROOTLESSKIT_VERSION=v3.0.0-beta.0@BINARY
3332
# Extra deps: bypass4netns
3433
ARG BYPASS4NETNS_VERSION=v0.4.2@aa04bd3dcc48c6dae6d7327ba219bda8fe2a4634
3534
# Extra deps: FUSE-OverlayFS
@@ -194,14 +193,6 @@ RUN git clone --quiet --depth 1 --branch "${IMGCRYPT_VERSION%%@*}" https://githu
194193
git-checkout-tag-with-hash.sh "${IMGCRYPT_VERSION}" && \
195194
CGO_ENABLED=0 make && DESTDIR=/out make install && \
196195
echo "- imgcrypt: ${IMGCRYPT_VERSION%%@*}" >> /out/share/doc/nerdctl-full/README.md
197-
ARG SLIRP4NETNS_VERSION
198-
RUN SLIRP4NETNS_VERSION=${SLIRP4NETNS_VERSION%%@*}; \
199-
fname="slirp4netns-$(cat /target_uname_m)" && \
200-
curl -o "${fname}" -fsSL --retry 5 --retry-delay 5 --retry-max-time 120 --connect-timeout 20 --proto '=https' --tlsv1.2 "https://github.com/rootless-containers/slirp4netns/releases/download/${SLIRP4NETNS_VERSION}/${fname}" && \
201-
grep "${fname}" "/SHA256SUMS.d/slirp4netns-${SLIRP4NETNS_VERSION}" | sha256sum -c && \
202-
mv "${fname}" /out/bin/slirp4netns && \
203-
chmod +x /out/bin/slirp4netns && \
204-
echo "- slirp4netns: ${SLIRP4NETNS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
205196
ARG BYPASS4NETNS_VERSION
206197
COPY --from=build-bypass4netns /out/${TARGETARCH:-amd64}/* /out/bin/
207198
RUN echo "- bypass4netns: ${BYPASS4NETNS_VERSION%%@*}" >> /out/share/doc/nerdctl-full/README.md
@@ -256,7 +247,6 @@ RUN --mount=type=secret,id=github_token,env=GITHUB_TOKEN \
256247

257248
RUN echo "" >> /out/share/doc/nerdctl-full/README.md && \
258249
echo "## License" >> /out/share/doc/nerdctl-full/README.md && \
259-
echo "- bin/slirp4netns: [GNU GENERAL PUBLIC LICENSE, Version 2](https://github.com/rootless-containers/slirp4netns/blob/${SLIRP4NETNS_VERSION%%@*}/COPYING)" >> /out/share/doc/nerdctl-full/README.md && \
260250
echo "- bin/fuse-overlayfs: [GNU GENERAL PUBLIC LICENSE, Version 2](https://github.com/containers/fuse-overlayfs/blob/${FUSE_OVERLAYFS_VERSION%%@*}/COPYING)" >> /out/share/doc/nerdctl-full/README.md && \
261251
echo "- bin/{runc,bypass4netns,bypass4netnsd}: Apache License 2.0, statically linked with libseccomp ([LGPL 2.1](https://github.com/seccomp/libseccomp/blob/main/LICENSE), source code available at https://github.com/seccomp/libseccomp/)" >> /out/share/doc/nerdctl-full/README.md && \
262252
echo "- bin/tini: [MIT License](https://github.com/krallin/tini/blob/${TINI_VERSION%%@*}/LICENSE)" >> /out/share/doc/nerdctl-full/README.md && \
@@ -390,5 +380,7 @@ CMD ["/test-integration-rootless.sh", "./hack/test-integration.sh"]
390380
FROM test-integration-rootless AS test-integration-rootless-port-slirp4netns
391381
COPY ./Dockerfile.d/home_rootless_.config_systemd_user_containerd.service.d_port-slirp4netns.conf /home/rootless/.config/systemd/user/containerd.service.d/port-slirp4netns.conf
392382
RUN chown -R rootless:rootless /home/rootless/.config
383+
RUN apt-get update -qq && apt-get install -qq --no-install-recommends \
384+
slirp4netns
393385

394386
FROM base AS demo

Dockerfile.d/SHA256SUMS.d/rootlesskit-v2.3.6

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
db73b5d1e8ae3f46c9613ac9eb5bfc2f1fb30fd2de04ed3af6f9f5758549d4ef rootlesskit-aarch64.tar.gz
2+
6ecf3229e591fe4546af1f108650e7f5028bc207110169f343cfb32e018396e3 rootlesskit-armv7l.tar.gz
3+
220aa1b46969bf0d29b6bb68d0e9ec7f721237d4690069527c82b8ff0d212582 rootlesskit-ppc64le.tar.gz
4+
ddd23d643fa4db4b1196026e65a95bbe3ae3d7ba485a4718b8164d2cd17f631b rootlesskit-riscv64.tar.gz
5+
31cc838d515e3a1622c4322d2d417d3e602b825af62d66e34d0366b4582f6758 rootlesskit-s390x.tar.gz
6+
f43c5c82f279820fa85fcf0e2d238d066460bfebe0f7488f5ec6b963f6406009 rootlesskit-x86_64.tar.gz

Dockerfile.d/SHA256SUMS.d/slirp4netns-v1.3.3

Lines changed: 0 additions & 7 deletions
This file was deleted.

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,8 @@ In addition to containerd, the following components should be installed:
134134
- v1.1.0 or later is highly recommended.
135135
- [BuildKit](https://github.com/moby/buildkit) (OPTIONAL): for using `nerdctl build`. BuildKit daemon (`buildkitd`) needs to be running. See also [the document about setting up BuildKit](./docs/build.md).
136136
- v0.11.0 or later is highly recommended. Some features, such as pruning caches with `nerdctl system prune`, do not work with older versions.
137-
- [RootlessKit](https://github.com/rootless-containers/rootlesskit) and [slirp4netns](https://github.com/rootless-containers/slirp4netns) (OPTIONAL): for [Rootless mode](./docs/rootless.md)
138-
- RootlessKit needs to be v0.10.0 or later. v2.0.0 or later is recommended.
139-
- slirp4netns needs to be v0.4.0 or later. v1.1.7 or later is recommended.
137+
- [RootlessKit](https://github.com/rootless-containers/rootlesskit) (OPTIONAL): for [Rootless mode](./docs/rootless.md)
138+
- RootlessKit needs to be v0.10.0 or later. v3.0.0 or later is recommended.
140139

141140
These dependencies are included in `nerdctl-full-<VERSION>-<OS>-<ARCH>.tar.gz`, but not included in `nerdctl-<VERSION>-<OS>-<ARCH>.tar.gz`.
142141

docs/faq.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,9 @@ See also:
311311
- https://rootlesscontaine.rs/getting-started/containerd/
312312
313313
### `nerdctl run -p <PORT>` does not propagate source IP
314-
Expected behavior with the default `rootlesskit` port driver.
314+
Make sure that nerdctl is running with RootlessKit v3.0 or later.
315315
316-
The solution is to change the port driver to `slirp4netns` (sacrifices performance).
316+
For older version of RootlessKit, change the port driver to `slirp4netns` (sacrifices performance).
317317
318318
See https://rootlesscontaine.rs/getting-started/containerd/#changing-the-port-forwarder .
319319

docs/rootless.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,9 @@ More detail is available at [https://github.com/rootless-containers/bypass4netns
153153
Rootless containerd recognizes the following environment variables to configure the behavior of [RootlessKit](https://github.com/rootless-containers/rootlesskit):
154154

155155
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=DIR`: the rootlesskit state dir. Defaults to `$XDG_RUNTIME_DIR/containerd-rootless`.
156-
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_NET=(slirp4netns|vpnkit|lxc-user-nic)`: the rootlesskit network driver. Defaults to "slirp4netns" if slirp4netns (>= v0.4.0) is installed. Otherwise defaults to "vpnkit".
157-
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_MTU=NUM`: the MTU value for the rootlesskit network driver. Defaults to 65520 for slirp4netns, 1500 for other drivers.
158-
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=(builtin|slirp4netns)`: the rootlesskit port driver. Defaults to "builtin" (this driver does not propagate the container's source IP address and always uses 127.0.0.1. Please check [Port Drivers](https://github.com/rootless-containers/rootlesskit/blob/master/docs/port.md#port-drivers) for more details).
156+
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_NET=(slirp4netns|vpnkit|pasta|gvisor-tap-vsock|lxc-user-nic)`: the rootlesskit network driver. Defaults to "slirp4netns" if slirp4netns (>= v0.4.0) is installed. Otherwise defaults to "gvisor-tap-vsock".
157+
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_MTU=NUM`: the MTU value for the rootlesskit network driver. Defaults to 65520 or 1500, depending on the network driver.
158+
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=(builtin|slirp4netns|implicit|gvisor-tap-vsock)`: the rootlesskit port driver. Defaults to "builtin".
159159
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SANDBOX=(auto|true|false)`: whether to protect slirp4netns with a dedicated mount namespace. Defaults to "auto".
160160
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SECCOMP=(auto|true|false)`: whether to protect slirp4netns with seccomp. Defaults to "auto".
161161
* `CONTAINERD_ROOTLESS_ROOTLESSKIT_DETACH_NETNS=(auto|true|false)`: whether to launch rootlesskit with the "detach-netns" mode.

extras/rootless/containerd-rootless-setuptool.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ cmd_entrypoint_check() {
104104
init
105105
INFO "Checking RootlessKit functionality"
106106
if ! rootlesskit \
107-
--net=slirp4netns \
108107
--disable-host-loopback \
109108
--copy-up=/etc --copy-up=/run --copy-up=/var/lib \
110109
true; then

extras/rootless/containerd-rootless.sh

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,13 @@
2828
# External dependencies:
2929
# * newuidmap and newgidmap needs to be installed.
3030
# * /etc/subuid and /etc/subgid needs to be configured for the current user.
31-
# * RootlessKit (>= v0.10.0) needs to be installed. RootlessKit >= v2.0.0 is recommended.
32-
# * Either one of slirp4netns (>= v0.4.0), VPNKit, lxc-user-nic needs to be installed. slirp4netns >= v1.1.7 is recommended.
31+
# * RootlessKit (>= v0.10.0) needs to be installed. RootlessKit >= v3.0.0 is recommended.
3332
#
3433
# Recognized environment variables:
3534
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=DIR: the rootlesskit state dir. Defaults to "$XDG_RUNTIME_DIR/containerd-rootless".
36-
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_NET=(slirp4netns|vpnkit|lxc-user-nic): the rootlesskit network driver. Defaults to "slirp4netns" if slirp4netns (>= v0.4.0) is installed. Otherwise defaults to "vpnkit".
37-
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_MTU=NUM: the MTU value for the rootlesskit network driver. Defaults to 65520 for slirp4netns, 1500 for other drivers.
38-
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=(builtin|slirp4netns): the rootlesskit port driver. Defaults to "builtin".
35+
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_NET=(slirp4netns|vpnkit|pasta|gvisor-tap-vsock|lxc-user-nic): the rootlesskit network driver. Defaults to "slirp4netns" if slirp4netns (>= v0.4.0) is installed. Otherwise defaults to "gvisor-tap-vsock".
36+
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_MTU=NUM: the MTU value for the rootlesskit network driver. Defaults to 65520 or 1500, depending on the network driver.
37+
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=(builtin|slirp4netns|implicit|gvisor-tap-vsock): the rootlesskit port driver. Defaults to "builtin".
3938
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SANDBOX=(auto|true|false): whether to protect slirp4netns with a dedicated mount namespace. Defaults to "auto".
4039
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SECCOMP=(auto|true|false): whether to protect slirp4netns with seccomp. Defaults to "auto".
4140
# * CONTAINERD_ROOTLESS_ROOTLESSKIT_DETACH_NETNS=(auto|true|false): whether to launch rootlesskit with the "detach-netns" mode.
@@ -89,16 +88,20 @@ if [ -z "$_CONTAINERD_ROOTLESS_CHILD" ]; then
8988
if [ -z "$mtu" ]; then
9089
mtu=65520
9190
fi
91+
CONTAINERD_ROOTLESS_ROOTLESSKIT_FLAGS="--slirp4netns-sandbox=\"${CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SANDBOX}\" $CONTAINERD_ROOTLESS_ROOTLESSKIT_FLAGS"
92+
CONTAINERD_ROOTLESS_ROOTLESSKIT_FLAGS="--slirp4netns-seccomp=\"${CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SECCOMP}\" $CONTAINERD_ROOTLESS_ROOTLESSKIT_FLAGS"
9293
else
93-
echo "slirp4netns found but seems older than v0.4.0. Falling back to VPNKit."
94+
echo "slirp4netns found but seems older than v0.4.0. Falling back to other drivers."
9495
fi
9596
fi
9697
if [ -z "$net" ]; then
9798
if command -v vpnkit >/dev/null 2>&1; then
9899
net=vpnkit
99100
else
100-
echo "Either slirp4netns (>= v0.4.0) or vpnkit needs to be installed"
101-
exit 1
101+
net=gvisor-tap-vsock
102+
if [ -z "$mtu" ]; then
103+
mtu=65520
104+
fi
102105
fi
103106
fi
104107
fi
@@ -148,8 +151,6 @@ if [ -z "$_CONTAINERD_ROOTLESS_CHILD" ]; then
148151
exec rootlesskit \
149152
--state-dir="$CONTAINERD_ROOTLESS_ROOTLESSKIT_STATE_DIR" \
150153
--net="$net" --mtu="$mtu" \
151-
--slirp4netns-sandbox="$CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SANDBOX" \
152-
--slirp4netns-seccomp="$CONTAINERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SECCOMP" \
153154
--disable-host-loopback --port-driver="$CONTAINERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER" \
154155
--copy-up=/etc --copy-up=/run --copy-up=/var/lib \
155156
--propagation=rslave \

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ require (
5555
github.com/opencontainers/runtime-spec v1.3.0
5656
github.com/pelletier/go-toml/v2 v2.3.0
5757
github.com/rootless-containers/bypass4netns v0.4.2 //gomodjail:unconfined
58-
github.com/rootless-containers/rootlesskit/v2 v2.3.6 //gomodjail:unconfined
58+
github.com/rootless-containers/rootlesskit/v3 v3.0.0-beta.0 //gomodjail:unconfined
5959
github.com/spf13/cobra v1.10.2 //gomodjail:unconfined
6060
github.com/spf13/pflag v1.0.10 //gomodjail:unconfined
6161
github.com/vishvananda/netlink v1.3.1 //gomodjail:unconfined

0 commit comments

Comments
 (0)