mirror of https://github.com/k3s-io/k3s
Simplify SELinux detection and add --disable-selinux flag
parent
d049a5d09f
commit
a3cb9ee1f6
|
@ -397,6 +397,7 @@ func get(envInfo *cmds.Agent) (*config.Node, error) {
|
||||||
|
|
||||||
nodeConfig := &config.Node{
|
nodeConfig := &config.Node{
|
||||||
Docker: envInfo.Docker,
|
Docker: envInfo.Docker,
|
||||||
|
DisableSELinux: envInfo.DisableSELinux,
|
||||||
ContainerRuntimeEndpoint: envInfo.ContainerRuntimeEndpoint,
|
ContainerRuntimeEndpoint: envInfo.ContainerRuntimeEndpoint,
|
||||||
FlannelBackend: controlConfig.FlannelBackend,
|
FlannelBackend: controlConfig.FlannelBackend,
|
||||||
}
|
}
|
||||||
|
@ -474,6 +475,7 @@ func get(envInfo *cmds.Agent) (*config.Node, error) {
|
||||||
nodeConfig.AgentConfig.DisableCCM = controlConfig.DisableCCM
|
nodeConfig.AgentConfig.DisableCCM = controlConfig.DisableCCM
|
||||||
nodeConfig.AgentConfig.DisableNPC = controlConfig.DisableNPC
|
nodeConfig.AgentConfig.DisableNPC = controlConfig.DisableNPC
|
||||||
nodeConfig.AgentConfig.Rootless = envInfo.Rootless
|
nodeConfig.AgentConfig.Rootless = envInfo.Rootless
|
||||||
|
nodeConfig.DisableSELinux = envInfo.DisableSELinux
|
||||||
|
|
||||||
return nodeConfig, nil
|
return nodeConfig, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,11 +171,21 @@ func setupContainerdConfig(ctx context.Context, cfg *config.Node) error {
|
||||||
PrivateRegistryConfig: privRegistries,
|
PrivateRegistryConfig: privRegistries,
|
||||||
}
|
}
|
||||||
|
|
||||||
selinux, err := selinuxEnabled()
|
selEnabled, selConfigured, err := selinuxStatus()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to detect selinux")
|
return errors.Wrap(err, "failed to detect selinux")
|
||||||
}
|
}
|
||||||
containerdConfig.SELinuxEnabled = selinux
|
if cfg.DisableSELinux {
|
||||||
|
containerdConfig.SELinuxEnabled = false
|
||||||
|
if selEnabled {
|
||||||
|
logrus.Warn("SELinux is enabled for system but has been disabled for containerd by override")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
containerdConfig.SELinuxEnabled = selEnabled
|
||||||
|
}
|
||||||
|
if containerdConfig.SELinuxEnabled && !selConfigured {
|
||||||
|
logrus.Warnf("SELinux is enabled for k3s but process is not running in context '%s', k3s-selinux policy may need to be applied", SELinuxContextType)
|
||||||
|
}
|
||||||
|
|
||||||
containerdTemplateBytes, err := ioutil.ReadFile(cfg.Containerd.Template)
|
containerdTemplateBytes, err := ioutil.ReadFile(cfg.Containerd.Template)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
|
@ -8,20 +8,20 @@ const (
|
||||||
SELinuxContextType = "container_runtime_t"
|
SELinuxContextType = "container_runtime_t"
|
||||||
)
|
)
|
||||||
|
|
||||||
func selinuxEnabled() (bool, error) {
|
func selinuxStatus() (bool, bool, error) {
|
||||||
if !selinux.GetEnabled() {
|
if !selinux.GetEnabled() {
|
||||||
return false, nil
|
return false, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
label, err := selinux.CurrentLabel()
|
label, err := selinux.CurrentLabel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return true, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, err := selinux.NewContext(label)
|
ctx, err := selinux.NewContext(label)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return true, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx["type"] == SELinuxContextType, nil
|
return true, ctx["type"] == SELinuxContextType, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ type Agent struct {
|
||||||
Rootless bool
|
Rootless bool
|
||||||
RootlessAlreadyUnshared bool
|
RootlessAlreadyUnshared bool
|
||||||
WithNodeID bool
|
WithNodeID bool
|
||||||
|
DisableSELinux bool
|
||||||
AgentShared
|
AgentShared
|
||||||
ExtraKubeletArgs cli.StringSlice
|
ExtraKubeletArgs cli.StringSlice
|
||||||
ExtraKubeProxyArgs cli.StringSlice
|
ExtraKubeProxyArgs cli.StringSlice
|
||||||
|
@ -127,6 +128,12 @@ var (
|
||||||
Usage: "(agent/node) Registering and starting kubelet with set of labels",
|
Usage: "(agent/node) Registering and starting kubelet with set of labels",
|
||||||
Value: &AgentConfig.Labels,
|
Value: &AgentConfig.Labels,
|
||||||
}
|
}
|
||||||
|
DisableSELinuxFlag = cli.BoolFlag{
|
||||||
|
Name: "disable-selinux",
|
||||||
|
Usage: "(agent/node) Disable SELinux in containerd if currently enabled",
|
||||||
|
Hidden: true,
|
||||||
|
Destination: &AgentConfig.DisableSELinux,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewAgentCommand(action func(ctx *cli.Context) error) cli.Command {
|
func NewAgentCommand(action func(ctx *cli.Context) error) cli.Command {
|
||||||
|
@ -169,6 +176,7 @@ func NewAgentCommand(action func(ctx *cli.Context) error) cli.Command {
|
||||||
NodeLabels,
|
NodeLabels,
|
||||||
NodeTaints,
|
NodeTaints,
|
||||||
DockerFlag,
|
DockerFlag,
|
||||||
|
DisableSELinuxFlag,
|
||||||
CRIEndpointFlag,
|
CRIEndpointFlag,
|
||||||
PauseImageFlag,
|
PauseImageFlag,
|
||||||
PrivateRegistryFlag,
|
PrivateRegistryFlag,
|
||||||
|
|
|
@ -216,6 +216,7 @@ func NewServerCommand(action func(*cli.Context) error) cli.Command {
|
||||||
NodeLabels,
|
NodeLabels,
|
||||||
NodeTaints,
|
NodeTaints,
|
||||||
DockerFlag,
|
DockerFlag,
|
||||||
|
DisableSELinuxFlag,
|
||||||
CRIEndpointFlag,
|
CRIEndpointFlag,
|
||||||
PauseImageFlag,
|
PauseImageFlag,
|
||||||
PrivateRegistryFlag,
|
PrivateRegistryFlag,
|
||||||
|
|
|
@ -25,6 +25,7 @@ type Node struct {
|
||||||
Docker bool
|
Docker bool
|
||||||
ContainerRuntimeEndpoint string
|
ContainerRuntimeEndpoint string
|
||||||
NoFlannel bool
|
NoFlannel bool
|
||||||
|
DisableSELinux bool
|
||||||
FlannelBackend string
|
FlannelBackend string
|
||||||
FlannelConf string
|
FlannelConf string
|
||||||
FlannelConfOverride bool
|
FlannelConfOverride bool
|
||||||
|
|
Loading…
Reference in New Issue