@@ -752,6 +752,7 @@ func (k *Kubernetes) ConfigServicePorts(service kobject.ServiceConfig) []api.Ser
752752 servicePorts := []api.ServicePort {}
753753 seenPorts := make (map [int ]struct {}, len (service .Port ))
754754
755+ serviceType := service .GetServiceType ()
755756 var servicePort api.ServicePort
756757 for _ , port := range service .Port {
757758 if port .HostPort == 0 {
@@ -766,7 +767,7 @@ func (k *Kubernetes) ConfigServicePorts(service kobject.ServiceConfig) []api.Ser
766767 name := strconv .Itoa (int (port .HostPort ))
767768 if _ , ok := seenPorts [int (port .HostPort )]; ok {
768769 // https://github.com/kubernetes/kubernetes/issues/2995
769- if service . ServiceType == string (api .ServiceTypeLoadBalancer ) {
770+ if serviceType == string (api .ServiceTypeLoadBalancer ) {
770771 log .Fatalf ("Service %s of type LoadBalancer cannot use TCP and UDP for the same port" , name )
771772 }
772773 name = fmt .Sprintf ("%s-%s" , name , strings .ToLower (port .Protocol ))
@@ -778,8 +779,9 @@ func (k *Kubernetes) ConfigServicePorts(service kobject.ServiceConfig) []api.Ser
778779 TargetPort : targetPort ,
779780 }
780781
781- if service .ServiceType == string (api .ServiceTypeNodePort ) && service .NodePortPort != 0 {
782- servicePort .NodePort = service .NodePortPort
782+ nodePortPort := service .GetServiceNodePort ()
783+ if serviceType == string (api .ServiceTypeNodePort ) && nodePortPort != 0 {
784+ servicePort .NodePort = nodePortPort
783785 }
784786
785787 // If the default is already TCP, no need to include protocol.
@@ -1491,9 +1493,14 @@ func buildServiceImage(opt kobject.ConvertOptions, service kobject.ServiceConfig
14911493 return nil
14921494}
14931495
1494- func (k * Kubernetes ) configKubeServiceAndIngressForService (service kobject.ServiceConfig , name string , objects * []runtime.Object ) {
1496+ func (k * Kubernetes ) configKubeServiceAndIngressForService (service kobject.ServiceConfig , name string , objects * []runtime.Object ) error {
1497+ err := service .CheckServiceType ()
1498+ if err != nil {
1499+ return err
1500+ }
1501+ svcType := service .GetServiceType ()
14951502 if k .PortsExist (service ) {
1496- if service . ServiceType == "LoadBalancer" {
1503+ if svcType == "LoadBalancer" {
14971504 svcs := k .CreateLBService (name , service )
14981505 for _ , svc := range svcs {
14991506 svc .Spec .ExternalTrafficPolicy = api .ServiceExternalTrafficPolicyType (service .ServiceExternalTrafficPolicy )
@@ -1513,7 +1520,7 @@ func (k *Kubernetes) configKubeServiceAndIngressForService(service kobject.Servi
15131520 }
15141521 }
15151522 } else {
1516- if service . ServiceType == "Headless" {
1523+ if svcType == "Headless" {
15171524 svc := k .CreateHeadlessService (name , service )
15181525 * objects = append (* objects , svc )
15191526 if service .ServiceExternalTrafficPolicy != "" {
@@ -1523,6 +1530,7 @@ func (k *Kubernetes) configKubeServiceAndIngressForService(service kobject.Servi
15231530 log .Warnf ("Service %q won't be created because 'ports' is not specified" , service .Name )
15241531 }
15251532 }
1533+ return nil
15261534}
15271535
15281536func (k * Kubernetes ) configNetworkPolicyForService (service kobject.ServiceConfig , name string , objects * []runtime.Object ) error {
@@ -1610,7 +1618,9 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
16101618 }
16111619 // override..
16121620 objects = append (objects , k .CreateWorkloadAndConfigMapObjects (groupName , service , opt )... )
1613- k .configKubeServiceAndIngressForService (service , groupName , & objects )
1621+ if err := k .configKubeServiceAndIngressForService (service , groupName , & objects ); err != nil {
1622+ return nil , err
1623+ }
16141624
16151625 // Configure the container volumes.
16161626 volumesMount , volumes , pvc , cms , err := k .ConfigVolumes (groupName , service )
@@ -1706,7 +1716,9 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
17061716 if opt .Controller == StatefulStateController {
17071717 service .ServiceType = "Headless"
17081718 }
1709- k .configKubeServiceAndIngressForService (service , name , & objects )
1719+ if err := k .configKubeServiceAndIngressForService (service , name , & objects ); err != nil {
1720+ return nil , err
1721+ }
17101722 err := k .UpdateKubernetesObjects (name , service , opt , & objects )
17111723 if err != nil {
17121724 return nil , errors .Wrap (err , "Error transforming Kubernetes objects" )
0 commit comments