Commit 6f2b21c5 authored by Brad Davidson's avatar Brad Davidson Committed by Brad Davidson

Add rootless IPv6 support

parent c02dceb7
...@@ -258,7 +258,11 @@ func Run(ctx context.Context, cfg cmds.Agent) error { ...@@ -258,7 +258,11 @@ func Run(ctx context.Context, cfg cmds.Agent) error {
} }
if cfg.Rootless && !cfg.RootlessAlreadyUnshared { if cfg.Rootless && !cfg.RootlessAlreadyUnshared {
if err := rootless.Rootless(cfg.DataDir); err != nil { dualNode, err := utilsnet.IsDualStackIPStrings(cfg.NodeIP)
if err != nil {
return err
}
if err := rootless.Rootless(cfg.DataDir, dualNode); err != nil {
return err return err
} }
} }
......
...@@ -81,7 +81,11 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont ...@@ -81,7 +81,11 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
} }
cfg.DataDir = dataDir cfg.DataDir = dataDir
if !cfg.DisableAgent { if !cfg.DisableAgent {
if err := rootless.Rootless(dataDir); err != nil { dualNode, err := utilsnet.IsDualStackIPStrings(cmds.AgentConfig.NodeIP)
if err != nil {
return err
}
if err := rootless.Rootless(dataDir, dualNode); err != nil {
return err return err
} }
} }
......
...@@ -29,11 +29,12 @@ var ( ...@@ -29,11 +29,12 @@ var (
mtuEnv = "K3S_ROOTLESS_MTU" mtuEnv = "K3S_ROOTLESS_MTU"
cidrEnv = "K3S_ROOTLESS_CIDR" cidrEnv = "K3S_ROOTLESS_CIDR"
enableIPv6Env = "K3S_ROOTLESS_ENABLE_IPV6"
portDriverEnv = "K3S_ROOTLESS_PORT_DRIVER" portDriverEnv = "K3S_ROOTLESS_PORT_DRIVER"
disableLoopbackEnv = "K3S_ROOTLESS_DISABLE_HOST_LOOPBACK" disableLoopbackEnv = "K3S_ROOTLESS_DISABLE_HOST_LOOPBACK"
) )
func Rootless(stateDir string) error { func Rootless(stateDir string, enableIPv6 bool) error {
defer func() { defer func() {
os.Unsetenv(pipeFD) os.Unsetenv(pipeFD)
os.Unsetenv(childEnv) os.Unsetenv(childEnv)
...@@ -66,7 +67,7 @@ func Rootless(stateDir string) error { ...@@ -66,7 +67,7 @@ func Rootless(stateDir string) error {
if err := validateSysctl(); err != nil { if err := validateSysctl(); err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }
parentOpt, err := createParentOpt(driver, rootlessDir) parentOpt, err := createParentOpt(driver, rootlessDir, enableIPv6)
if err != nil { if err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }
...@@ -127,7 +128,7 @@ func parseCIDR(s string) (*net.IPNet, error) { ...@@ -127,7 +128,7 @@ func parseCIDR(s string) (*net.IPNet, error) {
return ipnet, nil return ipnet, nil
} }
func createParentOpt(driver portDriver, stateDir string) (*parent.Opt, error) { func createParentOpt(driver portDriver, stateDir string, enableIPv6 bool) (*parent.Opt, error) {
if err := os.MkdirAll(stateDir, 0755); err != nil { if err := os.MkdirAll(stateDir, 0755); err != nil {
return nil, errors.Wrapf(err, "failed to mkdir %s", stateDir) return nil, errors.Wrapf(err, "failed to mkdir %s", stateDir)
} }
...@@ -180,6 +181,14 @@ func createParentOpt(driver portDriver, stateDir string) (*parent.Opt, error) { ...@@ -180,6 +181,14 @@ func createParentOpt(driver portDriver, stateDir string) (*parent.Opt, error) {
} }
} }
if val := os.Getenv(enableIPv6Env); val != "" {
if v, err := strconv.ParseBool(val); err != nil {
logrus.Warn("Failed to parse rootless enable-ipv6 value; using default")
} else {
enableIPv6 = v
}
}
cidr := "10.41.0.0/16" cidr := "10.41.0.0/16"
if val := os.Getenv(cidrEnv); val != "" { if val := os.Getenv(cidrEnv); val != "" {
cidr = val cidr = val
...@@ -193,7 +202,7 @@ func createParentOpt(driver portDriver, stateDir string) (*parent.Opt, error) { ...@@ -193,7 +202,7 @@ func createParentOpt(driver portDriver, stateDir string) (*parent.Opt, error) {
if _, err := exec.LookPath(binary); err != nil { if _, err := exec.LookPath(binary); err != nil {
return nil, err return nil, err
} }
opt.NetworkDriver, err = slirp4netns.NewParentDriver(driver.LogWriter(), binary, mtu, ipnet, "tap0", disableHostLoopback, driver.APISocketPath(), false, false, false) opt.NetworkDriver, err = slirp4netns.NewParentDriver(driver.LogWriter(), binary, mtu, ipnet, "tap0", disableHostLoopback, driver.APISocketPath(), false, false, enableIPv6)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
package rootless package rootless
func Rootless(stateDir string) error { func Rootless(stateDir string, enableIPv6 bool) error {
panic("Rootless not supported on windows") panic("Rootless is not supported on windows")
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment