code: func (idr *InitDryRunGetter) handleKubernetesService(action core.GetAction) (bool, runtime.Object, error) {
  	if action.GetName() != "kubernetes" || action.GetNamespace() != metav1.NamespaceDefault || action.GetResource().Resource != "services" {
  		// We can't handle this event
  		return false, nil, nil
  	}
  
  	_, svcSubnet, err := net.ParseCIDR(idr.serviceSubnet)
  	if err != nil {
  		return true, nil, errors.Wrapf(err, "error parsing CIDR %q", idr.serviceSubnet)
  	}
  
  	internalAPIServerVirtualIP, err := ipallocator.GetIndexedIP(svcSubnet, 1)
  	if err != nil {
  		return true, nil, errors.Wrapf(err, "unable to get first IP address from the given CIDR (%s)", svcSubnet.String())
  	}
  
  	// The only used field of this Service object is the ClusterIP, which kube-dns uses to calculate its own IP
  	return true, &v1.Service{
  		ObjectMeta: metav1.ObjectMeta{
  			Name:      "kubernetes",
  			Namespace: metav1.NamespaceDefault,
  			Labels: map[string]string{
  				"component": "apiserver",
  				"provider":  "kubernetes",
  			},
  		},
  		Spec: v1.ServiceSpec{
  			ClusterIP: internalAPIServerVirtualIP.String(),
  			Ports: []v1.ServicePort{
  				{
  					Name:       "https",
  					Port:       443,
  					TargetPort: intstr.FromInt(6443),
  				},
  			},
  		},
  	}, nil
  }
docs: // handleKubernetesService returns a faked Kubernetes service in order to be able to continue running kubeadm init.
  // The kube-dns addon code GETs the Kubernetes service in order to extract the service subnet