Skip to content

Commit 354cf2a

Browse files
committed
feat: gateway light support multiple backends
Signed-off-by: nabil salah <nabil.salah203@gmail.com>
1 parent d41ba90 commit 354cf2a

3 files changed

Lines changed: 32 additions & 49 deletions

File tree

pkg/gateway/gateway.go

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -558,10 +558,6 @@ func (g *gatewayModule) SetNamedProxy(wlID string, config zos.GatewayNameProxy)
558558
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
559559
defer cancel()
560560

561-
// if len(config.Backends) != 1 {
562-
// return "", fmt.Errorf("only one backend is supported got '%d'", len(config.Backends))
563-
// }
564-
565561
twinID, _, _, err := gridtypes.WorkloadID(wlID).Parts()
566562
if err != nil {
567563
return "", errors.Wrap(err, "invalid workload id")
@@ -600,10 +596,6 @@ func (g *gatewayModule) SetFQDNProxy(wlID string, config zos.GatewayFQDNProxy) e
600596
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
601597
defer cancel()
602598

603-
if len(config.Backends) != 1 {
604-
return fmt.Errorf("only one backend is supported got '%d'", len(config.Backends))
605-
}
606-
607599
cfg, err := g.ensureGateway(ctx, false)
608600
if err != nil {
609601
return err
@@ -661,21 +653,21 @@ func (g *gatewayModule) setupRouting(ctx context.Context, wlID string, fqdn stri
661653
return errors.Wrap(err, "failed to get user network")
662654
}
663655
ns := net.Namespace(ctx, netID)
664-
656+
665657
processedBackends := make([]zos.Backend, 0, len(config.Backends))
666-
for _, backend := range config.Backends {
658+
for _, backend := range config.Backends {
667659
processedBackend, err := g.nncEnsure(wlID, ns, backend)
668-
if err != nil {
669-
return errors.Wrap(err, "failed to ensure local gateway")
670-
}
660+
if err != nil {
661+
return errors.Wrap(err, "failed to ensure local gateway")
662+
}
663+
664+
if !config.TLSPassthrough {
665+
// Format for non-TLS passthrough
666+
processedBackend = zos.Backend(fmt.Sprintf("http://%s", processedBackend))
667+
}
668+
669+
processedBackends = append(processedBackends, processedBackend)
671670

672-
if !config.TLSPassthrough {
673-
// Format for non-TLS passthrough
674-
processedBackend = zos.Backend(fmt.Sprintf("http://%s", processedBackend))
675-
}
676-
677-
processedBackends = append(processedBackends, processedBackend)
678-
679671
}
680672

681673
config.Backends = processedBackends
@@ -696,12 +688,12 @@ func (g *gatewayModule) setupRoutingGeneric(wlID string, fqdn string, tlsConfig
696688
servers := make([]Server, 0, len(config.Backends))
697689
for _, backend := range config.Backends {
698690
var server Server
699-
if config.TLSPassthrough {
700-
server = Server{Address: string(backend)}
701-
} else {
702-
server = Server{Url: string(backend)}
703-
}
704-
servers = append(servers, server)
691+
if config.TLSPassthrough {
692+
server = Server{Address: string(backend)}
693+
} else {
694+
server = Server{Url: string(backend)}
695+
}
696+
servers = append(servers, server)
705697
}
706698

707699
route := fmt.Sprintf("%s-route", wlID)

pkg/gateway_light/gateway.go

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -569,10 +569,6 @@ func (g *gatewayModule) SetNamedProxy(wlID string, config zos.GatewayNameProxy)
569569
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
570570
defer cancel()
571571

572-
if len(config.Backends) != 1 {
573-
return "", fmt.Errorf("only one backend is supported got '%d'", len(config.Backends))
574-
}
575-
576572
twinID, _, _, err := gridtypes.WorkloadID(wlID).Parts()
577573
if err != nil {
578574
return "", errors.Wrap(err, "invalid workload id")
@@ -611,10 +607,6 @@ func (g *gatewayModule) SetFQDNProxy(wlID string, config zos.GatewayFQDNProxy) e
611607
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
612608
defer cancel()
613609

614-
if len(config.Backends) != 1 {
615-
return fmt.Errorf("only one backend is supported got '%d'", len(config.Backends))
616-
}
617-
618610
domain, err := g.ensureGateway(ctx, false)
619611
if err != nil {
620612
return err
@@ -642,10 +634,10 @@ func (g *gatewayModule) setupRouting(ctx context.Context, wlID string, fqdn stri
642634
g.domainLock.Lock()
643635
defer g.domainLock.Unlock()
644636

645-
backend := config.Backends[0]
646-
647-
if err := backend.Valid(config.TLSPassthrough); err != nil {
648-
return errors.Wrapf(err, "failed to validate backend '%s'", backend)
637+
for _, backend := range config.Backends {
638+
if err := backend.Valid(config.TLSPassthrough); err != nil {
639+
return errors.Wrapf(err, "failed to validate backend '%s'", backend)
640+
}
649641
}
650642

651643
if _, ok := g.getReservedDomain(fqdn); ok {
@@ -689,7 +681,6 @@ func (g *gatewayModule) setupRouting(ctx context.Context, wlID string, fqdn stri
689681
}
690682

691683
func (g *gatewayModule) setupRoutingGeneric(wlID string, fqdn string, tlsConfig TlsConfig, config zos.GatewayBase) error {
692-
backend := config.Backends[0]
693684
var rule string
694685
if config.TLSPassthrough {
695686
rule = fmt.Sprintf("HostSNI(`%s`)", fqdn)
@@ -700,11 +691,15 @@ func (g *gatewayModule) setupRoutingGeneric(wlID string, fqdn string, tlsConfig
700691
rule = fmt.Sprintf("Host(`%s`)", fqdn)
701692
}
702693

703-
var server Server
704-
if config.TLSPassthrough {
705-
server = Server{Address: string(backend)}
706-
} else {
707-
server = Server{Url: string(backend)}
694+
var servers []Server
695+
for _, backend := range config.Backends {
696+
var server Server
697+
if config.TLSPassthrough {
698+
server = Server{Address: string(backend)}
699+
} else {
700+
server = Server{Url: string(backend)}
701+
}
702+
servers = append(servers, server)
708703
}
709704

710705
route := fmt.Sprintf("%s-route", wlID)
@@ -721,7 +716,7 @@ func (g *gatewayModule) setupRoutingGeneric(wlID string, fqdn string, tlsConfig
721716
Services: map[string]Service{
722717
wlID: {
723718
LoadBalancer: LoadBalancer{
724-
Servers: []Server{server},
719+
Servers: servers,
725720
},
726721
},
727722
},

pkg/gridtypes/zos/gw.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ func (g GatewayBase) Valid(getter gridtypes.WorkloadGetter) error {
105105
return fmt.Errorf("backends list can not be empty")
106106
}
107107

108-
// if len(g.Backends) != 1 {
109-
// return fmt.Errorf("only one backend is supported")
110-
// }
111-
112108
for _, backend := range g.Backends {
113109
if err := backend.Valid(g.TLSPassthrough); err != nil {
114110
return errors.Wrapf(err, "failed to validate backend '%s'", backend)

0 commit comments

Comments
 (0)