services.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. Copyright 2016 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package master
  14. import (
  15. "fmt"
  16. "net"
  17. "k8s.io/klog"
  18. "k8s.io/utils/integer"
  19. utilnet "k8s.io/utils/net"
  20. kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
  21. )
  22. // ServiceIPRange checks if the serviceClusterIPRange flag is nil, raising a warning if so and
  23. // setting service ip range to the default value in kubeoptions.DefaultServiceIPCIDR
  24. // for now until the default is removed per the deprecation timeline guidelines.
  25. // Returns service ip range, api server service IP, and an error
  26. func ServiceIPRange(passedServiceClusterIPRange net.IPNet) (net.IPNet, net.IP, error) {
  27. serviceClusterIPRange := passedServiceClusterIPRange
  28. if passedServiceClusterIPRange.IP == nil {
  29. 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())
  30. serviceClusterIPRange = kubeoptions.DefaultServiceIPCIDR
  31. }
  32. size := integer.Int64Min(utilnet.RangeSize(&serviceClusterIPRange), 1<<16)
  33. if size < 8 {
  34. return net.IPNet{}, net.IP{}, fmt.Errorf("the service cluster IP range must be at least %d IP addresses", 8)
  35. }
  36. // Select the first valid IP from ServiceClusterIPRange to use as the GenericAPIServer service IP.
  37. apiServerServiceIP, err := utilnet.GetIndexedIP(&serviceClusterIPRange, 1)
  38. if err != nil {
  39. return net.IPNet{}, net.IP{}, err
  40. }
  41. klog.V(4).Infof("Setting service IP to %q (read-write).", apiServerServiceIP)
  42. return serviceClusterIPRange, apiServerServiceIP, nil
  43. }