diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index fcb0d33f7a2..5c126825c81 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -134,6 +134,10 @@ const ( // It's copied over to kubeadm until it's merged in core: https://github.com/kubernetes/kubernetes/pull/39112 LabelNodeRoleMaster = "node-role.kubernetes.io/master" + // LabelNodeRoleExcludeBalancer specifies that the node should be + // exclude from load balancers created by a cloud provider. + LabelNodeRoleExcludeBalancer = "node.role.kubernetes.io/exclude-balancer" + // MasterConfigurationConfigMap specifies in what ConfigMap in the kube-system namespace the `kubeadm init` configuration should be stored MasterConfigurationConfigMap = "kubeadm-config" diff --git a/pkg/controller/service/service_controller.go b/pkg/controller/service/service_controller.go index 069055e7263..ee6802aff8b 100644 --- a/pkg/controller/service/service_controller.go +++ b/pkg/controller/service/service_controller.go @@ -598,6 +598,10 @@ func getNodeConditionPredicate() corelisters.NodeConditionPredicate { return false } + if _, hasExcludeBalancerLabel := node.Labels[constants.LabelNodeRoleExcludeBalancer]; hasExcludeBalancerLabel { + return false + } + // If we have no info, don't accept if len(node.Status.Conditions) == 0 { return false