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:
Kubernetes Prow Robot 2020-03-05 09:08:37 -08:00 committed by GitHub
commit 2f145e9422
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 88 additions and 65 deletions

View File

@ -460,10 +460,20 @@ var _ = SIGDescribe("DNS", func() {
testSearchPath := "resolv.conf.local"
testDNSNameFull := fmt.Sprintf("%s.%s", testDNSNameShort, testSearchPath)
testServerPod := generateDNSServerPod(map[string]string{
corednsConfig := generateCoreDNSConfigmap(f.Namespace.Name, map[string]string{
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.Logf("Created pod %v", testServerPod)
defer func() {
@ -528,7 +538,7 @@ var _ = SIGDescribe("DNS", func() {
// This verifies both:
// - Custom search path is appended.
// - 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) {
stdout, stderr, err := f.ExecWithOptions(framework.ExecOptions{
Command: cmd,

View File

@ -19,6 +19,7 @@ package network
import (
"context"
"fmt"
"regexp"
"strings"
"time"
@ -40,6 +41,9 @@ import (
"github.com/onsi/gomega"
)
// Windows output can contain additional \r
var newLineRegexp = regexp.MustCompile("\r?\n")
type dnsTestCommon struct {
f *framework.Framework
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.
func (t *dnsTestCommon) runDig(dnsName, target string) []string {
cmd := []string{"/usr/bin/dig", "+short"}
cmd := []string{"dig", "+short"}
switch target {
case "coredns":
cmd = append(cmd, "@"+t.dnsPod.Status.PodIP)
@ -135,7 +139,7 @@ func (t *dnsTestCommon) runDig(dnsName, target string) []string {
if stdout == "" {
return []string{}
}
return strings.Split(stdout, "\n")
return newLineRegexp.Split(stdout, -1)
}
func (t *dnsTestCommon) setConfigMap(cm *v1.ConfigMap) {
@ -208,7 +212,7 @@ func (t *dnsTestCommon) createUtilPodLabel(baseName string) {
Containers: []v1.Container{
{
Name: "util",
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
Image: imageutils.GetE2EImage(imageutils.Agnhost),
Command: []string{"sleep", "10000"},
Ports: []v1.ContainerPort{
{ContainerPort: servicePort, Protocol: v1.ProtocolTCP},
@ -274,8 +278,8 @@ func (t *dnsTestCommon) deleteCoreDNSPods() {
}
}
func generateDNSServerPod(aRecords map[string]string) *v1.Pod {
pod := &v1.Pod{
func generateCoreDNSServerPod(corednsConfig *v1.ConfigMap) *v1.Pod {
return &v1.Pod{
TypeMeta: metav1.TypeMeta{
Kind: "Pod",
},
@ -283,29 +287,61 @@ func generateDNSServerPod(aRecords map[string]string) *v1.Pod {
GenerateName: "e2e-dns-configmap-dns-server-",
},
Spec: v1.PodSpec{
Volumes: []v1.Volume{
{
Name: "coredns-config",
VolumeSource: v1.VolumeSource{
ConfigMap: &v1.ConfigMapVolumeSource{
LocalObjectReference: v1.LocalObjectReference{
Name: corednsConfig.Name,
},
},
},
},
},
Containers: []v1.Container{
{
Name: "dns",
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
Image: imageutils.GetE2EImage(imageutils.Agnhost),
Command: []string{
"/usr/sbin/dnsmasq",
"-u", "root",
"-k",
"--log-facility", "-",
"-q",
"/coredns",
"-conf", "/etc/coredns/Corefile",
},
VolumeMounts: []v1.VolumeMount{
{
Name: "coredns-config",
MountPath: "/etc/coredns",
ReadOnly: true,
},
},
},
},
DNSPolicy: "Default",
},
}
}
func generateCoreDNSConfigmap(namespaceName string, aRecords map[string]string) *v1.ConfigMap {
entries := ""
for name, ip := range aRecords {
pod.Spec.Containers[0].Command = append(
pod.Spec.Containers[0].Command,
fmt.Sprintf("-A/%v/%v", name, ip))
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,
},
}
return 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)
}
func (t *dnsTestCommon) createDNSServer(aRecords map[string]string) {
t.createDNSPodFromObj(generateDNSServerPod(aRecords))
func (t *dnsTestCommon) createDNSServer(namespace string, aRecords map[string]string) {
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)
}
t.createDNSPodFromObj(generateCoreDNSServerPod(corednsConfig))
}
func (t *dnsTestCommon) createDNSServerWithPtrRecord(isIPv6 bool) {
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 {
pod.Spec.Containers[0].Command = append(
pod.Spec.Containers[0].Command,
fmt.Sprintf("--host-record=my.test,2001:db8::29"))
aRecords = map[string]string{"my.test": "2001:db8::29"}
} else {
pod.Spec.Containers[0].Command = append(
pod.Spec.Containers[0].Command,
fmt.Sprintf("--host-record=my.test,192.0.2.123"))
aRecords = map[string]string{"my.test": "192.0.2.123"}
}
t.createDNSPodFromObj(pod)
t.createDNSServer(namespace, aRecords)
}
func (t *dnsTestCommon) deleteDNSServerPod() {
@ -413,7 +428,7 @@ func createDNSPod(namespace, wheezyProbeCmd, jessieProbeCmd, podHostName, servic
},
{
Name: "querier",
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
Image: imageutils.GetE2EImage(imageutils.Agnhost),
Command: []string{"sh", "-c", wheezyProbeCmd},
VolumeMounts: []v1.VolumeMount{
{
@ -622,7 +637,7 @@ func generateDNSUtilsPod() *v1.Pod {
Containers: []v1.Container{
{
Name: "util",
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
Image: imageutils.GetE2EImage(imageutils.Agnhost),
Command: []string{"sleep", "10000"},
},
},

View File

@ -221,13 +221,13 @@ func (t *dnsNameserverTest) run(isIPv6 bool) {
defer t.restoreDNSConfigMap(originalConfigMapData)
if isIPv6 {
t.createDNSServer(map[string]string{
t.createDNSServer(t.f.Namespace.Name, map[string]string{
"abc.acme.local": "2606:4700:4700::1111",
"def.acme.local": "2606:4700:4700::2222",
"widget.local": "2606:4700:4700::3333",
})
} else {
t.createDNSServer(map[string]string{
t.createDNSServer(t.f.Namespace.Name, map[string]string{
"abc.acme.local": "1.1.1.1",
"def.acme.local": "2.2.2.2",
"widget.local": "3.3.3.3",
@ -317,7 +317,7 @@ func (t *dnsPtrFwdTest) run(isIPv6 bool) {
originalConfigMapData := t.fetchDNSConfigMapData()
defer t.restoreDNSConfigMap(originalConfigMapData)
t.createDNSServerWithPtrRecord(isIPv6)
t.createDNSServerWithPtrRecord(t.f.Namespace.Name, isIPv6)
defer t.deleteDNSServerPod()
// 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"
if isIPv6 {
t.createDNSServer(map[string]string{
t.createDNSServer(t.f.Namespace.Name, map[string]string{
fooHostname: "2001:db8::29",
})
} else {
t.createDNSServer(map[string]string{
t.createDNSServer(t.f.Namespace.Name, map[string]string{
fooHostname: "192.0.2.123",
})
}

View File

@ -102,7 +102,7 @@ func generateDNSUtilsPod() *v1.Pod {
Containers: []v1.Container{
{
Name: "util",
Image: imageutils.GetE2EImage(imageutils.Dnsutils),
Image: imageutils.GetE2EImage(imageutils.Agnhost),
Command: []string{"sleep", "10000"},
},
},

View File

@ -70,6 +70,7 @@ func initReg() RegistryList {
DockerLibraryRegistry: "docker.io/library",
DockerGluster: "docker.io/gluster",
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",
InvalidRegistry: "invalid.com/invalid",
GcRegistry: "k8s.gcr.io",
@ -139,8 +140,6 @@ const (
CudaVectorAdd
// CudaVectorAdd2 image
CudaVectorAdd2
// Dnsutils image
Dnsutils
// EchoServer image
EchoServer
// Etcd image
@ -216,7 +215,6 @@ func initImageConfigs() map[int]Config {
configs[CheckMetadataConcealment] = Config{e2eRegistry, "metadata-concealment", "1.2"}
configs[CudaVectorAdd] = Config{e2eRegistry, "cuda-vector-add", "1.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[Etcd] = Config{gcRegistry, "etcd", "3.4.3"}
configs[GlusterDynamicProvisioner] = Config{dockerGluster, "glusterdynamic-provisioner", "v1.0"}