mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #88249 from claudiubelu/tests/reduce-to-agnhost-dnsutils
tests: Replaces dnsutils image used with agnhost (part 4)
This commit is contained in:
commit
2f145e9422
@ -460,10 +460,20 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
testSearchPath := "resolv.conf.local"
|
testSearchPath := "resolv.conf.local"
|
||||||
testDNSNameFull := fmt.Sprintf("%s.%s", testDNSNameShort, testSearchPath)
|
testDNSNameFull := fmt.Sprintf("%s.%s", testDNSNameShort, testSearchPath)
|
||||||
|
|
||||||
testServerPod := generateDNSServerPod(map[string]string{
|
corednsConfig := generateCoreDNSConfigmap(f.Namespace.Name, map[string]string{
|
||||||
testDNSNameFull: testInjectedIP,
|
testDNSNameFull: testInjectedIP,
|
||||||
})
|
})
|
||||||
testServerPod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(context.TODO(), testServerPod, metav1.CreateOptions{})
|
corednsConfig, err := f.ClientSet.CoreV1().ConfigMaps(f.Namespace.Name).Create(context.TODO(), corednsConfig, metav1.CreateOptions{})
|
||||||
|
framework.ExpectNoError(err, "unable to create test configMap %s", corednsConfig.Name)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
framework.Logf("Deleting configmap %s...", corednsConfig.Name)
|
||||||
|
err := f.ClientSet.CoreV1().ConfigMaps(f.Namespace.Name).Delete(context.TODO(), corednsConfig.Name, nil)
|
||||||
|
framework.ExpectNoError(err, "Failed to delete configmap %s: %v", corednsConfig.Name)
|
||||||
|
}()
|
||||||
|
|
||||||
|
testServerPod := generateCoreDNSServerPod(corednsConfig)
|
||||||
|
testServerPod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(context.TODO(), testServerPod, metav1.CreateOptions{})
|
||||||
framework.ExpectNoError(err, "failed to create pod: %s", testServerPod.Name)
|
framework.ExpectNoError(err, "failed to create pod: %s", testServerPod.Name)
|
||||||
framework.Logf("Created pod %v", testServerPod)
|
framework.Logf("Created pod %v", testServerPod)
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -528,7 +538,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
// This verifies both:
|
// This verifies both:
|
||||||
// - Custom search path is appended.
|
// - Custom search path is appended.
|
||||||
// - DNS query is sent to the specified server.
|
// - DNS query is sent to the specified server.
|
||||||
cmd = []string{"/usr/bin/dig", "+short", "+search", testDNSNameShort}
|
cmd = []string{"dig", "+short", "+search", testDNSNameShort}
|
||||||
digFunc := func() (bool, error) {
|
digFunc := func() (bool, error) {
|
||||||
stdout, stderr, err := f.ExecWithOptions(framework.ExecOptions{
|
stdout, stderr, err := f.ExecWithOptions(framework.ExecOptions{
|
||||||
Command: cmd,
|
Command: cmd,
|
||||||
|
@ -19,6 +19,7 @@ package network
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -40,6 +41,9 @@ import (
|
|||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Windows output can contain additional \r
|
||||||
|
var newLineRegexp = regexp.MustCompile("\r?\n")
|
||||||
|
|
||||||
type dnsTestCommon struct {
|
type dnsTestCommon struct {
|
||||||
f *framework.Framework
|
f *framework.Framework
|
||||||
c clientset.Interface
|
c clientset.Interface
|
||||||
@ -104,7 +108,7 @@ func (t *dnsTestCommon) checkDNSRecordFrom(name string, predicate func([]string)
|
|||||||
|
|
||||||
// runDig queries for `dnsName`. Returns a list of responses.
|
// runDig queries for `dnsName`. Returns a list of responses.
|
||||||
func (t *dnsTestCommon) runDig(dnsName, target string) []string {
|
func (t *dnsTestCommon) runDig(dnsName, target string) []string {
|
||||||
cmd := []string{"/usr/bin/dig", "+short"}
|
cmd := []string{"dig", "+short"}
|
||||||
switch target {
|
switch target {
|
||||||
case "coredns":
|
case "coredns":
|
||||||
cmd = append(cmd, "@"+t.dnsPod.Status.PodIP)
|
cmd = append(cmd, "@"+t.dnsPod.Status.PodIP)
|
||||||
@ -135,7 +139,7 @@ func (t *dnsTestCommon) runDig(dnsName, target string) []string {
|
|||||||
if stdout == "" {
|
if stdout == "" {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
return strings.Split(stdout, "\n")
|
return newLineRegexp.Split(stdout, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) setConfigMap(cm *v1.ConfigMap) {
|
func (t *dnsTestCommon) setConfigMap(cm *v1.ConfigMap) {
|
||||||
@ -208,7 +212,7 @@ func (t *dnsTestCommon) createUtilPodLabel(baseName string) {
|
|||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
Name: "util",
|
Name: "util",
|
||||||
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
|
Image: imageutils.GetE2EImage(imageutils.Agnhost),
|
||||||
Command: []string{"sleep", "10000"},
|
Command: []string{"sleep", "10000"},
|
||||||
Ports: []v1.ContainerPort{
|
Ports: []v1.ContainerPort{
|
||||||
{ContainerPort: servicePort, Protocol: v1.ProtocolTCP},
|
{ContainerPort: servicePort, Protocol: v1.ProtocolTCP},
|
||||||
@ -274,8 +278,8 @@ func (t *dnsTestCommon) deleteCoreDNSPods() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateDNSServerPod(aRecords map[string]string) *v1.Pod {
|
func generateCoreDNSServerPod(corednsConfig *v1.ConfigMap) *v1.Pod {
|
||||||
pod := &v1.Pod{
|
return &v1.Pod{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: "Pod",
|
Kind: "Pod",
|
||||||
},
|
},
|
||||||
@ -283,29 +287,61 @@ func generateDNSServerPod(aRecords map[string]string) *v1.Pod {
|
|||||||
GenerateName: "e2e-dns-configmap-dns-server-",
|
GenerateName: "e2e-dns-configmap-dns-server-",
|
||||||
},
|
},
|
||||||
Spec: v1.PodSpec{
|
Spec: v1.PodSpec{
|
||||||
|
Volumes: []v1.Volume{
|
||||||
|
{
|
||||||
|
Name: "coredns-config",
|
||||||
|
VolumeSource: v1.VolumeSource{
|
||||||
|
ConfigMap: &v1.ConfigMapVolumeSource{
|
||||||
|
LocalObjectReference: v1.LocalObjectReference{
|
||||||
|
Name: corednsConfig.Name,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
Name: "dns",
|
Name: "dns",
|
||||||
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
|
Image: imageutils.GetE2EImage(imageutils.Agnhost),
|
||||||
Command: []string{
|
Command: []string{
|
||||||
"/usr/sbin/dnsmasq",
|
"/coredns",
|
||||||
"-u", "root",
|
"-conf", "/etc/coredns/Corefile",
|
||||||
"-k",
|
},
|
||||||
"--log-facility", "-",
|
VolumeMounts: []v1.VolumeMount{
|
||||||
"-q",
|
{
|
||||||
|
Name: "coredns-config",
|
||||||
|
MountPath: "/etc/coredns",
|
||||||
|
ReadOnly: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
DNSPolicy: "Default",
|
DNSPolicy: "Default",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, ip := range aRecords {
|
|
||||||
pod.Spec.Containers[0].Command = append(
|
|
||||||
pod.Spec.Containers[0].Command,
|
|
||||||
fmt.Sprintf("-A/%v/%v", name, ip))
|
|
||||||
}
|
}
|
||||||
return pod
|
|
||||||
|
func generateCoreDNSConfigmap(namespaceName string, aRecords map[string]string) *v1.ConfigMap {
|
||||||
|
entries := ""
|
||||||
|
for name, ip := range aRecords {
|
||||||
|
entries += fmt.Sprintf("\n\t\t%v %v", ip, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
corefileData := fmt.Sprintf(`. {
|
||||||
|
hosts {%s
|
||||||
|
}
|
||||||
|
log
|
||||||
|
}`, entries)
|
||||||
|
|
||||||
|
return &v1.ConfigMap{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Namespace: namespaceName,
|
||||||
|
GenerateName: "e2e-coredns-configmap-",
|
||||||
|
},
|
||||||
|
Data: map[string]string{
|
||||||
|
"Corefile": corefileData,
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) createDNSPodFromObj(pod *v1.Pod) {
|
func (t *dnsTestCommon) createDNSPodFromObj(pod *v1.Pod) {
|
||||||
@ -322,47 +358,26 @@ func (t *dnsTestCommon) createDNSPodFromObj(pod *v1.Pod) {
|
|||||||
framework.ExpectNoError(err, "failed to get pod: %s", t.dnsServerPod.Name)
|
framework.ExpectNoError(err, "failed to get pod: %s", t.dnsServerPod.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) createDNSServer(aRecords map[string]string) {
|
func (t *dnsTestCommon) createDNSServer(namespace string, aRecords map[string]string) {
|
||||||
t.createDNSPodFromObj(generateDNSServerPod(aRecords))
|
corednsConfig := generateCoreDNSConfigmap(namespace, aRecords)
|
||||||
|
corednsConfig, err := t.c.CoreV1().ConfigMaps(namespace).Create(context.TODO(), corednsConfig, metav1.CreateOptions{})
|
||||||
|
if err != nil {
|
||||||
|
framework.Failf("unable to create test configMap %s: %v", corednsConfig.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) createDNSServerWithPtrRecord(isIPv6 bool) {
|
t.createDNSPodFromObj(generateCoreDNSServerPod(corednsConfig))
|
||||||
pod := &v1.Pod{
|
|
||||||
TypeMeta: metav1.TypeMeta{
|
|
||||||
Kind: "Pod",
|
|
||||||
},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
GenerateName: "e2e-dns-configmap-dns-server-",
|
|
||||||
},
|
|
||||||
Spec: v1.PodSpec{
|
|
||||||
Containers: []v1.Container{
|
|
||||||
{
|
|
||||||
Name: "dns",
|
|
||||||
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
|
|
||||||
Command: []string{
|
|
||||||
"/usr/sbin/dnsmasq",
|
|
||||||
"-u", "root",
|
|
||||||
"-k",
|
|
||||||
"--log-facility", "-",
|
|
||||||
"-q",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
DNSPolicy: "Default",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *dnsTestCommon) createDNSServerWithPtrRecord(namespace string, isIPv6 bool) {
|
||||||
|
// NOTE: PTR records are generated automatically by CoreDNS. So, if we're creating A records, we're
|
||||||
|
// going to also have PTR records. See: https://coredns.io/plugins/hosts/
|
||||||
|
var aRecords map[string]string
|
||||||
if isIPv6 {
|
if isIPv6 {
|
||||||
pod.Spec.Containers[0].Command = append(
|
aRecords = map[string]string{"my.test": "2001:db8::29"}
|
||||||
pod.Spec.Containers[0].Command,
|
|
||||||
fmt.Sprintf("--host-record=my.test,2001:db8::29"))
|
|
||||||
} else {
|
} else {
|
||||||
pod.Spec.Containers[0].Command = append(
|
aRecords = map[string]string{"my.test": "192.0.2.123"}
|
||||||
pod.Spec.Containers[0].Command,
|
|
||||||
fmt.Sprintf("--host-record=my.test,192.0.2.123"))
|
|
||||||
}
|
}
|
||||||
|
t.createDNSServer(namespace, aRecords)
|
||||||
t.createDNSPodFromObj(pod)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) deleteDNSServerPod() {
|
func (t *dnsTestCommon) deleteDNSServerPod() {
|
||||||
@ -413,7 +428,7 @@ func createDNSPod(namespace, wheezyProbeCmd, jessieProbeCmd, podHostName, servic
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "querier",
|
Name: "querier",
|
||||||
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
|
Image: imageutils.GetE2EImage(imageutils.Agnhost),
|
||||||
Command: []string{"sh", "-c", wheezyProbeCmd},
|
Command: []string{"sh", "-c", wheezyProbeCmd},
|
||||||
VolumeMounts: []v1.VolumeMount{
|
VolumeMounts: []v1.VolumeMount{
|
||||||
{
|
{
|
||||||
@ -622,7 +637,7 @@ func generateDNSUtilsPod() *v1.Pod {
|
|||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
Name: "util",
|
Name: "util",
|
||||||
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
|
Image: imageutils.GetE2EImage(imageutils.Agnhost),
|
||||||
Command: []string{"sleep", "10000"},
|
Command: []string{"sleep", "10000"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -221,13 +221,13 @@ func (t *dnsNameserverTest) run(isIPv6 bool) {
|
|||||||
defer t.restoreDNSConfigMap(originalConfigMapData)
|
defer t.restoreDNSConfigMap(originalConfigMapData)
|
||||||
|
|
||||||
if isIPv6 {
|
if isIPv6 {
|
||||||
t.createDNSServer(map[string]string{
|
t.createDNSServer(t.f.Namespace.Name, map[string]string{
|
||||||
"abc.acme.local": "2606:4700:4700::1111",
|
"abc.acme.local": "2606:4700:4700::1111",
|
||||||
"def.acme.local": "2606:4700:4700::2222",
|
"def.acme.local": "2606:4700:4700::2222",
|
||||||
"widget.local": "2606:4700:4700::3333",
|
"widget.local": "2606:4700:4700::3333",
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
t.createDNSServer(map[string]string{
|
t.createDNSServer(t.f.Namespace.Name, map[string]string{
|
||||||
"abc.acme.local": "1.1.1.1",
|
"abc.acme.local": "1.1.1.1",
|
||||||
"def.acme.local": "2.2.2.2",
|
"def.acme.local": "2.2.2.2",
|
||||||
"widget.local": "3.3.3.3",
|
"widget.local": "3.3.3.3",
|
||||||
@ -317,7 +317,7 @@ func (t *dnsPtrFwdTest) run(isIPv6 bool) {
|
|||||||
originalConfigMapData := t.fetchDNSConfigMapData()
|
originalConfigMapData := t.fetchDNSConfigMapData()
|
||||||
defer t.restoreDNSConfigMap(originalConfigMapData)
|
defer t.restoreDNSConfigMap(originalConfigMapData)
|
||||||
|
|
||||||
t.createDNSServerWithPtrRecord(isIPv6)
|
t.createDNSServerWithPtrRecord(t.f.Namespace.Name, isIPv6)
|
||||||
defer t.deleteDNSServerPod()
|
defer t.deleteDNSServerPod()
|
||||||
|
|
||||||
// Should still be able to lookup public nameserver without explicit upstream nameserver set.
|
// Should still be able to lookup public nameserver without explicit upstream nameserver set.
|
||||||
@ -401,11 +401,11 @@ func (t *dnsExternalNameTest) run(isIPv6 bool) {
|
|||||||
|
|
||||||
fooHostname := "foo.example.com"
|
fooHostname := "foo.example.com"
|
||||||
if isIPv6 {
|
if isIPv6 {
|
||||||
t.createDNSServer(map[string]string{
|
t.createDNSServer(t.f.Namespace.Name, map[string]string{
|
||||||
fooHostname: "2001:db8::29",
|
fooHostname: "2001:db8::29",
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
t.createDNSServer(map[string]string{
|
t.createDNSServer(t.f.Namespace.Name, map[string]string{
|
||||||
fooHostname: "192.0.2.123",
|
fooHostname: "192.0.2.123",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ func generateDNSUtilsPod() *v1.Pod {
|
|||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
Name: "util",
|
Name: "util",
|
||||||
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
|
Image: imageutils.GetE2EImage(imageutils.Agnhost),
|
||||||
Command: []string{"sleep", "10000"},
|
Command: []string{"sleep", "10000"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -70,6 +70,7 @@ func initReg() RegistryList {
|
|||||||
DockerLibraryRegistry: "docker.io/library",
|
DockerLibraryRegistry: "docker.io/library",
|
||||||
DockerGluster: "docker.io/gluster",
|
DockerGluster: "docker.io/gluster",
|
||||||
E2eRegistry: "gcr.io/kubernetes-e2e-test-images",
|
E2eRegistry: "gcr.io/kubernetes-e2e-test-images",
|
||||||
|
// TODO: After the domain flip, this should instead be k8s.gcr.io/k8s-artifacts-prod/e2e-test-images
|
||||||
PromoterE2eRegistry: "us.gcr.io/k8s-artifacts-prod/e2e-test-images",
|
PromoterE2eRegistry: "us.gcr.io/k8s-artifacts-prod/e2e-test-images",
|
||||||
InvalidRegistry: "invalid.com/invalid",
|
InvalidRegistry: "invalid.com/invalid",
|
||||||
GcRegistry: "k8s.gcr.io",
|
GcRegistry: "k8s.gcr.io",
|
||||||
@ -139,8 +140,6 @@ const (
|
|||||||
CudaVectorAdd
|
CudaVectorAdd
|
||||||
// CudaVectorAdd2 image
|
// CudaVectorAdd2 image
|
||||||
CudaVectorAdd2
|
CudaVectorAdd2
|
||||||
// Dnsutils image
|
|
||||||
Dnsutils
|
|
||||||
// EchoServer image
|
// EchoServer image
|
||||||
EchoServer
|
EchoServer
|
||||||
// Etcd image
|
// Etcd image
|
||||||
@ -216,7 +215,6 @@ func initImageConfigs() map[int]Config {
|
|||||||
configs[CheckMetadataConcealment] = Config{e2eRegistry, "metadata-concealment", "1.2"}
|
configs[CheckMetadataConcealment] = Config{e2eRegistry, "metadata-concealment", "1.2"}
|
||||||
configs[CudaVectorAdd] = Config{e2eRegistry, "cuda-vector-add", "1.0"}
|
configs[CudaVectorAdd] = Config{e2eRegistry, "cuda-vector-add", "1.0"}
|
||||||
configs[CudaVectorAdd2] = Config{e2eRegistry, "cuda-vector-add", "2.0"}
|
configs[CudaVectorAdd2] = Config{e2eRegistry, "cuda-vector-add", "2.0"}
|
||||||
configs[Dnsutils] = Config{e2eRegistry, "dnsutils", "1.1"}
|
|
||||||
configs[EchoServer] = Config{e2eRegistry, "echoserver", "2.2"}
|
configs[EchoServer] = Config{e2eRegistry, "echoserver", "2.2"}
|
||||||
configs[Etcd] = Config{gcRegistry, "etcd", "3.4.3"}
|
configs[Etcd] = Config{gcRegistry, "etcd", "3.4.3"}
|
||||||
configs[GlusterDynamicProvisioner] = Config{dockerGluster, "glusterdynamic-provisioner", "v1.0"}
|
configs[GlusterDynamicProvisioner] = Config{dockerGluster, "glusterdynamic-provisioner", "v1.0"}
|
||||||
|
Loading…
Reference in New Issue
Block a user