mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-20 01:01:22 +00:00
DNS e2e tests differentiate between IP family
The e2e DNS tests differentiate between IP family to avoid false positives with dual stack clusters.
This commit is contained in:
parent
766d79bbf5
commit
930a1321da
@ -49,8 +49,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
namesToResolve := []string{
|
namesToResolve := []string{
|
||||||
fmt.Sprintf("kubernetes.default.svc.%s", framework.TestContext.ClusterDNSDomain),
|
fmt.Sprintf("kubernetes.default.svc.%s", framework.TestContext.ClusterDNSDomain),
|
||||||
}
|
}
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -70,8 +71,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
namesToResolve = append(namesToResolve, "metadata")
|
namesToResolve = append(namesToResolve, "metadata")
|
||||||
}
|
}
|
||||||
|
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -91,8 +93,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
}
|
}
|
||||||
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", dnsTestPodHostName, dnsTestServiceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", dnsTestPodHostName, dnsTestServiceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
||||||
hostEntries := []string{hostFQDN, dnsTestPodHostName}
|
hostEntries := []string{hostFQDN, dnsTestPodHostName}
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, hostEntries, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, hostEntries, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, hostEntries, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, hostEntries, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -110,8 +113,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
framework.ConformanceIt("should provide /etc/hosts entries for the cluster [LinuxOnly]", func() {
|
framework.ConformanceIt("should provide /etc/hosts entries for the cluster [LinuxOnly]", func() {
|
||||||
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", dnsTestPodHostName, dnsTestServiceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", dnsTestPodHostName, dnsTestServiceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
||||||
hostEntries := []string{hostFQDN, dnsTestPodHostName}
|
hostEntries := []string{hostFQDN, dnsTestPodHostName}
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(nil, hostEntries, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(nil, hostEntries, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(nil, hostEntries, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(nil, hostEntries, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -162,8 +166,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
fmt.Sprintf("_http._tcp.%s.%s.svc.%s", regularService.Name, f.Namespace.Name, framework.TestContext.ClusterDNSDomain),
|
fmt.Sprintf("_http._tcp.%s.%s.svc.%s", regularService.Name, f.Namespace.Name, framework.TestContext.ClusterDNSDomain),
|
||||||
}
|
}
|
||||||
|
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -212,8 +217,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
fmt.Sprintf("_http._tcp.%s.%s.svc", regularService.Name, f.Namespace.Name),
|
fmt.Sprintf("_http._tcp.%s.%s.svc", regularService.Name, f.Namespace.Name),
|
||||||
}
|
}
|
||||||
|
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, regularService.Spec.ClusterIP, "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -251,8 +257,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
|
|
||||||
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", podHostname, serviceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", podHostname, serviceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
||||||
hostNames := []string{hostFQDN, podHostname}
|
hostNames := []string{hostFQDN, podHostname}
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(nil, hostNames, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(nil, hostNames, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(nil, hostNames, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(nil, hostNames, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -293,8 +300,9 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", podHostname, serviceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
hostFQDN := fmt.Sprintf("%s.%s.%s.svc.%s", podHostname, serviceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
||||||
subdomain := fmt.Sprintf("%s.%s.svc.%s", serviceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
subdomain := fmt.Sprintf("%s.%s.svc.%s", serviceName, f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
||||||
namesToResolve := []string{hostFQDN, subdomain}
|
namesToResolve := []string{hostFQDN, subdomain}
|
||||||
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
// TODO: Validate both IPv4 and IPv6 families for dual-stack
|
||||||
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain)
|
wheezyProbeCmd, wheezyFileNames := createProbeCommand(namesToResolve, nil, "", "wheezy", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
|
jessieProbeCmd, jessieFileNames := createProbeCommand(namesToResolve, nil, "", "jessie", f.Namespace.Name, framework.TestContext.ClusterDNSDomain, framework.ClusterIsIPv6())
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
@ -365,8 +373,14 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
framework.ExpectNoError(err, "failed to change service type to ClusterIP for service: %s", serviceName)
|
framework.ExpectNoError(err, "failed to change service type to ClusterIP for service: %s", serviceName)
|
||||||
wheezyProbeCmd, wheezyFileName = createTargetedProbeCommand(hostFQDN, "A", "wheezy")
|
targetRecord := "A"
|
||||||
jessieProbeCmd, jessieFileName = createTargetedProbeCommand(hostFQDN, "A", "jessie")
|
if framework.ClusterIsIPv6() {
|
||||||
|
targetRecord = "AAAA"
|
||||||
|
}
|
||||||
|
// TODO: For dual stack we can run from here two createTargetedProbeCommand()
|
||||||
|
// one looking for an A record and another one for an AAAA record
|
||||||
|
wheezyProbeCmd, wheezyFileName = createTargetedProbeCommand(hostFQDN, targetRecord, "wheezy")
|
||||||
|
jessieProbeCmd, jessieFileName = createTargetedProbeCommand(hostFQDN, targetRecord, "jessie")
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
ginkgo.By("Running these commands on jessie: " + jessieProbeCmd + "\n")
|
||||||
|
|
||||||
|
@ -447,14 +447,18 @@ func createDNSPod(namespace, wheezyProbeCmd, jessieProbeCmd, podHostName, servic
|
|||||||
return dnsPod
|
return dnsPod
|
||||||
}
|
}
|
||||||
|
|
||||||
func createProbeCommand(namesToResolve []string, hostEntries []string, ptrLookupIP string, fileNamePrefix, namespace, dnsDomain string) (string, []string) {
|
func createProbeCommand(namesToResolve []string, hostEntries []string, ptrLookupIP string, fileNamePrefix, namespace, dnsDomain string, isIPv6 bool) (string, []string) {
|
||||||
fileNames := make([]string, 0, len(namesToResolve)*2)
|
fileNames := make([]string, 0, len(namesToResolve)*2)
|
||||||
probeCmd := "for i in `seq 1 600`; do "
|
probeCmd := "for i in `seq 1 600`; do "
|
||||||
|
dnsRecord := "A"
|
||||||
|
if isIPv6 {
|
||||||
|
dnsRecord = "AAAA"
|
||||||
|
}
|
||||||
for _, name := range namesToResolve {
|
for _, name := range namesToResolve {
|
||||||
// Resolve by TCP and UDP DNS. Use $$(...) because $(...) is
|
// Resolve by TCP and UDP DNS. Use $$(...) because $(...) is
|
||||||
// expanded by kubernetes (though this won't expand so should
|
// expanded by kubernetes (though this won't expand so should
|
||||||
// remain a literal, safe > sorry).
|
// remain a literal, safe > sorry).
|
||||||
lookup := fmt.Sprintf("%s A %s AAAA", name, name)
|
lookup := fmt.Sprintf("%s %s", name, dnsRecord)
|
||||||
if strings.HasPrefix(name, "_") {
|
if strings.HasPrefix(name, "_") {
|
||||||
lookup = fmt.Sprintf("%s SRV", name)
|
lookup = fmt.Sprintf("%s SRV", name)
|
||||||
}
|
}
|
||||||
@ -475,13 +479,16 @@ func createProbeCommand(namesToResolve []string, hostEntries []string, ptrLookup
|
|||||||
podARecByUDPFileName := fmt.Sprintf("%s_udp@PodARecord", fileNamePrefix)
|
podARecByUDPFileName := fmt.Sprintf("%s_udp@PodARecord", fileNamePrefix)
|
||||||
podARecByTCPFileName := fmt.Sprintf("%s_tcp@PodARecord", fileNamePrefix)
|
podARecByTCPFileName := fmt.Sprintf("%s_tcp@PodARecord", fileNamePrefix)
|
||||||
|
|
||||||
if framework.TestContext.IPFamily == "ipv6" {
|
// getent doesn't work properly on Windows hosts and hostname -i doesn't return an IPv6 address
|
||||||
probeCmd += fmt.Sprintf(`podARec=$$(getent hosts $$(hostname | awk '{print $1}') | tr ":." "-" | awk '{print $$1".%s.pod.%s"}');`, namespace, dnsDomain)
|
// so we have to use a different command per IP family
|
||||||
|
if isIPv6 {
|
||||||
|
probeCmd += fmt.Sprintf(`podARec=$$(getent hosts $$(hostname -s) | tr ":." "-" | awk '{print $$1".%s.pod.%s"}');`, namespace, dnsDomain)
|
||||||
} else {
|
} else {
|
||||||
probeCmd += fmt.Sprintf(`podARec=$$(hostname -i| awk -F. '{print $$1"-"$$2"-"$$3"-"$$4".%s.pod.%s"}');`, namespace, dnsDomain)
|
probeCmd += fmt.Sprintf(`podARec=$$(hostname -i| awk -F. '{print $$1"-"$$2"-"$$3"-"$$4".%s.pod.%s"}');`, namespace, dnsDomain)
|
||||||
}
|
}
|
||||||
probeCmd += fmt.Sprintf(`check="$$(dig +notcp +noall +answer +search $${podARec} A $${podARec} AAAA)" && test -n "$$check" && echo OK > /results/%s;`, podARecByUDPFileName)
|
|
||||||
probeCmd += fmt.Sprintf(`check="$$(dig +tcp +noall +answer +search $${podARec} A $${podARec} AAAA)" && test -n "$$check" && echo OK > /results/%s;`, podARecByTCPFileName)
|
probeCmd += fmt.Sprintf(`check="$$(dig +notcp +noall +answer +search $${podARec} %s)" && test -n "$$check" && echo OK > /results/%s;`, dnsRecord, podARecByUDPFileName)
|
||||||
|
probeCmd += fmt.Sprintf(`check="$$(dig +tcp +noall +answer +search $${podARec} %s)" && test -n "$$check" && echo OK > /results/%s;`, dnsRecord, podARecByTCPFileName)
|
||||||
fileNames = append(fileNames, podARecByUDPFileName)
|
fileNames = append(fileNames, podARecByUDPFileName)
|
||||||
fileNames = append(fileNames, podARecByTCPFileName)
|
fileNames = append(fileNames, podARecByTCPFileName)
|
||||||
|
|
||||||
@ -506,9 +513,6 @@ func createProbeCommand(namesToResolve []string, hostEntries []string, ptrLookup
|
|||||||
func createTargetedProbeCommand(nameToResolve string, lookup string, fileNamePrefix string) (string, string) {
|
func createTargetedProbeCommand(nameToResolve string, lookup string, fileNamePrefix string) (string, string) {
|
||||||
fileName := fmt.Sprintf("%s_udp@%s", fileNamePrefix, nameToResolve)
|
fileName := fmt.Sprintf("%s_udp@%s", fileNamePrefix, nameToResolve)
|
||||||
nameLookup := fmt.Sprintf("%s %s", nameToResolve, lookup)
|
nameLookup := fmt.Sprintf("%s %s", nameToResolve, lookup)
|
||||||
if lookup == "A" {
|
|
||||||
nameLookup = fmt.Sprintf("%s A %s AAAA", nameToResolve, nameToResolve)
|
|
||||||
}
|
|
||||||
probeCmd := fmt.Sprintf("for i in `seq 1 30`; do dig +short %s > /results/%s; sleep 1; done", nameLookup, fileName)
|
probeCmd := fmt.Sprintf("for i in `seq 1 30`; do dig +short %s > /results/%s; sleep 1; done", nameLookup, fileName)
|
||||||
return probeCmd, fileName
|
return probeCmd, fileName
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user