diff --git a/test/e2e/tcpudp/tcp.go b/test/e2e/tcpudp/tcp.go index cab3e2c00..fac5ee01d 100644 --- a/test/e2e/tcpudp/tcp.go +++ b/test/e2e/tcpudp/tcp.go @@ -22,12 +22,14 @@ import ( "net" "net/http" "strings" + "time" "github.com/onsi/ginkgo" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/ingress-nginx/test/e2e/framework" ) @@ -170,7 +172,30 @@ var _ = framework.IngressNginxDescribe("[TCP] tcp-services", func() { return d.DialContext(ctx, "tcp", fmt.Sprintf("%v:5353", ip)) }, } - ips, err := resolver.LookupHost(context.Background(), "google-public-dns-b.google.com") + + // add retries to LookupHost to avoid random e2e errors + retry := wait.Backoff{ + Steps: 10, + Duration: 2 * time.Second, + Factor: 0.8, + Jitter: 0.2, + } + + var ips []string + var retryErr error + err = wait.ExponentialBackoff(retry, func() (bool, error) { + ips, retryErr = resolver.LookupHost(context.Background(), "google-public-dns-b.google.com") + if retryErr == nil { + return true, nil + } + + return false, nil + }) + + if err == wait.ErrWaitTimeout { + err = retryErr + } + assert.Nil(ginkgo.GinkgoT(), err, "unexpected error from DNS resolver") assert.Contains(ginkgo.GinkgoT(), ips, "8.8.4.4") })