123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- 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 options
- import (
- "fmt"
- "net"
- "strconv"
- "github.com/spf13/pflag"
- apiserveroptions "k8s.io/apiserver/pkg/server/options"
- schedulerappconfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config"
- kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
- )
- // CombinedInsecureServingOptions sets up to two insecure listeners for healthz and metrics. The flags
- // override the ComponentConfig and DeprecatedInsecureServingOptions values for both.
- type CombinedInsecureServingOptions struct {
- Healthz *apiserveroptions.DeprecatedInsecureServingOptionsWithLoopback
- Metrics *apiserveroptions.DeprecatedInsecureServingOptionsWithLoopback
- BindPort int // overrides the structs above on ApplyTo, ignored on ApplyToFromLoadedConfig
- BindAddress string // overrides the structs above on ApplyTo, ignored on ApplyToFromLoadedConfig
- }
- // AddFlags adds flags for the insecure serving options.
- func (o *CombinedInsecureServingOptions) AddFlags(fs *pflag.FlagSet) {
- if o == nil {
- return
- }
- fs.StringVar(&o.BindAddress, "address", o.BindAddress, "DEPRECATED: the IP address on which to listen for the --port port (set to 0.0.0.0 for all IPv4 interfaces and :: for all IPv6 interfaces). See --bind-address instead.")
- // MarkDeprecated hides the flag from the help. We don't want that:
- // fs.MarkDeprecated("address", "see --bind-address instead.")
- fs.IntVar(&o.BindPort, "port", o.BindPort, "DEPRECATED: the port on which to serve HTTP insecurely without authentication and authorization. If 0, don't serve HTTPS at all. See --secure-port instead.")
- // MarkDeprecated hides the flag from the help. We don't want that:
- // fs.MarkDeprecated("port", "see --secure-port instead.")
- }
- func (o *CombinedInsecureServingOptions) applyTo(c *schedulerappconfig.Config, componentConfig *kubeschedulerconfig.KubeSchedulerConfiguration) error {
- if err := updateAddressFromDeprecatedInsecureServingOptions(&componentConfig.HealthzBindAddress, o.Healthz); err != nil {
- return err
- }
- if err := updateAddressFromDeprecatedInsecureServingOptions(&componentConfig.MetricsBindAddress, o.Metrics); err != nil {
- return err
- }
- if err := o.Healthz.ApplyTo(&c.InsecureServing, &c.LoopbackClientConfig); err != nil {
- return err
- }
- if o.Metrics != nil && (c.ComponentConfig.MetricsBindAddress != c.ComponentConfig.HealthzBindAddress || o.Healthz == nil) {
- if err := o.Metrics.ApplyTo(&c.InsecureMetricsServing, &c.LoopbackClientConfig); err != nil {
- return err
- }
- }
- return nil
- }
- // ApplyTo applies the insecure serving options to the given scheduler app configuration, and updates the componentConfig.
- func (o *CombinedInsecureServingOptions) ApplyTo(c *schedulerappconfig.Config, componentConfig *kubeschedulerconfig.KubeSchedulerConfiguration) error {
- if o == nil {
- componentConfig.HealthzBindAddress = ""
- componentConfig.MetricsBindAddress = ""
- return nil
- }
- if o.Healthz != nil {
- o.Healthz.BindPort = o.BindPort
- o.Healthz.BindAddress = net.ParseIP(o.BindAddress)
- }
- if o.Metrics != nil {
- o.Metrics.BindPort = o.BindPort
- o.Metrics.BindAddress = net.ParseIP(o.BindAddress)
- }
- return o.applyTo(c, componentConfig)
- }
- // ApplyToFromLoadedConfig updates the insecure serving options from the component config and then appies it to the given scheduler app configuration.
- func (o *CombinedInsecureServingOptions) ApplyToFromLoadedConfig(c *schedulerappconfig.Config, componentConfig *kubeschedulerconfig.KubeSchedulerConfiguration) error {
- if o == nil {
- return nil
- }
- if err := updateDeprecatedInsecureServingOptionsFromAddress(o.Healthz, componentConfig.HealthzBindAddress); err != nil {
- return fmt.Errorf("invalid healthz address: %v", err)
- }
- if err := updateDeprecatedInsecureServingOptionsFromAddress(o.Metrics, componentConfig.MetricsBindAddress); err != nil {
- return fmt.Errorf("invalid metrics address: %v", err)
- }
- return o.applyTo(c, componentConfig)
- }
- func updateAddressFromDeprecatedInsecureServingOptions(addr *string, is *apiserveroptions.DeprecatedInsecureServingOptionsWithLoopback) error {
- if is == nil {
- *addr = ""
- } else {
- if is.Listener != nil {
- *addr = is.Listener.Addr().String()
- } else if is.BindPort == 0 {
- *addr = ""
- } else {
- *addr = net.JoinHostPort(is.BindAddress.String(), strconv.Itoa(is.BindPort))
- }
- }
- return nil
- }
- func updateDeprecatedInsecureServingOptionsFromAddress(is *apiserveroptions.DeprecatedInsecureServingOptionsWithLoopback, addr string) error {
- if is == nil {
- return nil
- }
- if len(addr) == 0 {
- is.BindPort = 0
- return nil
- }
- host, portInt, err := splitHostIntPort(addr)
- if err != nil {
- return fmt.Errorf("invalid address %q", addr)
- }
- is.BindAddress = net.ParseIP(host)
- is.BindPort = portInt
- return nil
- }
- // Validate validates the insecure serving options.
- func (o *CombinedInsecureServingOptions) Validate() []error {
- if o == nil {
- return nil
- }
- errors := []error{}
- if o.BindPort < 0 || o.BindPort > 65335 {
- errors = append(errors, fmt.Errorf("--port %v must be between 0 and 65335, inclusive. 0 for turning off insecure (HTTP) port", o.BindPort))
- }
- if len(o.BindAddress) > 0 && net.ParseIP(o.BindAddress) == nil {
- errors = append(errors, fmt.Errorf("--address %v is an invalid IP address", o.BindAddress))
- }
- return errors
- }
|