mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
kube-apiserver: removed the deprecated the --cloud-provider
and --cloud-config
CLI parameters.
Signed-off-by: carlory <baofa.fan@daocloud.io>
This commit is contained in:
parent
87fcae2bc7
commit
29e5d42979
@ -28,13 +28,11 @@ import (
|
|||||||
|
|
||||||
cp "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
|
cp "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
|
||||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
"k8s.io/kubernetes/pkg/kubeapiserver"
|
||||||
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// completedOptions is a private wrapper that enforces a call of Complete() before Run can be invoked.
|
// completedOptions is a private wrapper that enforces a call of Complete() before Run can be invoked.
|
||||||
type completedOptions struct {
|
type completedOptions struct {
|
||||||
cp.CompletedOptions
|
cp.CompletedOptions
|
||||||
CloudProvider *kubeoptions.CloudProviderOptions
|
|
||||||
|
|
||||||
Extra
|
Extra
|
||||||
}
|
}
|
||||||
@ -64,7 +62,6 @@ func (s *ServerRunOptions) Complete(ctx context.Context) (CompletedOptions, erro
|
|||||||
|
|
||||||
completed := completedOptions{
|
completed := completedOptions{
|
||||||
CompletedOptions: controlplane,
|
CompletedOptions: controlplane,
|
||||||
CloudProvider: s.CloudProvider,
|
|
||||||
|
|
||||||
Extra: s.Extra,
|
Extra: s.Extra,
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,6 @@ import (
|
|||||||
// ServerRunOptions runs a kubernetes api server.
|
// ServerRunOptions runs a kubernetes api server.
|
||||||
type ServerRunOptions struct {
|
type ServerRunOptions struct {
|
||||||
*controlplaneapiserver.Options // embedded to avoid noise in existing consumers
|
*controlplaneapiserver.Options // embedded to avoid noise in existing consumers
|
||||||
CloudProvider *kubeoptions.CloudProviderOptions
|
|
||||||
|
|
||||||
Extra
|
Extra
|
||||||
}
|
}
|
||||||
@ -66,8 +65,7 @@ type Extra struct {
|
|||||||
// NewServerRunOptions creates and returns ServerRunOptions according to the given featureGate and effectiveVersion of the server binary to run.
|
// NewServerRunOptions creates and returns ServerRunOptions according to the given featureGate and effectiveVersion of the server binary to run.
|
||||||
func NewServerRunOptions() *ServerRunOptions {
|
func NewServerRunOptions() *ServerRunOptions {
|
||||||
s := ServerRunOptions{
|
s := ServerRunOptions{
|
||||||
Options: controlplaneapiserver.NewOptions(),
|
Options: controlplaneapiserver.NewOptions(),
|
||||||
CloudProvider: kubeoptions.NewCloudProviderOptions(),
|
|
||||||
|
|
||||||
Extra: Extra{
|
Extra: Extra{
|
||||||
EndpointReconcilerType: string(reconcilers.LeaseEndpointReconcilerType),
|
EndpointReconcilerType: string(reconcilers.LeaseEndpointReconcilerType),
|
||||||
@ -101,7 +99,6 @@ func NewServerRunOptions() *ServerRunOptions {
|
|||||||
// Flags returns flags for a specific APIServer by section name
|
// Flags returns flags for a specific APIServer by section name
|
||||||
func (s *ServerRunOptions) Flags() (fss cliflag.NamedFlagSets) {
|
func (s *ServerRunOptions) Flags() (fss cliflag.NamedFlagSets) {
|
||||||
s.Options.AddFlags(&fss)
|
s.Options.AddFlags(&fss)
|
||||||
s.CloudProvider.AddFlags(fss.FlagSet("cloud provider"))
|
|
||||||
|
|
||||||
// Note: the weird ""+ in below lines seems to be the only way to get gofmt to
|
// Note: the weird ""+ in below lines seems to be the only way to get gofmt to
|
||||||
// arrange these text blocks sensibly. Grrr.
|
// arrange these text blocks sensibly. Grrr.
|
||||||
|
@ -331,10 +331,6 @@ func TestAddFlags(t *testing.T) {
|
|||||||
},
|
},
|
||||||
MasterCount: 5,
|
MasterCount: 5,
|
||||||
},
|
},
|
||||||
CloudProvider: &kubeoptions.CloudProviderOptions{
|
|
||||||
CloudConfigFile: "/cloud-config",
|
|
||||||
CloudProvider: "azure",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
expected.Authentication.OIDC.UsernameClaim = "sub"
|
expected.Authentication.OIDC.UsernameClaim = "sub"
|
||||||
|
@ -132,7 +132,6 @@ func (s CompletedOptions) Validate() []error {
|
|||||||
var errs []error
|
var errs []error
|
||||||
|
|
||||||
errs = append(errs, s.CompletedOptions.Validate()...)
|
errs = append(errs, s.CompletedOptions.Validate()...)
|
||||||
errs = append(errs, s.CloudProvider.Validate()...)
|
|
||||||
errs = append(errs, validateClusterIPFlags(s.Extra)...)
|
errs = append(errs, validateClusterIPFlags(s.Extra)...)
|
||||||
errs = append(errs, validateServiceNodePort(s.Extra)...)
|
errs = append(errs, validateServiceNodePort(s.Extra)...)
|
||||||
errs = append(errs, validatePublicIPServiceClusterIPRangeIPFamilies(s.Extra, *s.GenericServerRunOptions)...)
|
errs = append(errs, validatePublicIPServiceClusterIPRangeIPFamilies(s.Extra, *s.GenericServerRunOptions)...)
|
||||||
|
@ -212,9 +212,7 @@ func CreateKubeAPIServerConfig(
|
|||||||
capabilities.Setup(opts.AllowPrivileged, opts.MaxConnectionBytesPerSec)
|
capabilities.Setup(opts.AllowPrivileged, opts.MaxConnectionBytesPerSec)
|
||||||
|
|
||||||
// additional admission initializers
|
// additional admission initializers
|
||||||
kubeAdmissionConfig := &kubeapiserveradmission.Config{
|
kubeAdmissionConfig := &kubeapiserveradmission.Config{}
|
||||||
CloudConfigFile: opts.CloudProvider.CloudConfigFile,
|
|
||||||
}
|
|
||||||
kubeInitializers, err := kubeAdmissionConfig.New()
|
kubeInitializers, err := kubeAdmissionConfig.New()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, fmt.Errorf("failed to create admission plugin initializer: %w", err)
|
return nil, nil, nil, fmt.Errorf("failed to create admission plugin initializer: %w", err)
|
||||||
|
@ -17,28 +17,13 @@ limitations under the License.
|
|||||||
package admission
|
package admission
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
|
||||||
|
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config holds the configuration needed to for initialize the admission plugins
|
// Config holds the configuration needed to for initialize the admission plugins
|
||||||
type Config struct {
|
type Config struct{}
|
||||||
CloudConfigFile string
|
|
||||||
}
|
|
||||||
|
|
||||||
// New sets up the plugins and admission start hooks needed for admission
|
// New sets up the plugins and admission start hooks needed for admission
|
||||||
func (c *Config) New() ([]admission.PluginInitializer, error) {
|
func (c *Config) New() ([]admission.PluginInitializer, error) {
|
||||||
var cloudConfig []byte
|
return []admission.PluginInitializer{NewPluginInitializer()}, nil
|
||||||
if c.CloudConfigFile != "" {
|
|
||||||
var err error
|
|
||||||
cloudConfig, err = os.ReadFile(c.CloudConfigFile)
|
|
||||||
if err != nil {
|
|
||||||
klog.Fatalf("Error reading from cloud configuration file %s: %#v", c.CloudConfigFile, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return []admission.PluginInitializer{NewPluginInitializer(cloudConfig)}, nil
|
|
||||||
}
|
}
|
||||||
|
@ -22,29 +22,17 @@ import (
|
|||||||
|
|
||||||
// TODO add a `WantsToRun` which takes a stopCh. Might make it generic.
|
// TODO add a `WantsToRun` which takes a stopCh. Might make it generic.
|
||||||
|
|
||||||
// WantsCloudConfig defines a function which sets CloudConfig for admission plugins that need it.
|
|
||||||
type WantsCloudConfig interface {
|
|
||||||
SetCloudConfig([]byte)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
|
// PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
|
||||||
type PluginInitializer struct {
|
type PluginInitializer struct {
|
||||||
cloudConfig []byte
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ admission.PluginInitializer = &PluginInitializer{}
|
var _ admission.PluginInitializer = &PluginInitializer{}
|
||||||
|
|
||||||
// NewPluginInitializer constructs new instance of PluginInitializer
|
// NewPluginInitializer constructs new instance of PluginInitializer
|
||||||
func NewPluginInitializer(cloudConfig []byte) *PluginInitializer {
|
func NewPluginInitializer() *PluginInitializer {
|
||||||
return &PluginInitializer{
|
return &PluginInitializer{}
|
||||||
cloudConfig: cloudConfig,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize checks the initialization interfaces implemented by each plugin
|
// Initialize checks the initialization interfaces implemented by each plugin
|
||||||
// and provide the appropriate initialization data
|
// and provide the appropriate initialization data
|
||||||
func (i *PluginInitializer) Initialize(plugin admission.Interface) {
|
func (i *PluginInitializer) Initialize(plugin admission.Interface) {}
|
||||||
if wants, ok := plugin.(WantsCloudConfig); ok {
|
|
||||||
wants.SetCloudConfig(i.cloudConfig)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2016 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 admission
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"k8s.io/apiserver/pkg/admission"
|
|
||||||
)
|
|
||||||
|
|
||||||
type doNothingAdmission struct{}
|
|
||||||
|
|
||||||
func (doNothingAdmission) Admit(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func (doNothingAdmission) Handles(o admission.Operation) bool { return false }
|
|
||||||
func (doNothingAdmission) Validate() error { return nil }
|
|
||||||
|
|
||||||
type WantsCloudConfigAdmissionPlugin struct {
|
|
||||||
doNothingAdmission
|
|
||||||
cloudConfig []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *WantsCloudConfigAdmissionPlugin) SetCloudConfig(cloudConfig []byte) {
|
|
||||||
p.cloudConfig = cloudConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCloudConfigAdmissionPlugin(t *testing.T) {
|
|
||||||
cloudConfig := []byte("cloud-configuration")
|
|
||||||
initializer := NewPluginInitializer(cloudConfig)
|
|
||||||
wantsCloudConfigAdmission := &WantsCloudConfigAdmissionPlugin{}
|
|
||||||
initializer.Initialize(wantsCloudConfigAdmission)
|
|
||||||
|
|
||||||
if wantsCloudConfigAdmission.cloudConfig == nil {
|
|
||||||
t.Errorf("Expected cloud config to be initialized but found nil")
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 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 options
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/spf13/pflag"
|
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
|
||||||
cloudprovider "k8s.io/cloud-provider"
|
|
||||||
"k8s.io/kubernetes/pkg/features"
|
|
||||||
)
|
|
||||||
|
|
||||||
// CloudProviderOptions contains cloud provider config
|
|
||||||
type CloudProviderOptions struct {
|
|
||||||
CloudConfigFile string
|
|
||||||
CloudProvider string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewCloudProviderOptions creates a default CloudProviderOptions
|
|
||||||
func NewCloudProviderOptions() *CloudProviderOptions {
|
|
||||||
return &CloudProviderOptions{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate checks invalid config
|
|
||||||
func (opts *CloudProviderOptions) Validate() []error {
|
|
||||||
var errs []error
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case opts.CloudProvider == "":
|
|
||||||
case cloudprovider.IsExternal(opts.CloudProvider):
|
|
||||||
if !utilfeature.DefaultFeatureGate.Enabled(features.DisableCloudProviders) {
|
|
||||||
errs = append(errs, fmt.Errorf("when using --cloud-provider set to '%s', "+
|
|
||||||
"please set DisableCloudProviders feature to true", opts.CloudProvider))
|
|
||||||
}
|
|
||||||
if !utilfeature.DefaultFeatureGate.Enabled(features.DisableKubeletCloudCredentialProviders) {
|
|
||||||
errs = append(errs, fmt.Errorf("when using --cloud-provider set to '%s', "+
|
|
||||||
"please set DisableKubeletCloudCredentialProviders feature to true", opts.CloudProvider))
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
errs = append(errs, fmt.Errorf("unknown --cloud-provider: %s", opts.CloudProvider))
|
|
||||||
}
|
|
||||||
|
|
||||||
return errs
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddFlags returns flags of cloud provider for a API Server
|
|
||||||
func (s *CloudProviderOptions) AddFlags(fs *pflag.FlagSet) {
|
|
||||||
fs.StringVar(&s.CloudProvider, "cloud-provider", s.CloudProvider,
|
|
||||||
"The provider for cloud services. Empty string for no provider.")
|
|
||||||
fs.MarkDeprecated("cloud-provider", "will be removed in a future version") // nolint: errcheck
|
|
||||||
fs.StringVar(&s.CloudConfigFile, "cloud-config", s.CloudConfigFile,
|
|
||||||
"The path to the cloud provider configuration file. Empty string for no configuration file.")
|
|
||||||
fs.MarkDeprecated("cloud-config", "will be removed in a future version") // nolint: errcheck
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user