diff --git a/test/e2e/framework/node/BUILD b/test/e2e/framework/node/BUILD index 68e044e4e28..0641680f091 100644 --- a/test/e2e/framework/node/BUILD +++ b/test/e2e/framework/node/BUILD @@ -27,6 +27,7 @@ go_library( "//test/utils/image:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library", + "//vendor/k8s.io/utils/net:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/test/e2e/framework/node/resource.go b/test/e2e/framework/node/resource.go index 012d033c95e..a5dc8b1bffb 100644 --- a/test/e2e/framework/node/resource.go +++ b/test/e2e/framework/node/resource.go @@ -20,6 +20,7 @@ import ( "context" "encoding/json" "fmt" + netutil "k8s.io/utils/net" "net" "strings" "time" @@ -248,6 +249,26 @@ func GetInternalIP(node *v1.Node) (string, error) { return host, nil } +// GetAddressesByTypeAndFamily returns a list of addresses of the given addressType for the given node +// and filtered by IPFamily +func GetAddressesByTypeAndFamily(node *v1.Node, addressType v1.NodeAddressType, family v1.IPFamily) (ips []string) { + for _, nodeAddress := range node.Status.Addresses { + if nodeAddress.Type != addressType { + continue + } + if nodeAddress.Address == "" { + continue + } + if family == v1.IPv6Protocol && netutil.IsIPv6String(nodeAddress.Address) { + ips = append(ips, nodeAddress.Address) + } + if family == v1.IPv4Protocol && !netutil.IsIPv6String(nodeAddress.Address) { + ips = append(ips, nodeAddress.Address) + } + } + return +} + // GetAddresses returns a list of addresses of the given addressType for the given node func GetAddresses(node *v1.Node, addressType v1.NodeAddressType) (ips []string) { for j := range node.Status.Addresses { diff --git a/test/e2e/network/conntrack.go b/test/e2e/network/conntrack.go index 8ebfa63a890..55bd1a97c23 100644 --- a/test/e2e/network/conntrack.go +++ b/test/e2e/network/conntrack.go @@ -103,16 +103,25 @@ var _ = SIGDescribe("Conntrack", func() { len(nodes.Items)) } - ips := e2enode.CollectAddresses(nodes, v1.NodeInternalIP) + var family v1.IPFamily + if framework.TestContext.ClusterIsIPv6() { + family = v1.IPv6Protocol + } else { + family = v1.IPv4Protocol + } + + ips := e2enode.GetAddressesByTypeAndFamily(&nodes.Items[0], v1.NodeInternalIP, family) clientNodeInfo = nodeInfo{ name: nodes.Items[0].Name, nodeIP: ips[0], } + ips = e2enode.GetAddressesByTypeAndFamily(&nodes.Items[1], v1.NodeInternalIP, family) + serverNodeInfo = nodeInfo{ name: nodes.Items[1].Name, - nodeIP: ips[1], + nodeIP: ips[0], } }) diff --git a/test/e2e/network/kube_proxy.go b/test/e2e/network/kube_proxy.go index 82277d5b125..f25184db3ac 100644 --- a/test/e2e/network/kube_proxy.go +++ b/test/e2e/network/kube_proxy.go @@ -60,24 +60,33 @@ var _ = SIGDescribe("KubeProxy", func() { len(nodes.Items)) } - ips := e2enode.CollectAddresses(nodes, v1.NodeInternalIP) - type NodeInfo struct { node *v1.Node name string nodeIP string } + var family v1.IPFamily + if framework.TestContext.ClusterIsIPv6() { + family = v1.IPv6Protocol + } else { + family = v1.IPv4Protocol + } + + ips := e2enode.GetAddressesByTypeAndFamily(&nodes.Items[0], v1.NodeInternalIP, family) + clientNodeInfo := NodeInfo{ node: &nodes.Items[0], name: nodes.Items[0].Name, nodeIP: ips[0], } + ips = e2enode.GetAddressesByTypeAndFamily(&nodes.Items[1], v1.NodeInternalIP, family) + serverNodeInfo := NodeInfo{ node: &nodes.Items[1], name: nodes.Items[1].Name, - nodeIP: ips[1], + nodeIP: ips[0], } // Create a pod to check the conntrack entries on the host node