diff --git a/test/e2e/util.go b/test/e2e/util.go index fd720868ebd..a4344aff325 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -3267,9 +3267,16 @@ func getNodePortURL(client *client.Client, ns, name string, svcPort int) (string if err != nil { return "", err } - // It should be OK to list unschedulable Node here. - nodes, err := client.Nodes().List(api.ListOptions{}) - if err != nil { + // This list of nodes must not include the master, which is marked + // unschedulable, since the master doesn't run kube-proxy. Without + // kube-proxy NodePorts won't work. + var nodes *api.NodeList + if wait.PollImmediate(poll, singleCallTimeout, func() (bool, error) { + nodes, err = client.Nodes().List(api.ListOptions{FieldSelector: fields.Set{ + "spec.unschedulable": "false", + }.AsSelector()}) + return err == nil, nil + }) != nil { return "", err } if len(nodes.Items) == 0 {