Skip to content

Commit f59c23b

Browse files
committed
[installer] support service type in experimental config
1 parent c36ca91 commit f59c23b

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

install/installer/pkg/components/proxy/service.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,28 @@ import (
1414
"k8s.io/apimachinery/pkg/runtime"
1515
)
1616

17+
var allowedServiceTypes = map[corev1.ServiceType]struct{}{
18+
corev1.ServiceTypeLoadBalancer: {},
19+
corev1.ServiceTypeClusterIP: {},
20+
corev1.ServiceTypeNodePort: {},
21+
corev1.ServiceTypeExternalName: {},
22+
}
23+
1724
func service(ctx *common.RenderContext) ([]runtime.Object, error) {
25+
serviceType := corev1.ServiceTypeLoadBalancer
26+
_ = ctx.WithExperimental(func(cfg *experimental.Config) error {
27+
if cfg.Common != nil {
28+
st := cfg.Common.ProxyConfig
29+
if st != nil {
30+
_, allowed := allowedServiceTypes[corev1.ServiceType(*st.ServiceType)]
31+
if allowed {
32+
serviceType = *st.ServiceType
33+
}
34+
}
35+
}
36+
return nil
37+
})
38+
1839
loadBalancerIP := ""
1940
_ = ctx.WithExperimental(func(cfg *experimental.Config) error {
2041
if cfg.WebApp != nil && cfg.WebApp.ProxyConfig != nil && cfg.WebApp.ProxyConfig.StaticIP != "" {
@@ -57,8 +78,10 @@ func service(ctx *common.RenderContext) ([]runtime.Object, error) {
5778
}
5879

5980
return common.GenerateService(Component, ports, func(service *corev1.Service) {
60-
service.Spec.Type = corev1.ServiceTypeLoadBalancer
61-
service.Spec.LoadBalancerIP = loadBalancerIP
81+
service.Spec.Type = serviceType
82+
if serviceType == corev1.ServiceTypeLoadBalancer {
83+
service.Spec.LoadBalancerIP = loadBalancerIP
84+
}
6285

6386
service.Annotations["external-dns.alpha.kubernetes.io/hostname"] = fmt.Sprintf("%s,*.%s,*.ws.%s", ctx.Config.Domain, ctx.Config.Domain, ctx.Config.Domain)
6487
service.Annotations["cloud.google.com/neg"] = `{"exposed_ports": {"80":{},"443": {}}}`

install/installer/pkg/config/v1/experimental/experimental.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,17 @@ type Config struct {
2424
}
2525

2626
type CommonConfig struct {
27-
PodConfig map[string]*PodConfig `json:"podConfig,omitempty"`
28-
StaticMessagebusPassword string `json:"staticMessagebusPassword"`
27+
PodConfig map[string]*PodConfig `json:"podConfig,omitempty"`
28+
// ProxyConfig is allows setting the serviceType for proxy service
29+
ProxyConfig *ServiceConfig `json:"proxyConfig,omitempty"`
30+
StaticMessagebusPassword string `json:"staticMessagebusPassword"`
31+
}
32+
33+
// ServiceConfig enables modification of type of service to `ClusterIP` if needed,
34+
// currently supported only for proxyConfig
35+
type ServiceConfig struct {
36+
// Allowed values are: "ClusterIP", "LoadBalancer", "NodePort", "ExternalName"
37+
ServiceType *corev1.ServiceType `json:"serviceType,omitempty" validate:"omitempty,service_config_type"`
2938
}
3039

3140
type PodConfig struct {

install/installer/pkg/config/v1/experimental/validation.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package experimental
66

77
import (
8+
corev1 "k8s.io/api/core/v1"
9+
810
"github.com/gitpod-io/gitpod/installer/pkg/cluster"
911
"github.com/go-playground/validator/v10"
1012
)
@@ -16,11 +18,22 @@ var TracingSampleTypeList = map[TracingSampleType]struct{}{
1618
TracingSampleTypeRemote: {},
1719
}
1820

21+
var ServiceTypeList = map[corev1.ServiceType]struct{}{
22+
corev1.ServiceTypeLoadBalancer: {},
23+
corev1.ServiceTypeClusterIP: {},
24+
corev1.ServiceTypeNodePort: {},
25+
corev1.ServiceTypeExternalName: {},
26+
}
27+
1928
var ValidationChecks = map[string]validator.Func{
2029
"tracing_sampler_type": func(fl validator.FieldLevel) bool {
2130
_, ok := TracingSampleTypeList[TracingSampleType(fl.Field().String())]
2231
return ok
2332
},
33+
"service_config_type": func(fl validator.FieldLevel) bool {
34+
_, ok := ServiceTypeList[corev1.ServiceType(fl.Field().String())]
35+
return ok
36+
},
2437
}
2538

2639
func ClusterValidation(cfg *Config) cluster.ValidationChecks {

0 commit comments

Comments
 (0)