kubernetes/kops · error

GetApiIngressStatus: Failed to list floating IP's: %v

Error message

GetApiIngressStatus: Failed to list floating IP's: %v

What it means

Error returned from GetApiIngressStatus when listing L3 floating IPs bound to the load balancer's VIP port fails. kOps matches a floating IP whose PortID equals lb.VipPortID to report the API ingress IP.

Source

Thrown at upup/pkg/fi/cloudup/openstack/cloud.go:788

	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,
				})
			}
		}
	}

	return ingresses, nil
}

func getIPIngressStatus(c OpenstackCloud, cluster *kops.Cluster) (ingresses []fi.ApiIngressStatus, err error) {
	done, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {
		instances, err := c.ListInstances(servers.ListOpts{})
		if err != nil {
			return false, fmt.Errorf("GetApiIngressStatus: Failed to list control plane nodes: %v", err)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check floating IP association: `openstack floating ip list --port <vipPortID>`
  2. Verify Neutron API health and reachability
  3. If no FIP is associated, create one: `openstack floating ip create --port <vipPortID> <network>`
  4. Retry the operation once Neutron responds
Defensive patterns

Strategy: retry

Validate before calling

fips, err := c.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: lb.VipPortID})
if err != nil { return err }
if len(fips) == 0 { /* associate a floating IP before expecting an ingress address */ }

Try / catch

fips, err := c.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: lb.VipPortID})
if err != nil {
    // recreate neutron client on auth errors, then retry; log wrapped cause if persistent
}

Prevention

When it happens

Trigger: c.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: lb.VipPortID}) errors: Neutron floating-IP API unreachable, auth failure, or the l3 extension unavailable.

Common situations: Neutron outage or quota-service issues; Octavia LB exists but no floating IP was ever associated (empty result is fine, but API errors abort); network policy blocking the neutron client from the l3-floatingip endpoint.

Related errors


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