Skip to content

Commit 43a49b1

Browse files
authored
gateway2: skip non-Gloo Gateways (#10586)
Signed-off-by: Shashank Ram <[email protected]> Co-authored-by: changelog-bot <changelog-bot>
1 parent 7704bde commit 43a49b1

File tree

3 files changed

+33
-14
lines changed

3 files changed

+33
-14
lines changed

changelog/v1.19.0-beta6/check-gw.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
changelog:
2+
- type: FIX
3+
issueLink: https://github.com/solo-io/solo-projects/issues/7768
4+
resolvesIssue: false
5+
description: |
6+
Fixes a bug where we translate Gateways that do not belong to us.
7+

projects/gateway2/controller/start.go

+16-11
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,12 @@ type StartConfig struct {
8787
// It is intended to be run in a goroutine as the function will block until the supplied
8888
// context is cancelled
8989
type ControllerBuilder struct {
90-
proxySyncer *proxy_syncer.ProxySyncer
91-
inputChannels *proxy_syncer.GatewayInputChannels
92-
cfg StartConfig
93-
k8sGwExtensions ext.K8sGatewayExtensions
94-
mgr ctrl.Manager
90+
proxySyncer *proxy_syncer.ProxySyncer
91+
inputChannels *proxy_syncer.GatewayInputChannels
92+
cfg StartConfig
93+
k8sGwExtensions ext.K8sGatewayExtensions
94+
mgr ctrl.Manager
95+
allowedGatewayClasses sets.Set[string]
9596
}
9697

9798
func NewControllerBuilder(ctx context.Context, cfg StartConfig) (*ControllerBuilder, error) {
@@ -173,6 +174,8 @@ func NewControllerBuilder(ctx context.Context, cfg StartConfig) (*ControllerBuil
173174
return nil, err
174175
}
175176

177+
allowedGatewayClasses := sets.New(append(cfg.SetupOpts.ExtraGatewayClasses, wellknown.GatewayClassName)...)
178+
176179
// Create the proxy syncer for the Gateway API resources
177180
setupLog.Info("initializing proxy syncer")
178181
proxySyncer := proxy_syncer.NewProxySyncer(
@@ -193,6 +196,7 @@ func NewControllerBuilder(ctx context.Context, cfg StartConfig) (*ControllerBuil
193196
cfg.SyncerExtensions,
194197
cfg.GlooStatusReporter,
195198
cfg.SetupOpts.ProxyReconcileQueue,
199+
allowedGatewayClasses,
196200
)
197201
proxySyncer.Init(ctx, cfg.Debugger)
198202
if err := mgr.Add(proxySyncer); err != nil {
@@ -201,11 +205,12 @@ func NewControllerBuilder(ctx context.Context, cfg StartConfig) (*ControllerBuil
201205
}
202206

203207
return &ControllerBuilder{
204-
proxySyncer: proxySyncer,
205-
inputChannels: inputChannels,
206-
cfg: cfg,
207-
k8sGwExtensions: k8sGwExtensions,
208-
mgr: mgr,
208+
proxySyncer: proxySyncer,
209+
inputChannels: inputChannels,
210+
cfg: cfg,
211+
k8sGwExtensions: k8sGwExtensions,
212+
mgr: mgr,
213+
allowedGatewayClasses: allowedGatewayClasses,
209214
}, nil
210215
}
211216

@@ -249,7 +254,7 @@ func (c *ControllerBuilder) Start(ctx context.Context) error {
249254

250255
gwCfg := GatewayConfig{
251256
Mgr: c.mgr,
252-
GWClasses: sets.New(append(c.cfg.SetupOpts.ExtraGatewayClasses, wellknown.GatewayClassName)...),
257+
GWClasses: c.allowedGatewayClasses,
253258
ControllerName: wellknown.GatewayControllerName,
254259
AutoProvision: AutoProvision,
255260
ControlPlane: deployer.ControlPlaneInfo{

projects/gateway2/proxy_syncer/proxy_syncer.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/solo-io/gloo/projects/gloo/pkg/syncer/setup"
2525
"github.com/solo-io/gloo/projects/gloo/pkg/xds"
2626
rlkubev1a1 "github.com/solo-io/solo-apis/pkg/api/ratelimit.solo.io/v1alpha1"
27+
"k8s.io/apimachinery/pkg/util/sets"
2728

2829
"github.com/solo-io/solo-kit/pkg/api/v1/clients/common"
2930
"github.com/solo-io/solo-kit/pkg/api/v1/clients/kubesecret"
@@ -93,8 +94,9 @@ type ProxySyncer struct {
9394
proxiesToReconcile krt.Singleton[proxyList]
9495
proxyTrigger *krt.RecomputeTrigger
9596

96-
destRules DestinationRuleIndex
97-
translator setup.TranslatorFactory
97+
destRules DestinationRuleIndex
98+
translator setup.TranslatorFactory
99+
allowedGatewayClasses sets.Set[string]
98100

99101
waitForSync []cache.InformerSynced
100102
}
@@ -133,6 +135,7 @@ func NewProxySyncer(
133135
syncerExtensions []syncer.TranslatorSyncerExtension,
134136
glooReporter reporter.StatusReporter,
135137
proxyReconcileQueue ggv2utils.AsyncQueue[gloov1.ProxyList],
138+
allowedGatewayClasses sets.Set[string],
136139
) *ProxySyncer {
137140
return &ProxySyncer{
138141
initialSettings: initialSettings,
@@ -154,7 +157,8 @@ func NewProxySyncer(
154157
// once we audit the plugins to be safe for concurrent use, we can instantiate the translator here.
155158
// this will also have the advantage, that the plugin life-cycle will outlive a single translation
156159
// so that they could own krt collections internally.
157-
translator: translator,
160+
translator: translator,
161+
allowedGatewayClasses: allowedGatewayClasses,
158162
}
159163
}
160164

@@ -409,6 +413,9 @@ func (s *ProxySyncer) Init(ctx context.Context, dbg *krt.DebugHandler) error {
409413
s.proxyTrigger = krt.NewRecomputeTrigger(true)
410414

411415
glooProxies := krt.NewCollection(kubeGateways, func(kctx krt.HandlerContext, gw *gwv1.Gateway) *glooProxy {
416+
if !s.allowedGatewayClasses.Has(string(gw.Spec.GatewayClassName)) {
417+
return nil
418+
}
412419
logger.Debugf("building proxy for kube gw %s version %s", client.ObjectKeyFromObject(gw), gw.GetResourceVersion())
413420
s.proxyTrigger.MarkDependant(kctx)
414421
proxy := s.buildProxy(ctx, gw)

0 commit comments

Comments
 (0)