Skip to content

Commit

Permalink
Merge pull request #612 from gryf/boostrap-lb
Browse files Browse the repository at this point in the history
Bug 1829824: Remove dead member from LB pool.
  • Loading branch information
openshift-merge-robot committed May 7, 2020
2 parents 0c44782 + 0ccf62b commit 4725755
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
7 changes: 7 additions & 0 deletions pkg/platform/openstack/kuryr_bootstrap.go
Expand Up @@ -457,9 +457,11 @@ func BootstrapKuryr(conf *operv1.NetworkSpec, kubeClient client.Client) (*bootst
log.Print("Creating OpenShift API loadbalancer pool members")
r, _ := regexp.Compile(fmt.Sprintf("^%s-(master-port-[0-9]+|bootstrap-port)$", clusterID))
portList, err := listOpenStackPortsMatchingPattern(client, tag, r)
addresses := make([]string, 0)
for _, port := range portList {
if len(port.FixedIPs) > 0 {
portIp := port.FixedIPs[0].IPAddress
addresses = append(addresses, portIp)
log.Printf("Found port %s with IP %s", port.ID, portIp)

// We want bootstrap to stop being used as soon as possible, as it will serve
Expand All @@ -481,6 +483,11 @@ func BootstrapKuryr(conf *operv1.NetworkSpec, kubeClient client.Client) (*bootst
}
}

err = purgeOpenStackLbPoolMember(client, poolId, addresses)
if err != nil {
return nil, errors.Wrap(err, "Failed on purging invalid LB members from LB pool")
}

log.Print("Ensuring certificates")
ca, key, err := ensureCA(kubeClient)
if err != nil {
Expand Down
32 changes: 32 additions & 0 deletions pkg/platform/openstack/loadbalancer.go
Expand Up @@ -411,3 +411,35 @@ func listOpenStackOctaviaProviders(client *gophercloud.ServiceClient) ([]provide
return providersList, nil
}
}

// Iterate on pool members and check their address against provided list
// addresses of current master/bootstrap nodes. Remove all surplus members,
// which address doesn't exists on that list.
func purgeOpenStackLbPoolMember(client *gophercloud.ServiceClient, poolId string, addresses []string) error {
page, err := pools.ListMembers(client, poolId, nil).AllPages()
if err != nil {
return errors.Wrap(err, "failed to get LB member list")
}

members, err := pools.ExtractMembers(page)
if err != nil {
return errors.Wrap(err, "failed to extract LB members list")
}

for _, member := range members {
found := false
for _, address := range addresses {
if address == member.Address {
found = true
break
}
}
if !found {
err = pools.DeleteMember(client, poolId, member.ID).ExtractErr()
if err != nil {
return errors.Wrap(err, "failed to delete LB member")
}
}
}
return nil
}

0 comments on commit 4725755

Please sign in to comment.