Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error when creating a cluster with _ in it's name #2195

Closed
finalspy opened this issue Apr 13, 2021 · 1 comment · Fixed by #2226
Closed

Error when creating a cluster with _ in it's name #2195

finalspy opened this issue Apr 13, 2021 · 1 comment · Fixed by #2226
Labels
kind/bug Categorizes issue or PR as related to a bug.

Comments

@finalspy
Copy link

What happened:

 ✗ Starting control-plane 🕹️ 
ERROR: failed to create cluster: failed to init node with kubeadm: command "docker exec --privileged name_with_underscore-control-plane kubeadm init --skip-phases=preflight --config=/kind/kubeadm.conf --skip-token-print --v=6" failed with error: exit status 1
Command Output: I0413 10:45:15.583742     171 initconfiguration.go:200] loading configuration from "/kind/kubeadm.conf"
[config] WARNING: Ignored YAML document with GroupVersionKind kubeadm.k8s.io/v1beta2, Kind=JoinConfiguration
hostport name_with_underscore-control-plane:6443: host 'name_with_underscore-control-plane' must be a valid IP address or a valid RFC-1123 DNS subdomain
k8s.io/kubernetes/cmd/kubeadm/app/util.ParseHostPort
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/endpoint.go:111
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetClusterDynamicDefaults
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:157
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetInitDynamicDefaults
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:56
k8s.io/kubernetes/cmd/kubeadm/app/util/config.documentMapToInitConfiguration
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:305
k8s.io/kubernetes/cmd/kubeadm/app/util/config.BytesToInitConfiguration
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:235
k8s.io/kubernetes/cmd/kubeadm/app/util/config.LoadInitConfigurationFromFile
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:207
k8s.io/kubernetes/cmd/kubeadm/app/util/config.LoadOrDefaultInitConfiguration
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:219
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newInitData
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:333
k8s.io/kubernetes/cmd/kubeadm/app/cmd.NewCmdInit.func3
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:193
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).InitData
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow/runner.go:183
k8s.io/kubernetes/cmd/kubeadm/app/cmd.NewCmdInit.func1
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:141
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).execute
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:842
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).ExecuteC
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:950
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).Execute
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:887
k8s.io/kubernetes/cmd/kubeadm/app.Run
	/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/kubeadm.go:50
main.main
	_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/kubeadm.go:25
runtime.main
	/usr/local/go/src/runtime/proc.go:204
runtime.goexit
	/usr/local/go/src/runtime/asm_amd64.s:1374

What you expected to happen:

Creation successful

How to reproduce it (as minimally and precisely as possible):

kind create cluster name_with_underscore

Anything else we need to know?:

This "phenomenom" was also spotted in the following issues afaik :

May be the regular expression ^[a-z0-9_.-]+$ L32 of kind/pkg/internal/apis/config/validate.go :

var validNameRE = regexp.MustCompile(`^[a-z0-9_.-]+$`)
should be replaces by
^[a-z0-9.-]+$ (note that I don't know if this is used to validate something else... so maybe this correction isn't accurate).

Environment:

  • kind v0.9.0 go1.15.2 linux/amd64
  • Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/amd64"}
  • Docker Server Version: 19.03.6, Kernel Version: 5.3.0-24-generic, Operating System: Ubuntu 19.10
  • Ubuntu 19.10 (Eoan Ermine)
@finalspy finalspy added the kind/bug Categorizes issue or PR as related to a bug. label Apr 13, 2021
finalspy added a commit to finalspy/kind that referenced this issue Apr 13, 2021
@neolit123
Copy link
Member

neolit123 commented Apr 13, 2021

k8s.io/kubernetes/cmd/kubeadm/app/util.ParseHostPort
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/endpoint.go:111
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetClusterDynamicDefaults
must be a valid IP address or a valid RFC-1123 DNS subdomain

as you can see the error comes from kubeadm when setting the controlPlaneEndpoint field in the ClusterConfiguration object.
this field must be an IP or a DNS name.

kubeadm uses a k8s utility function that misleadingly claims that it follows RFC-1123.
yet that RFC does allow underscores. this is more of a limitation for hostnames.

in any case, hostnames with underscores or capital letters should not reach the kubelet - i.e. the kind node containers ideally should not have _

so i think your regexp fix is valid.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Categorizes issue or PR as related to a bug.
Projects
None yet
2 participants