kubernetes/kops · error
load balancer %q has no LoadBalancerName
Error message
load balancer %q has no LoadBalancerName
What it means
During ASG creation, each referenced LoadBalancer task must carry a concrete LoadBalancerName (set only after the ELB task has been found/created). A nil name means the load balancer task was never resolved, so the ASG cannot attach to it.
Source
Thrown at upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go:377
AutoScalingGroupName: e.Name,
MinSize: e.MinSize,
MaxSize: e.MaxSize,
NewInstancesProtectedFromScaleIn: e.InstanceProtection,
Tags: v.AutoscalingGroupTags(),
VPCZoneIdentifier: new(strings.Join(e.AutoscalingGroupSubnets(), ",")),
CapacityRebalance: e.CapacityRebalance,
}
//On ASG creation 0 value is forbidden
if fi.ValueOf(e.MaxInstanceLifetime) == 0 {
request.MaxInstanceLifetime = nil
} else {
request.MaxInstanceLifetime = e.MaxInstanceLifetime
}
for _, k := range e.LoadBalancers {
if k.LoadBalancerName == nil {
return fmt.Errorf("load balancer %q has no LoadBalancerName", fi.ValueOf(k.GetName()))
}
request.LoadBalancerNames = append(request.LoadBalancerNames, aws.ToString(k.LoadBalancerName))
}
for _, tg := range e.TargetGroups {
request.TargetGroupARNs = append(request.TargetGroupARNs, aws.ToString(tg.ARN))
}
// @check are we using mixed instances policy, or launch template
if e.UseMixedInstancesPolicy() {
request.MixedInstancesPolicy = &autoscalingtypes.MixedInstancesPolicy{
InstancesDistribution: &autoscalingtypes.InstancesDistribution{
OnDemandAllocationStrategy: e.MixedOnDemandAllocationStrategy,
OnDemandPercentageAboveBaseCapacity: e.MixedOnDemandAboveBase,
OnDemandBaseCapacity: e.MixedOnDemandBase,
SpotAllocationStrategy: e.MixedSpotAllocationStrategy,
SpotInstancePools: e.MixedSpotInstancePools,
SpotMaxPrice: e.MixedSpotMaxPrice,View on GitHub (pinned to 4c8573c808)
Solutions
- Ensure the loadBalancer(s) are defined as full LoadBalancer tasks in the cluster/instance-group spec so kOps resolves their names
- Run `kops update cluster` (full apply, not a partial/targeted run) so the LB task renders before the ASG
- If migrating between classic ELB and target-group attachments, update the spec consistently
- Check for kops version mismatches between state store and CLI
Example fix
null
Defensive patterns
Strategy: validation
Validate before calling
// ensure every loadBalancer referenced in instance group spec resolves to a named LB task
for _, ig := range instanceGroups {
for _, lb := range ig.Spec.LoadBalancers {
if lb.LoadBalancerName == nil && lb.TargetGroupARN == nil {
return fmt.Errorf("instance group %s references unresolved load balancer", ig.Name)
}
}
} Type guard
func lbHasName(k awstasks.LoadBalancer) bool { return k.LoadBalancerName != nil } Try / catch
null
Prevention
- Always run full `kops update cluster` so LB tasks render before ASG tasks
- Keep loadBalancer references in the cluster spec, not ad-hoc overrides
- Avoid mixing classic ELB attachments with target-group attachments during migrations
When it happens
Trigger: RenderAWS builds CreateAutoScalingGroupInput with e.LoadBalancers where some element has LoadBalancerName == nil — e.g. the LB ref points to a task that was never rendered/created in this run, or spec wires a loadBalancer whose name kOps could not determine.
Common situations: Cluster spec references an external/incompletely-defined load balancer, or an older cluster spec where classic ELB attachment tasks were renamed/removed during upgrades.
Related errors
- DIGITALOCEAN_ACCESS_TOKEN is required
- the image for the hook exec action not set
- IP version is incorrect
- ErrAlreadyExists
- DIGITALOCEAN_ACCESS_TOKEN is required
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/599d595f670c34df.
Report an issue: GitHub.