kubernetes/kops · error
failed to list lbs: %v
Error message
failed to list lbs: %v
What it means
Fires in listLoadBalancers when GetAllLoadBalancers fails while discovering DigitalOcean load balancers for the cluster tag KubernetesCluster-Master:<name> during resource discovery/teardown — an API, credentials, or network failure listing LBs.
Source
Thrown at pkg/resources/digitalocean/resources.go:228
if err != nil {
return nil, err
}
opt.Page = page + 1
}
return allRecords, nil
}
func listLoadBalancers(cloud fi.Cloud, clusterName string) ([]*resources.Resource, error) {
c := cloud.(do.DOCloud)
var resourceTrackers []*resources.Resource
clusterTag := "KubernetesCluster-Master:" + strings.ReplaceAll(clusterName, ".", "-")
lbs, err := c.GetAllLoadBalancers()
if err != nil {
return nil, fmt.Errorf("failed to list lbs: %v", err)
}
for _, lb := range lbs {
if strings.Contains(lb.Tag, clusterTag) {
resourceTracker := &resources.Resource{
Name: lb.Name,
ID: lb.ID,
Type: resourceTypeLoadBalancer,
Deleter: deleteLoadBalancer,
Obj: lb,
}
var blocks []string
for _, dropletID := range lb.DropletIDs {
blocks = append(blocks, "droplet:"+strconv.Itoa(dropletID))
}
resourceTracker.Blocks = blocksView on GitHub (pinned to 4c8573c808)
Solutions
- Check the DigitalOcean API token and its scopes
- Retry after transient API errors or rate limits
- Verify load balancers exist in the expected region
Example fix
// before token = read-only-scope-token # missing loadbalancer:read // after token = token-with-loadbalancer-read-scope kops delete cluster --cloud digitalocean ...
Defensive patterns
Strategy: retry
Validate before calling
lbs, err := c.GetAllLoadBalancers()
if err != nil {
if rl, ok := err.(*godo.RateLimitError); ok {
time.Sleep(time.Until(rl.Rate.Reset))
lbs, err = c.GetAllLoadBalancers()
}
} Try / catch
lbs, err := c.GetAllLoadBalancers()
if err != nil {
return fmt.Errorf("failed to list lbs: %w", err)
} Prevention
- Token must include load balancer read scope
- Apply rate-limit backoff across all DO API calls in a delete run
- Space out large cluster teardowns to avoid 429s
When it happens
Trigger: GetAllLoadBalancers (godo LoadBalancersService().List, paginated) errors: invalid token lacking read scope on load balancers, network failure, or DO API 5xx/429.
Common situations: API token rotated to one without LB read permissions; DO API outage; rate limiting after many API calls during a large cluster delete.
Related errors
- failed to delete load balancer with name %s %v
- failed to apply resource record set: %s, err: %s
- unhandled LoadBalancer type %q
- failed to delete droplet: %d, err: %s
- failed to delete VPC %s (ID %s): %s
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/6995b8a38cf7b926.
Report an issue: GitHub.