diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go deleted file mode 100644 index f83cff058ac..00000000000 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go +++ /dev/null @@ -1,112 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha3 - -import ( - "k8s.io/apimachinery/pkg/conversion" - kubeproxyconfigv1alpha1 "k8s.io/kube-proxy/config/v1alpha1" - kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" - "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" - "k8s.io/kubernetes/cmd/kubeadm/app/constants" - kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" - kubeletconfigscheme "k8s.io/kubernetes/pkg/kubelet/apis/config/scheme" - kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" - kubeproxyconfigscheme "k8s.io/kubernetes/pkg/proxy/apis/config/scheme" -) - -func Convert_v1alpha3_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in *ClusterConfiguration, out *kubeadm.ClusterConfiguration, s conversion.Scope) error { - if err := autoConvert_v1alpha3_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in, out, s); err != nil { - return err - } - - // TODO: This conversion code is here ONLY for fuzzing tests. When we remove the v1alpha2 API, we can remove this (unnecessary) - // code. Right now this defaulting code has to be kept in sync with the defaulting code in cmd/kubeadm/app/apis/kubeadm/v1alpha2 and cmd/kubeadm/app/componentconfig - if out.ComponentConfigs.Kubelet == nil { - // Set the Kubelet ComponentConfig to an empty, defaulted struct - out.ComponentConfigs.Kubelet = &kubeletconfig.KubeletConfiguration{} - extkubeletconfig := &kubeletconfigv1beta1.KubeletConfiguration{} - - scheme, _, err := kubeletconfigscheme.NewSchemeAndCodecs() - if err != nil { - return err - } - - scheme.Default(extkubeletconfig) - scheme.Convert(extkubeletconfig, out.ComponentConfigs.Kubelet, nil) - defaultKubeletConfiguration(in, out.ComponentConfigs.Kubelet) - } - if out.ComponentConfigs.KubeProxy == nil { - // Set the KubeProxy ComponentConfig to an empty, defaulted struct - out.ComponentConfigs.KubeProxy = &kubeproxyconfig.KubeProxyConfiguration{} - extkubeproxyconfig := &kubeproxyconfigv1alpha1.KubeProxyConfiguration{} - kubeproxyconfigscheme.Scheme.Default(extkubeproxyconfig) - kubeproxyconfigscheme.Scheme.Convert(extkubeproxyconfig, out.ComponentConfigs.KubeProxy, nil) - defaultKubeProxyConfiguration(in, out.ComponentConfigs.KubeProxy) - } - return nil -} - -func defaultKubeProxyConfiguration(internalcfg *ClusterConfiguration, obj *kubeproxyconfig.KubeProxyConfiguration) { - // NOTE: This code should be mirrored from cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go and cmd/kubeadm/app/componentconfig/defaults.go - if obj.ClusterCIDR == "" && internalcfg.Networking.PodSubnet != "" { - obj.ClusterCIDR = internalcfg.Networking.PodSubnet - } - - if obj.ClientConnection.Kubeconfig == "" { - obj.ClientConnection.Kubeconfig = "/var/lib/kube-proxy/kubeconfig.conf" - } -} - -func defaultKubeletConfiguration(internalcfg *ClusterConfiguration, obj *kubeletconfig.KubeletConfiguration) { - // NOTE: This code should be mirrored from cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go and cmd/kubeadm/app/componentconfig/defaults.go - if obj.StaticPodPath == "" { - obj.StaticPodPath = DefaultManifestsDir - } - if obj.ClusterDNS == nil { - dnsIP, err := constants.GetDNSIP(internalcfg.Networking.ServiceSubnet) - if err != nil { - obj.ClusterDNS = []string{DefaultClusterDNSIP} - } else { - obj.ClusterDNS = []string{dnsIP.String()} - } - } - if obj.ClusterDomain == "" { - obj.ClusterDomain = internalcfg.Networking.DNSDomain - } - // Enforce security-related kubelet options - - // Require all clients to the kubelet API to have client certs signed by the cluster CA - obj.Authentication.X509.ClientCAFile = DefaultCACertPath - obj.Authentication.Anonymous.Enabled = false - - // On every client request to the kubelet API, execute a webhook (SubjectAccessReview request) to the API server - // and ask it whether the client is authorized to access the kubelet API - obj.Authorization.Mode = kubeletconfig.KubeletAuthorizationModeWebhook - - // Let clients using other authentication methods like ServiceAccount tokens also access the kubelet API - obj.Authentication.Webhook.Enabled = true - - // Disable the readonly port of the kubelet, in order to not expose unnecessary information - obj.ReadOnlyPort = 0 - - // Enables client certificate rotation for the kubelet - obj.RotateCertificates = true - - // Serve a /healthz webserver on localhost:10248 that kubeadm can talk to - obj.HealthzBindAddress = "127.0.0.1" - obj.HealthzPort = constants.KubeletHealthzPort -} diff --git a/cmd/kubeadm/app/componentconfigs/defaults.go b/cmd/kubeadm/app/componentconfigs/defaults.go index 22f3a67863f..d911add8f20 100644 --- a/cmd/kubeadm/app/componentconfigs/defaults.go +++ b/cmd/kubeadm/app/componentconfigs/defaults.go @@ -34,12 +34,12 @@ const ( // DefaultKubeProxyConfiguration assigns default values for the kube-proxy ComponentConfig func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.ClusterConfiguration) { - // IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go - // and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. TODO: Remove this requirement when v1alpha2 is removed. externalproxycfg := &kubeproxyconfigv1alpha1.KubeProxyConfiguration{} // Do a roundtrip to the external version for defaulting - Scheme.Convert(internalcfg.ComponentConfigs.KubeProxy, externalproxycfg, nil) + if internalcfg.ComponentConfigs.KubeProxy != nil { + Scheme.Convert(internalcfg.ComponentConfigs.KubeProxy, externalproxycfg, nil) + } if externalproxycfg.ClusterCIDR == "" && internalcfg.Networking.PodSubnet != "" { externalproxycfg.ClusterCIDR = internalcfg.Networking.PodSubnet @@ -63,12 +63,12 @@ func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.ClusterConfiguration) // DefaultKubeletConfiguration assigns default values for the kubelet ComponentConfig func DefaultKubeletConfiguration(internalcfg *kubeadmapi.ClusterConfiguration) { - // IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go - // and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. TODO: Remove this requirement when v1alpha2 is removed. externalkubeletcfg := &kubeletconfigv1beta1.KubeletConfiguration{} // Do a roundtrip to the external version for defaulting - Scheme.Convert(internalcfg.ComponentConfigs.Kubelet, externalkubeletcfg, nil) + if internalcfg.ComponentConfigs.Kubelet != nil { + Scheme.Convert(internalcfg.ComponentConfigs.Kubelet, externalkubeletcfg, nil) + } if externalkubeletcfg.StaticPodPath == "" { externalkubeletcfg.StaticPodPath = kubeadmapiv1alpha3.DefaultManifestsDir diff --git a/cmd/kubeadm/app/componentconfigs/registrations.go b/cmd/kubeadm/app/componentconfigs/registrations.go index 80870023a8c..ebe125d1a65 100644 --- a/cmd/kubeadm/app/componentconfigs/registrations.go +++ b/cmd/kubeadm/app/componentconfigs/registrations.go @@ -27,7 +27,9 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" + kubeletconfigv1beta1scheme "k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1" kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" + kubeproxyconfigv1alpha1scheme "k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1" ) // AddToSchemeFunc is a function that adds known types and API GroupVersions to a scheme @@ -96,10 +98,11 @@ var Known Registrations = map[RegistrationKind]Registration{ KubeProxyConfigurationKind: { // TODO: When a beta version of the kube-proxy ComponentConfig API is available, start using it MarshalGroupVersion: kubeproxyconfigv1alpha1.SchemeGroupVersion, - AddToSchemeFuncs: []AddToSchemeFunc{kubeproxyconfig.AddToScheme, kubeproxyconfigv1alpha1.AddToScheme}, - DefaulterFunc: DefaultKubeProxyConfiguration, - ValidateFunc: ValidateKubeProxyConfiguration, - EmptyValue: &kubeproxyconfig.KubeProxyConfiguration{}, + // AddToSchemeFuncs must use v1alpha1scheme defined in k8s.io/kubernetes, because the schema defined in k8s.io/kube-proxy doesn't have defaulting functions + AddToSchemeFuncs: []AddToSchemeFunc{kubeproxyconfig.AddToScheme, kubeproxyconfigv1alpha1scheme.AddToScheme}, + DefaulterFunc: DefaultKubeProxyConfiguration, + ValidateFunc: ValidateKubeProxyConfiguration, + EmptyValue: &kubeproxyconfig.KubeProxyConfiguration{}, GetFromInternalConfig: func(cfg *kubeadmapi.ClusterConfiguration) (runtime.Object, bool) { return cfg.ComponentConfigs.KubeProxy, cfg.ComponentConfigs.KubeProxy != nil }, @@ -114,10 +117,11 @@ var Known Registrations = map[RegistrationKind]Registration{ }, KubeletConfigurationKind: { MarshalGroupVersion: kubeletconfigv1beta1.SchemeGroupVersion, - AddToSchemeFuncs: []AddToSchemeFunc{kubeletconfig.AddToScheme, kubeletconfigv1beta1.AddToScheme}, - DefaulterFunc: DefaultKubeletConfiguration, - ValidateFunc: ValidateKubeletConfiguration, - EmptyValue: &kubeletconfig.KubeletConfiguration{}, + // PAddToSchemeFuncs must use v1alpha1scheme defined in k8s.io/kubernetes, because the schema defined in k8s.io/kubelet doesn't have defaulting functions + AddToSchemeFuncs: []AddToSchemeFunc{kubeletconfig.AddToScheme, kubeletconfigv1beta1scheme.AddToScheme}, + DefaulterFunc: DefaultKubeletConfiguration, + ValidateFunc: ValidateKubeletConfiguration, + EmptyValue: &kubeletconfig.KubeletConfiguration{}, GetFromInternalConfig: func(cfg *kubeadmapi.ClusterConfiguration) (runtime.Object, bool) { return cfg.ComponentConfigs.Kubelet, cfg.ComponentConfigs.Kubelet != nil }, diff --git a/cmd/kubeadm/app/phases/uploadconfig/uploadconfig_test.go b/cmd/kubeadm/app/phases/uploadconfig/uploadconfig_test.go index e0a99653108..ce16dc334f9 100644 --- a/cmd/kubeadm/app/phases/uploadconfig/uploadconfig_test.go +++ b/cmd/kubeadm/app/phases/uploadconfig/uploadconfig_test.go @@ -88,6 +88,10 @@ func TestUploadConfiguration(t *testing.T) { }, } cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig("", initialcfg) + + // cleans up component config to make cfg and decodedcfg comparable (now component config are not stored anymore in kubeadm-config config map) + cfg.ComponentConfigs = kubeadmapi.ComponentConfigs{} + if err != nil { t2.Fatalf("UploadConfiguration() error = %v", err) }