dualstack: use correct IPFamily list for conntrack checks in e2e

We hardcode the index number in the KubeProxy/Conntrack e2es and
CollectAddresses returns 4 mixed IP Family addresses in a dualstack
cluster. This change ensures that the serverNodeInfo.nodeIP has only
valid addresses for the expected IPFamily per test case.

Signed-off-by: Christopher M. Luciano <cmluciano@us.ibm.com>
This commit is contained in:
Christopher M. Luciano 2020-11-02 14:55:24 -05:00
parent 17dcccbe07
commit fa7a802d55
No known key found for this signature in database
GPG Key ID: 5148DBB31F2843F1
4 changed files with 45 additions and 5 deletions

View File

@ -27,6 +27,7 @@ go_library(
"//test/utils/image:go_default_library", "//test/utils/image:go_default_library",
"//vendor/github.com/onsi/ginkgo:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library",
"//vendor/github.com/onsi/gomega: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", "//vendor/k8s.io/utils/pointer:go_default_library",
], ],
) )

View File

@ -20,6 +20,7 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
netutil "k8s.io/utils/net"
"net" "net"
"strings" "strings"
"time" "time"
@ -248,6 +249,26 @@ func GetInternalIP(node *v1.Node) (string, error) {
return host, nil 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 // GetAddresses returns a list of addresses of the given addressType for the given node
func GetAddresses(node *v1.Node, addressType v1.NodeAddressType) (ips []string) { func GetAddresses(node *v1.Node, addressType v1.NodeAddressType) (ips []string) {
for j := range node.Status.Addresses { for j := range node.Status.Addresses {

View File

@ -103,16 +103,25 @@ var _ = SIGDescribe("Conntrack", func() {
len(nodes.Items)) 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{ clientNodeInfo = nodeInfo{
name: nodes.Items[0].Name, name: nodes.Items[0].Name,
nodeIP: ips[0], nodeIP: ips[0],
} }
ips = e2enode.GetAddressesByTypeAndFamily(&nodes.Items[1], v1.NodeInternalIP, family)
serverNodeInfo = nodeInfo{ serverNodeInfo = nodeInfo{
name: nodes.Items[1].Name, name: nodes.Items[1].Name,
nodeIP: ips[1], nodeIP: ips[0],
} }
}) })

View File

@ -60,24 +60,33 @@ var _ = SIGDescribe("KubeProxy", func() {
len(nodes.Items)) len(nodes.Items))
} }
ips := e2enode.CollectAddresses(nodes, v1.NodeInternalIP)
type NodeInfo struct { type NodeInfo struct {
node *v1.Node node *v1.Node
name string name string
nodeIP 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{ clientNodeInfo := NodeInfo{
node: &nodes.Items[0], node: &nodes.Items[0],
name: nodes.Items[0].Name, name: nodes.Items[0].Name,
nodeIP: ips[0], nodeIP: ips[0],
} }
ips = e2enode.GetAddressesByTypeAndFamily(&nodes.Items[1], v1.NodeInternalIP, family)
serverNodeInfo := NodeInfo{ serverNodeInfo := NodeInfo{
node: &nodes.Items[1], node: &nodes.Items[1],
name: nodes.Items[1].Name, name: nodes.Items[1].Name,
nodeIP: ips[1], nodeIP: ips[0],
} }
// Create a pod to check the conntrack entries on the host node // Create a pod to check the conntrack entries on the host node