2019-01-12 04:58:27 +00:00
/ *
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 .
* /
2020-12-01 01:06:26 +00:00
package controlplane
2019-01-12 04:58:27 +00:00
import (
"fmt"
"net"
2020-08-10 17:43:49 +00:00
"k8s.io/klog/v2"
2019-12-12 01:27:03 +00:00
"k8s.io/utils/integer"
utilnet "k8s.io/utils/net"
2019-01-12 04:58:27 +00:00
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
)
2019-12-12 01:27:03 +00:00
// ServiceIPRange checks if the serviceClusterIPRange flag is nil, raising a warning if so and
// setting service ip range to the default value in kubeoptions.DefaultServiceIPCIDR
// for now until the default is removed per the deprecation timeline guidelines.
// Returns service ip range, api server service IP, and an error
func ServiceIPRange ( passedServiceClusterIPRange net . IPNet ) ( net . IPNet , net . IP , error ) {
2019-01-12 04:58:27 +00:00
serviceClusterIPRange := passedServiceClusterIPRange
if passedServiceClusterIPRange . IP == nil {
2019-12-12 01:27:03 +00:00
klog . Warningf ( "No CIDR for service cluster IPs specified. Default value which was %s is deprecated and will be removed in future releases. Please specify it using --service-cluster-ip-range on kube-apiserver." , kubeoptions . DefaultServiceIPCIDR . String ( ) )
2019-01-12 04:58:27 +00:00
serviceClusterIPRange = kubeoptions . DefaultServiceIPCIDR
}
2019-12-12 01:27:03 +00:00
size := integer . Int64Min ( utilnet . RangeSize ( & serviceClusterIPRange ) , 1 << 16 )
if size < 8 {
2020-03-26 21:07:15 +00:00
return net . IPNet { } , net . IP { } , fmt . Errorf ( "the service cluster IP range must be at least %d IP addresses" , 8 )
2019-01-12 04:58:27 +00:00
}
// Select the first valid IP from ServiceClusterIPRange to use as the GenericAPIServer service IP.
2019-12-12 01:27:03 +00:00
apiServerServiceIP , err := utilnet . GetIndexedIP ( & serviceClusterIPRange , 1 )
2019-01-12 04:58:27 +00:00
if err != nil {
return net . IPNet { } , net . IP { } , err
}
klog . V ( 4 ) . Infof ( "Setting service IP to %q (read-write)." , apiServerServiceIP )
return serviceClusterIPRange , apiServerServiceIP , nil
}