mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-12 13:31:52 +00:00
Merge pull request #119928 from aojea/fixe2e
e2e WaitForServiceEndpointsNum take into account the address family
This commit is contained in:
commit
b57b2dcfcf
@ -436,6 +436,13 @@ func WaitForServiceEndpointsNum(ctx context.Context, c clientset.Interface, name
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Endpoints are single family but EndpointSlices can have dual stack addresses,
|
||||||
|
// so we verify the number of addresses that matches the same family on both.
|
||||||
|
addressType := discoveryv1.AddressTypeIPv4
|
||||||
|
if isIPv6Endpoint(endpoint) {
|
||||||
|
addressType = discoveryv1.AddressTypeIPv6
|
||||||
|
}
|
||||||
|
|
||||||
esList, err := c.DiscoveryV1().EndpointSlices(namespace).List(ctx, metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1.LabelServiceName, serviceName)})
|
esList, err := c.DiscoveryV1().EndpointSlices(namespace).List(ctx, metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1.LabelServiceName, serviceName)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logf("Unexpected error trying to get EndpointSlices for %s : %v", serviceName, err)
|
Logf("Unexpected error trying to get EndpointSlices for %s : %v", serviceName, err)
|
||||||
@ -447,8 +454,8 @@ func WaitForServiceEndpointsNum(ctx context.Context, c clientset.Interface, name
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if countEndpointsSlicesNum(esList) != expectNum {
|
if countEndpointsSlicesNum(esList, addressType) != expectNum {
|
||||||
Logf("Unexpected number of Endpoints on Slices, got %d, expected %d", countEndpointsSlicesNum(esList), expectNum)
|
Logf("Unexpected number of Endpoints on Slices, got %d, expected %d", countEndpointsSlicesNum(esList, addressType), expectNum)
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
return true, nil
|
return true, nil
|
||||||
@ -463,10 +470,28 @@ func countEndpointsNum(e *v1.Endpoints) int {
|
|||||||
return num
|
return num
|
||||||
}
|
}
|
||||||
|
|
||||||
func countEndpointsSlicesNum(epList *discoveryv1.EndpointSliceList) int {
|
// isIPv6Endpoint returns true if the Endpoint uses IPv6 addresses
|
||||||
|
func isIPv6Endpoint(e *v1.Endpoints) bool {
|
||||||
|
for _, sub := range e.Subsets {
|
||||||
|
for _, addr := range sub.Addresses {
|
||||||
|
if len(addr.IP) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Endpoints are single family, so it is enough to check only one address
|
||||||
|
return netutils.IsIPv6String(sub.Addresses[0].IP)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// default to IPv4 an Endpoint without IP addresses
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func countEndpointsSlicesNum(epList *discoveryv1.EndpointSliceList, addressType discoveryv1.AddressType) int {
|
||||||
// EndpointSlices can contain the same address on multiple Slices
|
// EndpointSlices can contain the same address on multiple Slices
|
||||||
addresses := sets.Set[string]{}
|
addresses := sets.Set[string]{}
|
||||||
for _, epSlice := range epList.Items {
|
for _, epSlice := range epList.Items {
|
||||||
|
if epSlice.AddressType != addressType {
|
||||||
|
continue
|
||||||
|
}
|
||||||
for _, ep := range epSlice.Endpoints {
|
for _, ep := range epSlice.Endpoints {
|
||||||
if len(ep.Addresses) > 0 {
|
if len(ep.Addresses) > 0 {
|
||||||
addresses.Insert(ep.Addresses[0])
|
addresses.Insert(ep.Addresses[0])
|
||||||
|
Loading…
Reference in New Issue
Block a user