{"record":{"id":"e2263def1b018ea4","repo":"kubernetes/kops","slug":"error-parsing-serviceclusteriprange-q-v","errorCode":null,"errorMessage":"error parsing ServiceClusterIPRange %q: %v","messagePattern":"error parsing ServiceClusterIPRange %q: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/model/components/context.go","lineNumber":107,"sourceCode":"func (c *OptionsContext) IsKubernetesGTE(version string) bool {\n\treturn util.IsKubernetesGTE(version, c.KubernetesVersion)\n}\n\n// Deprecated: prefer using NodeKubernetesVersion() and ControlPlaneKubernetesVersion()\nfunc (c *OptionsContext) IsKubernetesLT(version string) bool {\n\treturn !c.IsKubernetesGTE(version)\n}\n\n// UsesCNI returns true if the networking provider is a CNI plugin\nfunc UsesCNI(networking *kops.NetworkingSpec) bool {\n\t// Kubenet and CNI are the only kubelet networking plugins right now.\n\treturn !networking.UsesKubenet()\n}\n\nfunc WellKnownServiceIP(networkingSpec *kops.NetworkingSpec, id int) (net.IP, error) {\n\t_, cidr, err := net.ParseCIDR(networkingSpec.ServiceClusterIPRange)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing ServiceClusterIPRange %q: %v\", networkingSpec.ServiceClusterIPRange, err)\n\t}\n\n\tip4 := cidr.IP.To4()\n\tif ip4 != nil {\n\t\tn := binary.BigEndian.Uint32(ip4)\n\t\tn += uint32(id)\n\t\tserviceIP := make(net.IP, len(ip4))\n\t\tbinary.BigEndian.PutUint32(serviceIP, n)\n\t\treturn serviceIP, nil\n\t}\n\n\tip6 := cidr.IP.To16()\n\tif ip6 != nil {\n\t\tbaseIPInt := big.NewInt(0)\n\t\tbaseIPInt.SetBytes(ip6)\n\t\tserviceIPInt := big.NewInt(0)\n\t\tserviceIPInt.Add(big.NewInt(int64(id)), baseIPInt)\n\t\tserviceIP := make(net.IP, len(ip6))","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/model/components/context.go#L89-L125","documentation":"WellKnownServiceIP computes the Nth well-known service IP (DNS, etc.) from cluster.spec.networking.serviceClusterIPRange using net.ParseCIDR. If that field is missing or not a valid CIDR, the function cannot derive the IP and fails with this wrapped parse error.","triggerScenarios":"Calling WellKnownServiceIP (directly or via BuildOptions/writeServerCertificate/configureKubelet) when ServiceClusterIPRange is empty ('') or malformed (e.g. '10.0.0.1' without a mask, '100.64.0.0/xx').","commonSituations":"Hand-written cluster manifests without the service CIDR; typos in the CIDR; clusters created by older tooling where the field defaulted differently; code paths that call WellKnownServiceIP on specs not yet validated.","solutions":["Set a valid service CIDR in the cluster spec, e.g. `kops set cluster networking.serviceClusterIPRange=100.64.0.0/13`","Fix CIDR syntax — it must include the prefix length (x.x.x.x/nn)","Run `kops validate cluster` / `kops get cluster -oyaml` to inspect the current value before editing"],"exampleFix":"# before\nnetworking:\n  serviceClusterIPRange: 100.64.0.0\n# after\nnetworking:\n  serviceClusterIPRange: 100.64.0.0/13","handlingStrategy":"validation","validationCode":"if networkingSpec.ServiceClusterIPRange == \"\" {\n\treturn fmt.Errorf(\"serviceClusterIPRange must be set (e.g. 100.64.0.0/13)\")\n}\nif _, _, err := net.ParseCIDR(networkingSpec.ServiceClusterIPRange); err != nil {\n\treturn fmt.Errorf(\"serviceClusterIPRange %q is not a valid CIDR\", networkingSpec.ServiceClusterIPRange)\n}","typeGuard":"func isValidCIDR(s string) bool { _, _, err := net.ParseCIDR(s); return err == nil }","tryCatchPattern":"ip, err := WellKnownServiceIP(networkingSpec, id)\nif err != nil {\n\tif strings.Contains(err.Error(), \"error parsing ServiceClusterIPRange\") {\n\t\t// fix spec.networking.serviceClusterIPRange before retry\n\t}\n\treturn err\n}","preventionTips":["Include the prefix length in all CIDR fields (/13, /108)","Use `kops create cluster` defaults instead of hand-writing service CIDRs","Validate specs with net.ParseCIDR in tooling before applying manifests"],"tags":["networking","cidr","service-cluster-ip-range"],"backgroundTag":"invalid-cidr","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}