kubernetes/kops · error
GetApiIngressStatus: Failed to list openstack loadbalancers:
Error message
GetApiIngressStatus: Failed to list openstack loadbalancers: %v
What it means
Error returned from GetApiIngressStatus when listing OpenStack load balancers (filtered by the API lb name) fails. kOps uses this to report the API server ingress address; without the LB list it cannot determine the cluster endpoint.
Source
Thrown at upup/pkg/fi/cloudup/openstack/cloud.go:780
return getLoadBalancerIngressStatus(c, cluster)
} else {
return getIPIngressStatus(c, cluster)
}
}
func getLoadBalancerIngressStatus(c OpenstackCloud, cluster *kops.Cluster) ([]fi.ApiIngressStatus, error) {
var ingresses []fi.ApiIngressStatus
lbName := "api." + cluster.Name
if cluster.Spec.API.PublicName != "" {
lbName = cluster.Spec.API.PublicName
}
// Note that this must match OpenstackModel lb name
klog.V(2).Infof("Querying Openstack to find Loadbalancers for API (%q)", cluster.Name)
lbList, err := c.ListLBs(loadbalancers.ListOpts{
Name: lbName,
})
if err != nil {
return ingresses, fmt.Errorf("GetApiIngressStatus: Failed to list openstack loadbalancers: %v", err)
}
for _, lb := range lbList {
// Must Find Floating IP related to this lb
fips, err := c.ListL3FloatingIPs(l3floatingip.ListOpts{
PortID: lb.VipPortID,
})
if err != nil {
return ingresses, fmt.Errorf("GetApiIngressStatus: Failed to list floating IP's: %v", err)
}
for _, fip := range fips {
if fip.PortID == lb.VipPortID {
ingresses = append(ingresses, fi.ApiIngressStatus{
IP: fip.FloatingIP,
})
}
}
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Check Octavia health: `openstack loadbalancer list --name <lbName>`
- Re-authenticate and retry; vfs.RetryWithBackoff may already smooth transient faults on other paths
- Verify the load-balancer endpoint in the Keystone service catalog
- If the LB was deleted, re-create the API load balancer or re-run kops update cluster
Defensive patterns
Strategy: retry
Validate before calling
lbPages, err := c.ListLBs(loadbalancers.ListOpts{Name: lbName})
// ensure auth and octavia reachability before relying on ingress lookup
if err != nil { return err } Try / catch
lbList, err := c.ListLBs(loadbalancers.ListOpts{Name: lbName})
if err != nil {
// re-authenticate (recreate provider client) then retry; surface wrapped error if persistent
} Prevention
- Refresh Keystone tokens before long-running validation
- Monitor Octavia service health
- Verify LB name matches the kOps model name (`<cluster>-api`)
When it happens
Trigger: c.ListLBs(loadbalancers.ListOpts{Name: lbName}) returns an error: Octavia API unreachable, auth failure, or malformed ListOpts.
Common situations: Octavia outage during cluster validation; expired token mid-operation; catalog endpoint for load-balancer broken; DNS/network partition between kops and the OpenStack cloud.
Related errors
- failed to build load balancer client: %w
- error building lb client: %w
- loadbalancer API versions not found
- error deleting loadbalancer: %v
- error creating loadbalancer: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/c259e0f1f4657f2c.
Report an issue: GitHub.