Skip to content

Commit e476a60

Browse files
authored
Merge pull request kubernetes#73241 from vikaschoudhary16/selinux-label
Add correct selinux label at plugin socket directory
2 parents 1ae2a5d + 58d1b4d commit e476a60

File tree

8 files changed

+37
-0
lines changed

8 files changed

+37
-0
lines changed

pkg/kubelet/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ go_library(
106106
"//pkg/util/node:go_default_library",
107107
"//pkg/util/oom:go_default_library",
108108
"//pkg/util/removeall:go_default_library",
109+
"//pkg/util/selinux:go_default_library",
109110
"//pkg/util/taints:go_default_library",
110111
"//pkg/volume:go_default_library",
111112
"//pkg/volume/csi:go_default_library",

pkg/kubelet/cm/devicemanager/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ go_library(
2626
"//pkg/kubelet/metrics:go_default_library",
2727
"//pkg/kubelet/util/pluginwatcher:go_default_library",
2828
"//pkg/scheduler/nodeinfo:go_default_library",
29+
"//pkg/util/selinux:go_default_library",
2930
"//staging/src/k8s.io/api/core/v1:go_default_library",
3031
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
3132
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",

pkg/kubelet/cm/devicemanager/manager.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"k8s.io/kubernetes/pkg/kubelet/metrics"
4343
watcher "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher"
4444
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
45+
"k8s.io/kubernetes/pkg/util/selinux"
4546
)
4647

4748
// ActivePodsFunc is a function that returns a list of pods to reconcile.
@@ -206,6 +207,11 @@ func (m *ManagerImpl) Start(activePods ActivePodsFunc, sourcesReady config.Sourc
206207

207208
socketPath := filepath.Join(m.socketdir, m.socketname)
208209
os.MkdirAll(m.socketdir, 0755)
210+
if selinux.SELinuxEnabled() {
211+
if err := selinux.SetFileLabel(m.socketdir, config.KubeletPluginsDirSELinuxLabel); err != nil {
212+
klog.Warningf("Unprivileged containerized plugins might not work. Could not set selinux context on %s: %v", m.socketdir, err)
213+
}
214+
}
209215

210216
// Removes all stale sockets in m.socketdir. Device plugins can monitor
211217
// this and use it as a signal to re-register with the new Kubelet.

pkg/kubelet/config/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ const (
2626
DefaultKubeletContainersDirName = "containers"
2727
DefaultKubeletPluginContainersDirName = "plugin-containers"
2828
DefaultKubeletPodResourcesDirName = "pod-resources"
29+
KubeletPluginsDirSELinuxLabel = "system_u:object_r:container_file_t:s0"
2930
)

pkg/kubelet/kubelet.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ import (
110110
"k8s.io/kubernetes/pkg/util/mount"
111111
nodeutil "k8s.io/kubernetes/pkg/util/node"
112112
"k8s.io/kubernetes/pkg/util/oom"
113+
"k8s.io/kubernetes/pkg/util/selinux"
113114
"k8s.io/kubernetes/pkg/volume"
114115
"k8s.io/kubernetes/pkg/volume/csi"
115116
"k8s.io/kubernetes/pkg/volume/util/subpath"
@@ -1222,6 +1223,8 @@ type Kubelet struct {
12221223
// 4. the pod-resources directory
12231224
func (kl *Kubelet) setupDataDirs() error {
12241225
kl.rootDirectory = path.Clean(kl.rootDirectory)
1226+
pluginRegistrationDir := kl.getPluginsRegistrationDir()
1227+
pluginsDir := kl.getPluginsDir()
12251228
if err := os.MkdirAll(kl.getRootDir(), 0750); err != nil {
12261229
return fmt.Errorf("error creating root directory: %v", err)
12271230
}
@@ -1240,6 +1243,16 @@ func (kl *Kubelet) setupDataDirs() error {
12401243
if err := os.MkdirAll(kl.getPodResourcesDir(), 0750); err != nil {
12411244
return fmt.Errorf("error creating podresources directory: %v", err)
12421245
}
1246+
if selinux.SELinuxEnabled() {
1247+
err := selinux.SetFileLabel(pluginRegistrationDir, config.KubeletPluginsDirSELinuxLabel)
1248+
if err != nil {
1249+
klog.Warningf("Unprivileged containerized plugins might not work. Could not set selinux context on %s: %v", pluginRegistrationDir, err)
1250+
}
1251+
err = selinux.SetFileLabel(pluginsDir, config.KubeletPluginsDirSELinuxLabel)
1252+
if err != nil {
1253+
klog.Warningf("Unprivileged containerized plugins might not work. Could not set selinux context on %s: %v", pluginsDir, err)
1254+
}
1255+
}
12431256
return nil
12441257
}
12451258

pkg/kubelet/kubelet_getters.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ func (kl *Kubelet) getPodResourcesDir() string {
159159
return filepath.Join(kl.getRootDir(), config.DefaultKubeletPodResourcesDirName)
160160
}
161161

162+
// getPluginsDirSELinuxLabel returns the selinux label to be applied on plugin directories
163+
func (kl *Kubelet) getPluginsDirSELinuxLabel() string {
164+
return config.KubeletPluginsDirSELinuxLabel
165+
}
166+
162167
// GetPods returns all pods bound to the kubelet and their spec, and the mirror
163168
// pods.
164169
func (kl *Kubelet) GetPods() []*v1.Pod {

pkg/util/selinux/selinux_linux.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,8 @@ func (_ *realSELinuxRunner) Getfilecon(path string) (string, error) {
5050
}
5151
return selinux.FileLabel(path)
5252
}
53+
54+
// SetFileLabel applies the SELinux label on the path or returns an error.
55+
func SetFileLabel(path string, label string) error {
56+
return selinux.SetFileLabel(path, label)
57+
}

pkg/util/selinux/selinux_unsupported.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ var _ SELinuxRunner = &realSELinuxRunner{}
3131
func (_ *realSELinuxRunner) Getfilecon(path string) (string, error) {
3232
return "", nil
3333
}
34+
35+
// FileLabel returns the SELinux label for this path or returns an error.
36+
func SetFileLabel(path string, label string) error {
37+
return nil
38+
}

0 commit comments

Comments
 (0)