Kind: Uppercased cluster names not properly working in 0.8.X version

Created on 15 May 2020  Âˇ  6Comments  Âˇ  Source: kubernetes-sigs/kind

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: (use kind version): 0.7.0 and 0.8.1
  • Kubernetes version: (use kubectl version): 1.16.9
  • Docker version: (use docker info): 19.03.8
  • OS (e.g. from /etc/os-release): MacOS Catalina
kinsupport

All 6 comments

RFC 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:

thanks
/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.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mithunvikram picture mithunvikram  Âˇ  3Comments

lilic picture lilic  Âˇ  4Comments

fgimenez picture fgimenez  Âˇ  4Comments

patvdleer picture patvdleer  Âˇ  4Comments

tommyknows picture tommyknows  Âˇ  3Comments