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

  1. Check Octavia health: `openstack loadbalancer list --name <lbName>`
  2. Re-authenticate and retry; vfs.RetryWithBackoff may already smooth transient faults on other paths
  3. Verify the load-balancer endpoint in the Keystone service catalog
  4. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/c259e0f1f4657f2c. Report an issue: GitHub.