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",
"//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",
],
)

View File

@ -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 {

View File

@ -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],
}
})

View File

@ -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