kubernetes/kops · error · field.ErrorList (field.InternalError)

IP version is incorrect

Error message

IP version is incorrect

What it means

Wraps failure of FindAutoscalingGroups in getCloudGroups. kOps enumerates all ASGs matching the cluster tags (via DescribeTags/DescribeAutoScalingGroups) to map cloud groups to kops instance groups. Any SDK error during discovery is wrapped with this message.

Source

Thrown at pkg/apis/kops/validation/validation.go:1917

	case "can-reach":
		destStr := method[1]
		ip := netutils.ParseIPSloppy(destStr)
		switch version {
		case ipv4.Version:
			if ip == nil || ip.To4() == nil {
				return field.ErrorList{field.Invalid(fldPath, runtime, "must be a valid IPv4 address")}
			} else {
				return nil
			}
		case ipv6.Version:
			if ip == nil || ip.To4() != nil {
				return field.ErrorList{field.Invalid(fldPath, runtime, "must be a valid IPv6 address")}
			} else {
				return nil
			}
		}

		return field.ErrorList{field.InternalError(fldPath, errors.New("IP version is incorrect"))}
	case "interface":
		ifRegexes := regexp.MustCompile(`\s*,\s*`).Split(method[1], -1)
		if len(ifRegexes) == 0 || ifRegexes[0] == "" {
			validationError = append(validationError, field.Invalid(fldPath, runtime, "'interface=' must be followed by a comma separated list of interface regular expressions"))
		}
		for _, r := range ifRegexes {
			_, e := regexp.Compile(r)
			if e != nil {
				validationError = append(validationError, field.Invalid(fldPath, runtime, fmt.Sprintf("regexp %s does not compile: %s", r, e.Error())))
			}
		}
		return validationError
	case "skip-interface":
		ifRegexes := regexp.MustCompile(`\s*,\s*`).Split(method[1], -1)
		if len(ifRegexes) == 0 || ifRegexes[0] == "" {
			validationError = append(validationError, field.Invalid(fldPath, runtime, "'skip-interface=' must be followed by a comma separated list of interface regular expressions"))
		}
		for _, r := range ifRegexes {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Grant the kOps IAM role autoscaling:DescribeTags and autoscaling:DescribeAutoScalingGroups
  2. Retry — throttling on large clusters is transient
  3. Verify the cluster's region/network reachability to the AWS autoscaling endpoint
  4. Run `aws autoscaling describe-tags --region <region>` manually to confirm API access
Defensive patterns

Strategy: retry

Validate before calling

_, err := client.DescribeAutoScalingGroups(ctx, &autoscaling.DescribeAutoScalingGroupsInput{MaxRecords: aws.Int32(1)})
if err != nil { return fmt.Errorf("autoscaling API unreachable: %w", err) }

Try / catch

groups, err := cloud.GetCloudGroups(ctx, cluster, igs, true, nodes)
if err != nil && strings.Contains(err.Error(), "unable to find autoscale groups") {
  if isThrottle(err) { retryWithBackoff() } else { checkIAMAndRegion(err) }
}

Prevention

When it happens

Trigger: Calling GetCloudGroups (rolling-update list, validate, delete) when the autoscaling DescribeTags/DescribeAutoScalingGroups APIs fail: credentials missing autoscaling:Describe* permissions, throttling, region misconfiguration, or network outage.

Common situations: Locked-down IAM roles missing autoscaling:DescribeTags; AWS rate limiting on clusters with many ASGs; wrong AWS region in kops cluster config; VPC endpoint or proxy outage.

Related errors


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