/
service.go
61 lines (49 loc) · 1.85 KB
/
service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
Copyright 2020 The Kubermatic Kubernetes Platform contributors.
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 nodeportproxy
import (
"github.com/kubermatic/kubermatic/api/pkg/controller/operator/common"
"github.com/kubermatic/kubermatic/api/pkg/resources/reconciling"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)
// NB: Changing anything in this service can lead to new LoadBalancers being
// created and IPs changing. This must not happen when customers upgrade Kubermatic,
// as all existing kubeconfigs for user clusters would be broken.
const (
ServiceName = "nodeport-proxy"
)
func ServiceCreator() reconciling.NamedServiceCreatorGetter {
return func() (string, reconciling.ServiceCreator) {
return ServiceName, func(s *corev1.Service) (*corev1.Service, error) {
// We don't actually manage this service, that is done by the nodeport proxy, we just
// must make sure that it exists
s.Spec.Type = corev1.ServiceTypeLoadBalancer
s.Spec.Selector = map[string]string{
common.NameLabel: ServiceName,
}
// Services need at least one port to be valid, so create it initially.
if len(s.Spec.Ports) == 0 {
s.Spec.Ports = []corev1.ServicePort{
{
Name: "healthz",
Port: EnvoyPort,
TargetPort: intstr.FromInt(EnvoyPort),
Protocol: corev1.ProtocolTCP,
},
}
}
return s, nil
}
}
}