What happened:
Seems like any cluster created with kind 0.8.X having a capital letter in the cluster-name breaks the cluster creation process.
It works in 0.7.0
What you expected to happen:
I expect to get a validation error message if the capital letter is not allowed or a created cluster with the proposed name
How to reproduce it (as minimally and precisely as possible):
Just run kind create cluster --name Bug with both versions: 0.7.0 and 0.8.1.
Anything else we need to know?:
$ kind create cluster --name Bug
Creating cluster "Bug" ...
â Ensuring node image (kindest/node:v1.18.2) đŧ
â Preparing nodes đĻ
â Writing configuration đ
â Starting control-plane đšī¸
ERROR: failed to create cluster: failed to init node with kubeadm: command "docker exec --privileged Bug-control-plane kubeadm init --ignore-preflight-errors=all --config=/kind/kubeadm.conf --skip-token-print --v=6" failed with error: exit status 1
Command Output: I0515 14:29:03.437459 145 initconfiguration.go:200] loading configuration from "/kind/kubeadm.conf"
[config] WARNING: Ignored YAML document with GroupVersionKind kubeadm.k8s.io/v1beta2, Kind=JoinConfiguration
I0515 14:29:03.499819 145 interface.go:400] Looking for default routes with IPv4 addresses
I0515 14:29:03.500189 145 interface.go:405] Default route transits interface "eth0"
I0515 14:29:03.500872 145 interface.go:208] Interface eth0 is up
I0515 14:29:03.500977 145 interface.go:256] Interface "eth0" has 3 addresses :[172.20.0.2/16 fc00:f853:ccd:e793::2/64 fe80::42:acff:fe14:2/64].
I0515 14:29:03.501209 145 interface.go:223] Checking addr 172.20.0.2/16.
I0515 14:29:03.501232 145 interface.go:230] IP found 172.20.0.2
I0515 14:29:03.501278 145 interface.go:262] Found valid IPv4 address 172.20.0.2 for interface "eth0".
I0515 14:29:03.501301 145 interface.go:411] Found active IP 172.20.0.2
hostport Bug-control-plane:6443: host 'Bug-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:112
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:330
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:191
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:139
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:826
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:914
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:864
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:203
runtime.goexit
/usr/local/go/src/runtime/asm_amd64.s:1357
Environment:
kind version): 0.7.0 and 0.8.1kubectl version): 1.16.9docker info): 19.03.8/etc/os-release): MacOS CatalinaRFC 952/1123 is not followed correctly here, but given this ticket was closed, the support for capital letters is unlikely to be added. kubeadm follows the same rules as k8s in that regard, and i'd prefer if it does not diverge even if IsDNS1123Subdomain can be considered flawed.
in fact, i believe we get at least a few similar tickets every year.
you could:
/sig api-machinerythanks
/remove-kind bug
/triage support
this is a bug because we don't validate it though, i'm looking into what else we want to reject due to upstream flaws ...
/assign
er, that is our current validation explicitly allows capitals, because we looked at docker and the RFC, not k8s hostnames ... but we do need hostnames for sure now, allowing this was definitely an oversight.
it is certainly too bad about the upstream bug. i'm fairly sympathetic to dissallowing capitals in most places, but for _acutal hostnames_ it's too bad kubernetes doesn't follow the spec :/
I see 2 options here:
1) we do accept capitals but we transform everything to lowercase because there is no distinction per my understanding of rfc932
2) we reject capitals explicitly per kubernetes policy
both looks simple to implement though
1) is not an option, it allows non-distinct cluster keys
2) I already have implemented, but I'm trying to make sure we're a bit more precise about what is and isn't allowed rather than just papering over capitals.
upper case names will be rejected during validation in the next release https://github.com/kubernetes-sigs/kind/pull/1610
I think we more generally need to adjust the validation, I'm going to follow up with a refactor.