From dea98cbdd0576f54c5b481285a6974f5aa24b7f5 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Fri, 31 Mar 2017 11:50:54 +0200 Subject: [PATCH] Don't run preserve pod IP test in userspace mode --- test/e2e/framework/util.go | 29 +++++++++++++++++++++++++++++ test/e2e/service.go | 10 ++++++++++ 2 files changed, 39 insertions(+) diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index bc8ae58a118..24f047ce170 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -346,6 +346,35 @@ func NodeOSDistroIs(supportedNodeOsDistros ...string) bool { return false } +func ProxyMode(f *Framework) (string, error) { + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "kube-proxy-mode-detector", + Namespace: f.Namespace.Name, + }, + Spec: v1.PodSpec{ + HostNetwork: true, + Containers: []v1.Container{ + { + Name: "detector", + Image: "gcr.io/google_containers/e2e-net-amd64:1.0", + Command: []string{"/bin/sleep", "3600"}, + }, + }, + }, + } + f.PodClient().CreateSync(pod) + defer f.PodClient().DeleteSync(pod.Name, &metav1.DeleteOptions{}, time.Minute) + + cmd := "curl -q -s --connect-timeout 1 http://localhost:10249/proxyMode" + stdout, err := RunHostCmd(pod.Namespace, pod.Name, cmd) + if err != nil { + return "", err + } + Logf("ProxyMode: %s", stdout) + return stdout, nil +} + func SkipUnlessServerVersionGTE(v *utilversion.Version, c discovery.ServerVersionInterface) { gte, err := ServerVersionGTE(v, c) if err != nil { diff --git a/test/e2e/service.go b/test/e2e/service.go index ab80ffc6b88..c0cefb945e5 100644 --- a/test/e2e/service.go +++ b/test/e2e/service.go @@ -216,6 +216,16 @@ var _ = framework.KubeDescribe("Services", func() { It("should preserve source pod IP for traffic thru service cluster IP", func() { + // This behavior is not supported if Kube-proxy is in "userspace" mode. + // So we check the kube-proxy mode and skip this test if that's the case. + if proxyMode, err := framework.ProxyMode(f); err == nil { + if proxyMode == "userspace" { + framework.Skipf("The test doesn't work with kube-proxy in userspace mode") + } + } else { + framework.Logf("Couldn't detect KubeProxy mode - test failure may be expected: %v", err) + } + serviceName := "sourceip-test" ns := f.Namespace.Name