Path: blob/main/install/installer/pkg/components/proxy/service.go
2501 views
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package proxy56import (7"fmt"89"github.com/gitpod-io/gitpod/common-go/baseserver"10"github.com/gitpod-io/gitpod/installer/pkg/common"11configv1 "github.com/gitpod-io/gitpod/installer/pkg/config/v1"12"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"1314corev1 "k8s.io/api/core/v1"15"k8s.io/apimachinery/pkg/runtime"16)1718var allowedServiceTypes = map[corev1.ServiceType]struct{}{19corev1.ServiceTypeLoadBalancer: {},20corev1.ServiceTypeClusterIP: {},21corev1.ServiceTypeNodePort: {},22corev1.ServiceTypeExternalName: {},23}2425func service(ctx *common.RenderContext) ([]runtime.Object, error) {2627loadBalancerIP := ""28_ = ctx.WithExperimental(func(cfg *experimental.Config) error {29if cfg.WebApp != nil && cfg.WebApp.ProxyConfig != nil {30if cfg.WebApp.ProxyConfig.StaticIP != "" {31loadBalancerIP = cfg.WebApp.ProxyConfig.StaticIP32}33}34return nil35})3637serviceType := corev1.ServiceTypeLoadBalancer38if ctx.Config.Components != nil && ctx.Config.Components.Proxy != nil && ctx.Config.Components.Proxy.Service != nil {39st := ctx.Config.Components.Proxy.Service.ServiceType40if st != nil {41_, allowed := allowedServiceTypes[corev1.ServiceType(*st)]42if allowed {43serviceType = *st44}45}46}4748var annotations map[string]string49_ = ctx.WithExperimental(func(cfg *experimental.Config) error {50if cfg.WebApp != nil && cfg.WebApp.ProxyConfig != nil {51annotations = cfg.WebApp.ProxyConfig.ServiceAnnotations52}53return nil54})5556ports := []common.ServicePort{57{58Name: ContainerHTTPName,59ContainerPort: ContainerHTTPPort,60ServicePort: ContainerHTTPPort,61},62{63Name: ContainerHTTPSName,64ContainerPort: ContainerHTTPSPort,65ServicePort: ContainerHTTPSPort,66},67{68Name: baseserver.BuiltinMetricsPortName,69ContainerPort: baseserver.BuiltinMetricsPort,70ServicePort: baseserver.BuiltinMetricsPort,71},72{73Name: ContainerAnalyticsName,74ContainerPort: ContainerAnalyticsPort,75ServicePort: ContainerAnalyticsPort,76},77{78Name: ContainerConfigcatName,79ContainerPort: ContainerConfigcatPort,80ServicePort: ContainerConfigcatPort,81},82}83if ctx.Config.SSHGatewayHostKey != nil {84ports = append(ports, common.ServicePort{85Name: ContainerSSHName,86ContainerPort: ContainerSSHPort,87ServicePort: ContainerSSHPort,88})89}9091return common.GenerateService(Component, ports, func(service *corev1.Service) {92service.Spec.Type = serviceType93if serviceType == corev1.ServiceTypeLoadBalancer {94service.Spec.LoadBalancerIP = loadBalancerIP9596installationShortNameSuffix := ""97if ctx.Config.Metadata.InstallationShortname != "" && ctx.Config.Metadata.InstallationShortname != configv1.InstallationShortNameOldDefault {98installationShortNameSuffix = "-" + ctx.Config.Metadata.InstallationShortname99}100101service.Annotations["external-dns.alpha.kubernetes.io/hostname"] = fmt.Sprintf("%s,*.%s,*.ws%s.%s", ctx.Config.Domain, ctx.Config.Domain, installationShortNameSuffix, ctx.Config.Domain)102service.Annotations["cloud.google.com/neg"] = `{"exposed_ports": {"80":{},"443": {}}}`103}104105for k, v := range annotations {106service.Annotations[k] = v107}108})(ctx)109}110111112