@@ -104,11 +104,10 @@ func (lbp *RancherLBProvider) ApplyConfig(lbConfig *lbconfig.LoadBalancerConfig)
104104
105105 defer unlocker .Unlock ()
106106
107- lb , err := lbp .createLBService (lbp . formatLBName ( lbConfig . Name ) )
107+ lb , err := lbp .createLBService (lbConfig )
108108 if err != nil {
109109 return err
110110 }
111- logrus .Infof ("Setting service links for service [%s]" , lb .Name )
112111 return lbp .setServiceLinks (lb , lbConfig )
113112}
114113
@@ -298,7 +297,8 @@ func (lbp *RancherLBProvider) getStack(name string) (*client.Environment, error)
298297 return nil , nil
299298}
300299
301- func (lbp * RancherLBProvider ) createLBService (name string ) (* client.LoadBalancerService , error ) {
300+ func (lbp * RancherLBProvider ) createLBService (lbConfig * lbconfig.LoadBalancerConfig ) (* client.LoadBalancerService , error ) {
301+ name := lbp .formatLBName (lbConfig .Name )
302302 stack , err := lbp .getOrCreateSystemStack ()
303303 if err != nil {
304304 return nil , err
@@ -314,9 +314,20 @@ func (lbp *RancherLBProvider) createLBService(name string) (*client.LoadBalancer
314314 return lb , nil
315315 }
316316
317- // private port 80 will be overritten by ports
318- // in hostname routing rules
319- lbPorts := []string {"80:80" }
317+ if len (lbConfig .FrontendServices ) == 0 {
318+ logrus .Infof ("LB config [%s] have 0 frondends" , lbConfig .Name )
319+ return nil , nil
320+ }
321+
322+ // TODO: support multiple ports
323+ lbFrontend := lbConfig .FrontendServices [0 ]
324+ publicPort := "80"
325+ privatePort := "80"
326+ defaultBackend := lbp .getDefaultBackend (lbFrontend )
327+ if defaultBackend != nil {
328+ privatePort = strconv .Itoa (defaultBackend .Port )
329+ }
330+ lbPorts := []string {fmt .Sprintf ("%v:%v" , publicPort , privatePort )}
320331
321332 lb = & client.LoadBalancerService {
322333 Name : name ,
@@ -335,6 +346,15 @@ func (lbp *RancherLBProvider) createLBService(name string) (*client.LoadBalancer
335346 return lbp .activateLBService (lb )
336347}
337348
349+ func (lbp * RancherLBProvider ) getDefaultBackend (frontend * lbconfig.FrontendService ) * lbconfig.BackendService {
350+ for _ , backend := range frontend .BackendServices {
351+ if backend .Path == "" && backend .Host == "" {
352+ return backend
353+ }
354+ }
355+ return nil
356+ }
357+
338358func (lbp * RancherLBProvider ) setServiceLinks (lb * client.LoadBalancerService , lbConfig * lbconfig.LoadBalancerConfig ) error {
339359 if len (lbConfig .FrontendServices ) == 0 {
340360 logrus .Infof ("Config [%s] doesn't have any rules defined" , lbConfig .Name )
0 commit comments