kubernetes/kops · error

Could not find port floatingips port=%s

Error message

Could not find port floatingips port=%s

What it means

FindAddresses in floatingip.go:103 fails when, after listing L3 floating IPs filtered by the load balancer's port ID, either no FIP matched or the single returned FIP's PortID did not equal the LB port — so the expected floating address for the LB port cannot be resolved. It is thrown whenever e.ID is nil and the lookup must go through e.LB.PortID.

Source

Thrown at upup/pkg/fi/cloudup/openstacktasks/floatingip.go:103

	if e.ID == nil {
		if e.LB != nil && e.LB.ID == nil {
			return nil, nil
		}
	}

	cloud := context.T.Cloud.(openstack.OpenstackCloud)
	// try to find ip address using LB port
	if e.ID == nil && e.LB != nil && e.LB.PortID != nil {
		fips, err := findL3Floating(cloud, l3floatingip.ListOpts{
			PortID: fi.ValueOf(e.LB.PortID),
		})
		if err != nil {
			return nil, err
		}
		if len(fips) == 1 && fips[0].PortID == fi.ValueOf(e.LB.PortID) {
			return []string{fips[0].FloatingIP}, nil
		}
		return nil, fmt.Errorf("Could not find port floatingips port=%s", fi.ValueOf(e.LB.PortID))
	}

	fip, err := cloud.GetL3FloatingIP(fi.ValueOf(e.ID))
	if err != nil {
		return nil, err
	}
	return []string{fip.FloatingIP}, nil
}

// GetDependencies returns the dependencies of the Instance task
func (e *FloatingIP) GetDependencies(tasks map[string]fi.CloudupTask) []fi.CloudupTask {
	var deps []fi.CloudupTask
	for _, task := range tasks {
		if _, ok := task.(*LB); ok {
			deps = append(deps, task)
		}
		// We can't create a floating IP until the router with access to the external network
		//  Has created an interface to our subnet

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Rerun the operation after the FIP creation task has run — this is often transient eventual consistency.
  2. Verify with `openstack floating ip list --port <lb-port-id>` that a FIP is actually associated to that port.
  3. If the FIP was disassociated manually, reassociate it to the LB port or delete the cluster state so kops recreates it.
  4. Ensure the external network / router configuration allows FIP association for the LB port's subnet.
Defensive patterns

Strategy: validation

Validate before calling

// verify a single FIP is bound to the LB port before resolving addresses
fips, err := cloud.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: portID})
if err != nil {
    return err
}
if len(fips) != 1 || fips[0].PortID != portID {
    return fmt.Errorf("no FIP bound to port %s; run kops update cluster first", portID)
}

Type guard

func hasBoundFIP(fips []l3floatingip.FloatingIP, portID string) bool {
    return len(fips) == 1 && fips[0].PortID == portID
}

Try / catch

addrs, err := e.FindAddresses(ctx)
if err != nil && strings.Contains(err.Error(), "Could not find port floatingips") {
    // FIP not yet associated: treat as not-ready and retry later
    return nil, nil
}

Prevention

When it happens

Trigger: The LB task has a PortID but no floating IP has been associated with that port yet, the FIP exists but is associated with a different port, or findL3Floating timed out returning zero results.

Common situations: Running `kops update cluster` before the FIP creation task completed; an operator manually disassociated or reassigned the floating IP; Neutron eventual consistency delaying FIP-to-port binding so the readback finds none.

Related errors


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