mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Fix hostname truncate.
This commit is contained in:
parent
d51e27fe96
commit
e9f1b0f972
@ -228,13 +228,29 @@ func makePortMappings(container *api.Container) (ports []kubecontainer.PortMappi
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// truncatePodHostnameIfNeeded truncates the pod hostname if it's longer than 63 chars.
|
||||||
|
func truncatePodHostnameIfNeeded(podName, hostname string) (string, error) {
|
||||||
|
// Cap hostname at 63 chars (specification is 64bytes which is 63 chars and the null terminating char).
|
||||||
|
const hostnameMaxLen = 63
|
||||||
|
if len(hostname) <= hostnameMaxLen {
|
||||||
|
return hostname, nil
|
||||||
|
}
|
||||||
|
truncated := hostname[:hostnameMaxLen]
|
||||||
|
glog.Errorf("hostname for pod:%q was longer than %d. Truncated hostname to :%q", podName, hostnameMaxLen, truncated)
|
||||||
|
// hostname should not end with '-' or '.'
|
||||||
|
truncated = strings.TrimRight(truncated, "-.")
|
||||||
|
if len(truncated) == 0 {
|
||||||
|
// This should never happen.
|
||||||
|
return "", fmt.Errorf("hostname for pod %q was invalid: %q", podName, hostname)
|
||||||
|
}
|
||||||
|
return truncated, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GeneratePodHostNameAndDomain creates a hostname and domain name for a pod,
|
// GeneratePodHostNameAndDomain creates a hostname and domain name for a pod,
|
||||||
// given that pod's spec and annotations or returns an error.
|
// given that pod's spec and annotations or returns an error.
|
||||||
func (kl *Kubelet) GeneratePodHostNameAndDomain(pod *api.Pod) (string, string, error) {
|
func (kl *Kubelet) GeneratePodHostNameAndDomain(pod *api.Pod) (string, string, error) {
|
||||||
// TODO(vmarmol): Handle better.
|
// TODO(vmarmol): Handle better.
|
||||||
// Cap hostname at 63 chars (specification is 64bytes which is 63 chars and the null terminating char).
|
|
||||||
clusterDomain := kl.clusterDomain
|
clusterDomain := kl.clusterDomain
|
||||||
const hostnameMaxLen = 63
|
|
||||||
podAnnotations := pod.Annotations
|
podAnnotations := pod.Annotations
|
||||||
if podAnnotations == nil {
|
if podAnnotations == nil {
|
||||||
podAnnotations = make(map[string]string)
|
podAnnotations = make(map[string]string)
|
||||||
@ -252,9 +268,9 @@ func (kl *Kubelet) GeneratePodHostNameAndDomain(pod *api.Pod) (string, string, e
|
|||||||
hostname = hostnameCandidate
|
hostname = hostnameCandidate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(hostname) > hostnameMaxLen {
|
hostname, err := truncatePodHostnameIfNeeded(pod.Name, hostname)
|
||||||
hostname = hostname[:hostnameMaxLen]
|
if err != nil {
|
||||||
glog.Errorf("hostname for pod:%q was longer than %d. Truncated hostname to :%q", pod.Name, hostnameMaxLen, hostname)
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
hostDomain := ""
|
hostDomain := ""
|
||||||
|
@ -1494,3 +1494,32 @@ func TestHasHostNamespace(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTruncatePodHostname(t *testing.T) {
|
||||||
|
for c, test := range map[string]struct {
|
||||||
|
input string
|
||||||
|
output string
|
||||||
|
}{
|
||||||
|
"valid hostname": {
|
||||||
|
input: "test.pod.hostname",
|
||||||
|
output: "test.pod.hostname",
|
||||||
|
},
|
||||||
|
"too long hostname": {
|
||||||
|
input: "1234567.1234567.1234567.1234567.1234567.1234567.1234567.1234567.1234567.", // 8*9=72 chars
|
||||||
|
output: "1234567.1234567.1234567.1234567.1234567.1234567.1234567.1234567", //8*8-1=63 chars
|
||||||
|
},
|
||||||
|
"hostname end with .": {
|
||||||
|
input: "1234567.1234567.1234567.1234567.1234567.1234567.1234567.123456.1234567.", // 8*9-1=71 chars
|
||||||
|
output: "1234567.1234567.1234567.1234567.1234567.1234567.1234567.123456", //8*8-2=62 chars
|
||||||
|
},
|
||||||
|
"hostname end with -": {
|
||||||
|
input: "1234567.1234567.1234567.1234567.1234567.1234567.1234567.123456-1234567.", // 8*9-1=71 chars
|
||||||
|
output: "1234567.1234567.1234567.1234567.1234567.1234567.1234567.123456", //8*8-2=62 chars
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
t.Logf("TestCase: %q", c)
|
||||||
|
output, err := truncatePodHostnameIfNeeded("test-pod", test.input)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, test.output, output)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user