{"record":{"id":"de2ca8a91cf62504","repo":"kubernetes/kops","slug":"classic-networking-not-supported","errorCode":null,"errorMessage":"classic networking not supported","messagePattern":"classic networking not supported","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/model/components/networking.go","lineNumber":42,"sourceCode":")\n\n// NetworkingOptionsBuilder adds options for the kubelet to the model\ntype NetworkingOptionsBuilder struct {\n\tContext *OptionsContext\n}\n\nvar _ loader.ClusterOptionsBuilder = &NetworkingOptionsBuilder{}\n\nfunc (b *NetworkingOptionsBuilder) BuildOptions(o *kops.Cluster) error {\n\tclusterSpec := &o.Spec\n\tif clusterSpec.Kubelet == nil {\n\t\tclusterSpec.Kubelet = &kops.KubeletConfigSpec{}\n\t}\n\n\tnetworking := &clusterSpec.Networking\n\n\tif networking.Classic != nil {\n\t\treturn fmt.Errorf(\"classic networking not supported\")\n\t}\n\n\treturn nil\n}\n","sourceCodeStart":24,"sourceCodeEnd":47,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/model/components/networking.go#L24-L47","documentation":"kOps removed support for the legacy \"classic\" networking mode (pre-CNI Kubernetes networking). If the cluster spec's networking.classic field is set (non-nil), BuildOptions rejects the spec outright. This forces users onto supported networking providers (kubenet, CNI, calico, etc.).","triggerScenarios":"A cluster spec YAML contains `networking: { classic: {} }` (or classic: true) and the user runs kops commands that build the model (create/replace/update cluster).","commonSituations":"Upgrading very old clusters/specs from Kubernetes 1.5-era configs; copying an ancient manifest; a tool generating specs with classic networking defaults.","solutions":["Remove the `classic` block from `spec.networking` in your cluster spec.","Choose a supported networking provider, e.g. add `networking: { calico: {} }` (or kubenet/canal/cilium) and run `kops update cluster`.","If migrating an old cluster, plan a CNI migration (rolling update) rather than keeping classic networking."],"exampleFix":"// before (cluster spec yaml)\nnetworking:\n  classic: {}\n// after\nnetworking:\n  calico: {}","handlingStrategy":"validation","validationCode":"spec, _ := yaml.Marshal(cluster.Spec)\nvar c kops.ClusterSpec\nyaml.Unmarshal(spec, &c)\nif c.Networking != nil && c.Networking.Classic != nil {\n    return errors.New(\"spec.networking.classic is no longer supported; choose a CNI provider\")\n}","typeGuard":"func usesClassicNetworking(c *kops.Cluster) bool { return c != nil && c.Spec.Networking != nil && c.Spec.Networking.Classic != nil }","tryCatchPattern":"if err := optsBuilder.BuildOptions(cluster); err != nil {\n    if strings.Contains(err.Error(), \"classic networking not supported\") {\n        // migrate spec.networking to calico/canal/cilium, then retry\n    }\n}","preventionTips":["Audit old cluster specs for `classic:` blocks before kOps upgrade.","Always declare an explicit supported networking provider in spec.networking.","Validate specs with `kops get -o yaml` round-trips after migrating from legacy configs."],"tags":["networking","cluster-spec","validation"],"backgroundTag":"unsupported-networking-mode","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"}