kubernetes/kops · error
create Route request failed: %v
Error message
create Route request failed: %v
What it means
After EC2 CreateRoute returns without an error, kOps checks the response's Return flag; when it is false the call technically succeeded at the transport level but AWS reports the route was not created, so this error is thrown. This is a defensive check against silent API-level failure where no Go error is returned.
Source
Thrown at upup/pkg/fi/cloudup/awstasks/route.go:235
request.InstanceId = checkNotNil(e.Instance.ID)
}
klog.V(2).Infof("Creating Route with RouteTable:%q CIDR:%q IPv6CIDR:%q",
aws.ToString(e.RouteTable.ID), aws.ToString(e.CIDR), aws.ToString(e.IPv6CIDR))
response, err := t.Cloud.EC2().CreateRoute(ctx, request)
if err != nil {
code := awsup.AWSErrorCode(err)
message := awsup.AWSErrorMessage(err)
if code == "InvalidNatGatewayID.NotFound" {
klog.V(4).Infof("error creating Route: %s", message)
return fi.NewTryAgainLaterError("waiting for the NAT Gateway to be created")
}
return fmt.Errorf("error creating Route: %s", message)
}
if !aws.ToBool(response.Return) {
return fmt.Errorf("create Route request failed: %v", response)
}
} else {
request := &ec2.ReplaceRouteInput{}
request.RouteTableId = checkNotNil(e.RouteTable.ID)
if e.CIDR != nil || e.IPv6CIDR != nil {
request.DestinationCidrBlock = e.CIDR
request.DestinationIpv6CidrBlock = e.IPv6CIDR
} else {
klog.Fatal("both CIDR and IPv6CIDR were unexpectedly nil")
}
if e.InternetGateway == nil && e.NatGateway == nil && e.TransitGatewayID == nil && e.VPCPeeringConnectionID == nil {
return fmt.Errorf("missing target for route")
} else if e.InternetGateway != nil {
request.GatewayId = checkNotNil(e.InternetGateway.ID)
} else if e.NatGateway != nil {
request.NatGatewayId = checkNotNil(e.NatGateway.ID)View on GitHub (pinned to 4c8573c808)
Solutions
- Re-run kops update cluster to retry route creation
- Check AWS service health for EC2 in the region
- Inspect the dumped response object in the error message for details
- If persistent, capture the full response and report to kOps with AWS request IDs
Defensive patterns
Strategy: retry
Try / catch
resp, err := cloud.EC2().CreateRoute(ctx, req)
if err != nil { return err }
if !aws.ToBool(resp.Return) {
// transient API anomaly — retry with backoff
return fi.NewTryAgainLaterError("create Route returned Return=false")
} Prevention
- Re-run kops update cluster on this rare error — it is usually transient
- Watch AWS EC2 service health for regional incidents
- Retain the response dump from the error for AWS support tickets
When it happens
Trigger: EC2 CreateRoute returning a 200 with Return=false, typically during partial failures, API inconsistencies, or edge-case service errors not mapped to a Go error.
Common situations: Rare AWS service-side anomalies; intermittent issues during cluster bring-up; retrying after an earlier ambiguous failure.
Related errors
- error creating Route: %s
- describing instance for arn %q
- error terminating instances: %v
- error describing instances: %v
- error describing addresses: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/91f660387be69292.
Report an issue: GitHub.