diff --git a/cmd/minikube/cmd/config/configure.go b/cmd/minikube/cmd/config/configure.go index baa1237dfc..c0d77e9cf7 100644 --- a/cmd/minikube/cmd/config/configure.go +++ b/cmd/minikube/cmd/config/configure.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" "k8s.io/minikube/pkg/addons" + "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/mustload" @@ -234,6 +235,26 @@ var addonsConfigureCmd = &cobra.Command{ if err := config.SaveProfile(profile, cfg); err != nil { out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) } + case "registry-aliases": + profile := ClusterFlagValue() + _, cfg := mustload.Partial(profile) + validator := func(s string) bool { + format := regexp.MustCompile(`^([a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+)+(\ [a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+)*$`) + return format.MatchString(s) + } + registryAliases := AskForStaticValidatedValue("-- Enter registry aliases separated by space: ", validator) + cfg.KubernetesConfig.RegistryAliases = registryAliases + + if err := config.SaveProfile(profile, cfg); err != nil { + out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) + } + addon := assets.Addons["registry-aliases"] + if addon.IsEnabled(cfg) { + // Re-enable registry-aliases addon in order to generate template manifest files with custom hosts + if err := addons.EnableOrDisableAddon(cfg, "registry-aliases", "true"); err != nil { + out.ErrT(style.Fatal, "Failed to configure registry-aliases {{.profile}}", out.V{"profile": profile}) + } + } default: out.FailureT("{{.name}} has no available configuration options", out.V{"name": addon}) diff --git a/deploy/addons/registry-aliases/registry-aliases-config.tmpl b/deploy/addons/registry-aliases/registry-aliases-config.tmpl index 61dcb76472..e43a218471 100644 --- a/deploy/addons/registry-aliases/registry-aliases-config.tmpl +++ b/deploy/addons/registry-aliases/registry-aliases-config.tmpl @@ -9,11 +9,14 @@ metadata: data: # Add additional hosts separated by new-line registryAliases: >- + {{- if .RegistryAliases}} + {{ .RegistryAliases}} + {{- else}} example.org example.com test.com test.org + {{- end}} registry.minikube # default registry address in minikube when enabled via minikube addons enable registry - registrySvc: registry.kube-system.svc.cluster.local - + registrySvc: registry.kube-system.svc.cluster.local \ No newline at end of file diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index f84060372f..b509151360 100755 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -811,6 +811,7 @@ func GenerateTemplateData(addon *Addon, cfg config.KubernetesConfig, netInfo Net CustomIngressCert string IngressAPIVersion string ContainerRuntime string + RegistryAliases string Images map[string]string Registries map[string]string CustomRegistries map[string]string @@ -823,6 +824,7 @@ func GenerateTemplateData(addon *Addon, cfg config.KubernetesConfig, netInfo Net LoadBalancerStartIP: cfg.LoadBalancerStartIP, LoadBalancerEndIP: cfg.LoadBalancerEndIP, CustomIngressCert: cfg.CustomIngressCert, + RegistryAliases: cfg.RegistryAliases, IngressAPIVersion: "v1", // api version for ingress (eg, "v1beta1"; defaults to "v1" for k8s 1.19+) ContainerRuntime: cfg.ContainerRuntime, Images: images, diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index 6af5c6407f..f66dc7ea3d 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -118,6 +118,7 @@ type KubernetesConfig struct { LoadBalancerStartIP string // currently only used by MetalLB addon LoadBalancerEndIP string // currently only used by MetalLB addon CustomIngressCert string // used by Ingress addon + RegistryAliases string // currently only used by registry-aliases addon ExtraOptions ExtraOptionSlice ShouldLoadCachedImages bool