{"record":{"id":"c46c9b34ee5faf49","repo":"kubernetes/kops","slug":"error-listing-nlbs-v","errorCode":null,"errorMessage":"error listing NLBs: %v","messagePattern":"error listing NLBs: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/awstasks/network_load_balancer.go","lineNumber":128,"sourceCode":"\tdnsName := aws.ToString(alias.DNSName)\n\tmatchDnsName := strings.TrimSuffix(dnsName, \".\")\n\tif matchDnsName == \"\" {\n\t\treturn nil, fmt.Errorf(\"DNSName not set on AliasTarget\")\n\t}\n\n\tmatchHostedZoneId := aws.ToString(alias.HostedZoneId)\n\n\tfound, err := describeNetworkLoadBalancers(ctx, cloud, request, func(lb elbv2types.LoadBalancer) bool {\n\t\tif matchHostedZoneId != aws.ToString(lb.CanonicalHostedZoneId) {\n\t\t\treturn false\n\t\t}\n\n\t\tlbDnsName := aws.ToString(lb.DNSName)\n\t\tlbDnsName = strings.TrimSuffix(lbDnsName, \".\")\n\t\treturn lbDnsName == matchDnsName || \"dualstack.\"+lbDnsName == matchDnsName\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error listing NLBs: %v\", err)\n\t}\n\n\tif len(found) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tif len(found) != 1 {\n\t\treturn nil, fmt.Errorf(\"Found multiple NLBs with DNSName %q\", dnsName)\n\t}\n\n\treturn &found[0], nil\n}\n\nfunc describeNetworkLoadBalancers(ctx context.Context, cloud awsup.AWSCloud, request *elbv2.DescribeLoadBalancersInput, filter func(elbv2types.LoadBalancer) bool) ([]elbv2types.LoadBalancer, error) {\n\tvar found []elbv2types.LoadBalancer\n\tpaginator := elbv2.NewDescribeLoadBalancersPaginator(cloud.ELBV2(), request)\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)","sourceCodeStart":110,"sourceCodeEnd":146,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/awstasks/network_load_balancer.go#L110-L146","documentation":"After filtering NLBs by matching DNS name, findNetworkLoadBalancerByAlias wraps any error from describeNetworkLoadBalancers as \"error listing NLBs: %v\". It indicates the AWS ELBv2 DescribeLoadBalancers API call chain failed, not that no NLB matched.","triggerScenarios":"The paginator inside describeNetworkLoadBalancers returns an error (throttling, credentials, network) during findDNSTargetNLB's alias lookup.","commonSituations":"AWS API rate limiting during large applies; expired/insufficient credentials for elasticloadbalancing:DescribeLoadBalancers; regional API outage.","solutions":["Read the wrapped cause and fix accordingly (credentials vs permissions vs throttling)","Ensure IAM allows elasticloadbalancing:DescribeLoadBalancers","Retry the apply; throttling is typically transient","Verify AWS region/credentials configured for the cluster's account"],"exampleFix":"null","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"err := update()\nif strings.Contains(err.Error(), \"error listing NLBs\") {\n    var retryable bool\n    var ae smithy.APIError\n    if errors.As(err, &ae) { retryable = ae.ErrorCode() == \"ThrottlingException\" }\n    if retryable { backoffAndRetry() } else { inspectCredentialsAndIAM() }\n}","preventionTips":["Grant elasticloadbalancing:DescribeLoadBalancers in IAM","Avoid applying during AWS throttling-prone periods","Rotate credentials before expiry"],"tags":["aws","nlb","api-error","listing"],"backgroundTag":"aws-api-call-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}