kubernetes/pkg/util/mount
Kubernetes Submit Queue d2495b8329
Merge pull request #63143 from jsafrane/containerized-subpath
Automatic merge from submit-queue (batch tested with PRs 63348, 63839, 63143, 64447, 64567). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Containerized subpath

**What this PR does / why we need it**:
Containerized kubelet needs a different implementation of `PrepareSafeSubpath` than kubelet running directly on the host.

On the host we safely open the subpath and then bind-mount `/proc/<pidof kubelet>/fd/<descriptor of opened subpath>`.

With kubelet running in a container, `/proc/xxx/fd/yy` on the host contains path that works only inside the container, i.e. `/rootfs/path/to/subpath` and thus any bind-mount on the host fails.

Solution:
- safely open the subpath and gets its device ID and inode number
- blindly bind-mount the subpath to `/var/lib/kubelet/pods/<uid>/volume-subpaths/<name of container>/<id of mount>`. This is potentially unsafe, because user can change the subpath source to a link to a bad place (say `/run/docker.sock`) just before the bind-mount.
- get device ID and inode number of the destination. Typical users can't modify this file, as it lies on /var/lib/kubelet on the host.
- compare these device IDs and inode numbers.

**Which issue(s) this PR fixes**
Fixes #61456

**Special notes for your reviewer**:

The PR contains some refactoring of `doBindSubPath` to extract the common code. New `doNsEnterBindSubPath` is added for the nsenter related parts.

**Release note**:

```release-note
NONE
```
2018-06-01 12:12:19 -07:00
..
BUILD Nsenter unit tests 2018-05-23 10:21:21 +02:00
doc.go Use Go canonical import paths 2016-07-16 13:48:21 -04:00
exec_mount_test.go Enhance ExistsPath check 2018-05-23 10:21:20 +02:00
exec_mount_unsupported.go Enhance ExistsPath check 2018-05-23 10:21:20 +02:00
exec_mount.go Enhance ExistsPath check 2018-05-23 10:21:20 +02:00
exec.go Add Exec interface to VolumeHost 2017-08-14 12:16:25 +02:00
fake.go Enhance ExistsPath check 2018-05-23 10:21:20 +02:00
mount_linux_test.go Merge pull request #63143 from jsafrane/containerized-subpath 2018-06-01 12:12:19 -07:00
mount_linux.go Merge pull request #63143 from jsafrane/containerized-subpath 2018-06-01 12:12:19 -07:00
mount_unsupported.go Enhance ExistsPath check 2018-05-23 10:21:20 +02:00
mount_windows_test.go add IsLikelyNotMountPoint test on Windows 2018-05-09 02:41:38 +00:00
mount_windows.go Change SafeMakeDir to resolve symlinks in mounter implementation 2018-05-23 10:21:20 +02:00
mount.go Change SafeMakeDir to resolve symlinks in mounter implementation 2018-05-23 10:21:20 +02:00
nsenter_mount_test.go Nsenter unit tests 2018-05-23 10:21:21 +02:00
nsenter_mount_unsupported.go Pass Nsenter to NsenterMounter and NsenterWriter 2018-05-23 10:21:21 +02:00
nsenter_mount.go Merge pull request #63143 from jsafrane/containerized-subpath 2018-06-01 12:12:19 -07:00
OWNERS add andyzhangx as Reviewer 2018-04-16 07:13:15 +00:00
safe_format_and_mount_test.go When creating ext3/ext4 volume, pass -m0 to mkfs in order to disable the 2018-05-21 12:43:57 -04:00