{"record":{"id":"ab52e1954f678c03","repo":"kubernetes/kops","slug":"unknown-cni-plugin-binaries-asset-s","errorCode":null,"errorMessage":"unknown CNI plugin binaries asset: %s","messagePattern":"unknown CNI plugin binaries asset: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/nodemodel/wellknownassets/cni.go","lineNumber":109,"sourceCode":"\t\t\tcniAssetURL = defaultCNIAssetAmd64K8s_32\n\t\t}\n\tcase architectures.ArchitectureArm64:\n\t\tswitch {\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.36\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_36\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.35\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_35\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.34\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_34\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.32\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_32\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown arch for CNI plugin binaries asset: %s\", arch)\n\t}\n\n\tif cniAssetURL == \"\" {\n\t\treturn nil, fmt.Errorf(\"unknown CNI plugin binaries asset: %s\", arch)\n\t} else {\n\t\tklog.V(2).Infof(\"Adding CNI plugin binaries asset: %s\", cniAssetURL)\n\t}\n\n\tu, err := url.Parse(cniAssetURL)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to parse CNI plugin binaries asset URL %q: %v\", cniAssetURL, err)\n\t}\n\n\tasset, err := assetBuilder.RemapFile(u, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to remap CNI plugin binaries asset: %v\", err)\n\t}\n\n\treturn asset, nil\n}\n","sourceCodeStart":91,"sourceCodeEnd":126,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/nodemodel/wellknownassets/cni.go#L91-L126","documentation":"After the arch switch, kOps verifies that a default cniAssetURL was actually assigned. For a known architecture, the version-specific switch (IsGTE checks against Kubernetes 1.32/1.34/1.35/1.36) has no default case that assigns a URL, so if the instance group's Kubernetes version predates all known thresholds the URL stays empty and this error is thrown.","triggerScenarios":"FindCNIAssets is called with a valid arch (amd64/arm64), no CNI_VERSION_URL/CNI_ASSET_HASH_STRING override, and ig.KubernetesVersion() is below every IsGTE threshold (i.e. < 1.32), leaving cniAssetURL == \"\".","commonSituations":"Cluster spec with an old Kubernetes version (e.g. 1.30 or 1.31) whose CNI default was removed from this kOps build; a KubernetesVersion that failed to parse and compares below all thresholds; running a newer kOps against a legacy cluster spec.","solutions":["Upgrade the cluster's KubernetesVersion to >= 1.32, or use the kOps version that supports your Kubernetes version","Set CNI_VERSION_URL and CNI_ASSET_HASH_STRING env vars to pin an appropriate CNI plugin release explicitly","Verify the instance group spec's kubernetesVersion is parsed correctly (check cluster.yaml for typos like \"1,32\")","If calling FindCNIAssets directly, pass an instance group with a supported KubernetesVersion"],"exampleFix":"// before (cluster.yaml)\nkubernetesVersion: 1.31.0\n// after\nkubernetesVersion: 1.32.0","handlingStrategy":"validation","validationCode":"if !ig.KubernetesVersion().IsGTE(\"1.32\") {\n    return fmt.Errorf(\"kubernetes version %s has no default CNI asset in this kOps build; upgrade or set CNI_VERSION_URL\", ig.KubernetesVersion())\n}","typeGuard":null,"tryCatchPattern":"if _, err := FindCNIAssets(ig, assetBuilder, arch); err != nil {\n    if strings.Contains(err.Error(), \"unknown CNI plugin binaries asset\") {\n        klog.Errorf(\"kubernetes version too old for default CNI assets; upgrade to >=1.32 or set CNI_VERSION_URL/CNI_ASSET_HASH_STRING: %v\", err)\n    }\n    return err\n}","preventionTips":["Keep the cluster's kubernetesVersion at or above kOps' minimum supported version","Pin CNI_VERSION_URL/CNI_ASSET_HASH_STRING when running legacy Kubernetes versions","Upgrade kOps and the cluster version together per the kOps upgrade notes"],"tags":["kops","cni","kubernetes-version","compatibility","configuration"],"backgroundTag":"unsupported-kubernetes-version","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"}