Merge pull request #30176 from dims/check-for-root-access

Automatic merge from submit-queue

Check for CAP_SYS_ADMIN in Kubelet

Comment from nsenter_mount.go header:
The Kubelet process must have CAP_SYS_ADMIN (required by nsenter); at
the present, this effectively means that the kubelet is running in a
privileged container.

Related to #26093

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.kubernetes.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.kubernetes.io/reviews/kubernetes/kubernetes/30176)
<!-- Reviewable:end -->
This commit is contained in:
Kubernetes Submit Queue 2016-08-11 08:46:19 -07:00 committed by GitHub
commit f5861b9e49
2 changed files with 13 additions and 0 deletions

View File

@ -26,6 +26,7 @@ import (
"net"
"net/http"
_ "net/http/pprof"
"os"
"path"
"strconv"
"strings"
@ -34,6 +35,7 @@ import (
"github.com/golang/glog"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
"github.com/syndtr/gocapability/capability"
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/pkg/api"
@ -321,6 +323,16 @@ func run(s *options.KubeletServer, kcfg *KubeletConfig) (err error) {
} else {
glog.Errorf("unable to register configz: %s", err)
}
// check if we have CAP_SYS_ADMIN to setgroup properly
pid, err := capability.NewPid(os.Getpid())
if err != nil {
return err
}
if !pid.Get(capability.EFFECTIVE, capability.CAP_SYS_ADMIN) {
return fmt.Errorf("Kubelet needs the CAP_SYS_ADMIN capability. Please run kubelet as root or in a privileged container")
}
if kcfg == nil {
cfg, err := UnsecuredKubeletConfig(s)
if err != nil {

View File

@ -36,6 +36,7 @@ mkdir -p "${HOST_ARTIFACTS_DIR}"
# provided must be resolvable on the *HOST*, not the container.
docker run --rm=true \
--privileged=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "${REPO_DIR}":/go/src/k8s.io/kubernetes \
-v "${WORKSPACE}/_artifacts":/workspace/artifacts \