From c2175abcbae5451fe9272ab1eab41662d8ea51de Mon Sep 17 00:00:00 2001 From: Jose Donizetti Date: Sat, 18 Jul 2020 18:19:53 -0300 Subject: [PATCH] Add static ip to kic/docker --- cmd/minikube/cmd/delete.go | 7 +++++++ pkg/drivers/kic/kic.go | 11 +++++++++++ pkg/drivers/kic/oci/network.go | 27 +++++++++++++++++++++++++++ pkg/drivers/kic/oci/oci.go | 7 +++++++ pkg/drivers/kic/oci/types.go | 2 ++ 5 files changed, 54 insertions(+) diff --git a/cmd/minikube/cmd/delete.go b/cmd/minikube/cmd/delete.go index f4b063231..5293c6446 100644 --- a/cmd/minikube/cmd/delete.go +++ b/cmd/minikube/cmd/delete.go @@ -251,6 +251,13 @@ func deletePossibleKicLeftOver(cname string, driverName string) { glog.Warningf("error deleting volumes (might be okay).\nTo see the list of volumes run: 'docker volume ls'\n:%v", errs) } + // TODO: move to oci.DeleteContainer? + defaultNetwork := fmt.Sprintf("%s-network", cname) + err = oci.RemoveNetwork(defaultNetwork) + if err != nil { + glog.Warningf("error deleting network. :%v", errs) + } + if bin == oci.Podman { // podman prune does not support --filter return diff --git a/pkg/drivers/kic/kic.go b/pkg/drivers/kic/kic.go index 0b207fc22..255e580ed 100644 --- a/pkg/drivers/kic/kic.go +++ b/pkg/drivers/kic/kic.go @@ -67,6 +67,15 @@ func NewDriver(c Config) *Driver { // Create a host using the driver's config func (d *Driver) Create() error { + defaultNetwork := fmt.Sprintf("%s-network", d.MachineName) + defaultIPRange := "192.168.39.0/24" + + err := oci.CreateNetwork(defaultNetwork, defaultIPRange) + if err != nil { + // use k8s network? fail? + return err + } + params := oci.CreateParams{ Name: d.NodeConfig.MachineName, Image: d.NodeConfig.ImageDigest, @@ -78,6 +87,8 @@ func (d *Driver) Create() error { ExtraArgs: []string{"--expose", fmt.Sprintf("%d", d.NodeConfig.APIServerPort)}, OCIBinary: d.NodeConfig.OCIBinary, APIServerPort: d.NodeConfig.APIServerPort, + Network: defaultNetwork, + IP: "192.168.39.2", } // control plane specific options diff --git a/pkg/drivers/kic/oci/network.go b/pkg/drivers/kic/oci/network.go index f39a23f16..51e092570 100644 --- a/pkg/drivers/kic/oci/network.go +++ b/pkg/drivers/kic/oci/network.go @@ -162,3 +162,30 @@ func dockerContainerIP(name string) (string, string, error) { return ips[0], ips[1], nil } + +// CreateNetwork creates a network +func CreateNetwork(name, ipRange string) error { + // TODO: validate if exist? + // TODO: subnet conflict + // TODO: configure gateway explictly + + subnet := fmt.Sprintf("--subnet=%s", ipRange) + _, err := runCmd(exec.Command(Docker, "network", "create", "--driver=bridge", subnet, name)) + if err != nil { + return errors.Wrapf(err, "error creating network") + } + + return nil +} + +// RemoveNetwork removes a network +func RemoveNetwork(name string) error { + // TODO: check if exist? + + _, err := runCmd(exec.Command(Docker, "network", "remove", name)) + if err != nil { + return errors.Wrapf(err, "error removing network") + } + + return nil +} diff --git a/pkg/drivers/kic/oci/oci.go b/pkg/drivers/kic/oci/oci.go index 3ef6a94cf..96731ceeb 100644 --- a/pkg/drivers/kic/oci/oci.go +++ b/pkg/drivers/kic/oci/oci.go @@ -142,6 +142,13 @@ func CreateContainerNode(p CreateParams) error { "--label", p.NodeLabel, } + // network + if p.OCIBinary == Docker && runtime.GOOS == "linux" { // for now only docker on linux + runArgs = append(runArgs, "--network", p.Network) + runArgs = append(runArgs, "--ip", p.IP) + } + + // volume if p.OCIBinary == Podman { // enable execing in /var // podman mounts var/lib with no-exec by default https://github.com/containers/libpod/issues/5103 runArgs = append(runArgs, "--volume", fmt.Sprintf("%s:/var:exec", p.Name)) diff --git a/pkg/drivers/kic/oci/types.go b/pkg/drivers/kic/oci/types.go index ae65b99c6..7e9487cef 100644 --- a/pkg/drivers/kic/oci/types.go +++ b/pkg/drivers/kic/oci/types.go @@ -48,6 +48,8 @@ type CreateParams struct { Envs map[string]string // environment variables to pass to the container ExtraArgs []string // a list of any extra option to pass to oci binary during creation time, for example --expose 8080... OCIBinary string // docker or podman + Network string // network used by the container + IP string // container ip address } // createOpt is an option for Create -- GitLab