@@ -138,16 +138,16 @@ func (c *GatewayController) Reconcile(ctx context.Context, req ctrl.Request) (ct
138138 return ctrl.Result {}, err
139139 }
140140 var defaultLLMCosts []aigv1b1.LLMRequestCost
141- var defaultRateLimitsFromHeaders []aigv1b1.RateLimitFromHeader
141+ var defaultRateLimits []aigv1b1.RateLimitOverride
142142 if gwConfig != nil {
143143 defaultLLMCosts = gwConfig .Spec .GlobalLLMRequestCosts
144- defaultRateLimitsFromHeaders = gwConfig .Spec .GlobalRateLimitsFromHeaders
144+ defaultRateLimits = gwConfig .Spec .GlobalRateLimits
145145 }
146146
147147 // We need to create the filter config in Envoy Gateway system namespace because the sidecar extproc need
148148 // to access it.
149149 var hasEffectiveRoutes bool // indicates whether the filter config is effective (i.e., there is at least one active route).
150- hasEffectiveRoutes , err = c .reconcileFilterConfigSecret (ctx , FilterConfigSecretPerGatewayName (gw .Name , gw .Namespace ), namespace , aiRoutes .Items , mcpRoutes .Items , uid , defaultLLMCosts , defaultRateLimitsFromHeaders )
150+ hasEffectiveRoutes , err = c .reconcileFilterConfigSecret (ctx , FilterConfigSecretPerGatewayName (gw .Name , gw .Namespace ), namespace , aiRoutes .Items , mcpRoutes .Items , uid , defaultLLMCosts , defaultRateLimits )
151151 if err != nil {
152152 return ctrl.Result {}, err
153153 }
@@ -250,12 +250,21 @@ func aigwLLMRequestCostToFilterAPI(cost aigv1b1.LLMRequestCost, routeName string
250250 return out , nil
251251}
252252
253- func aigwGlobalRateLimitFromHeaderToFilterAPI (h aigv1b1.RateLimitFromHeader ) filterapi.GlobalRateLimitFromHeader {
254- return filterapi.GlobalRateLimitFromHeader {MetadataKey : h .MetadataKey , Header : strings .ToLower (h .Header )}
253+ func aigwGlobalRateLimitToFilterAPI (h aigv1b1.RateLimitOverride ) filterapi.GlobalRateLimitOverride {
254+ return filterapi.GlobalRateLimitOverride {
255+ MetadataKey : h .MetadataKey ,
256+ Namespace : h .Source .FromMetadata .Namespace ,
257+ Key : h .Source .FromMetadata .Key ,
258+ }
255259}
256260
257- func aigwRateLimitFromHeaderToFilterAPI (h aigv1b1.RateLimitFromHeader , routeName string ) filterapi.RateLimitFromHeader {
258- return filterapi.RateLimitFromHeader {MetadataKey : h .MetadataKey , Header : strings .ToLower (h .Header ), RouteName : routeName }
261+ func aigwRateLimitToFilterAPI (h aigv1b1.RateLimitOverride , routeName string ) filterapi.RateLimitOverride {
262+ return filterapi.RateLimitOverride {
263+ MetadataKey : h .MetadataKey ,
264+ Namespace : h .Source .FromMetadata .Namespace ,
265+ Key : h .Source .FromMetadata .Key ,
266+ RouteName : routeName ,
267+ }
259268}
260269
261270// mergeBodyMutations merges route-level and backend-level BodyMutation with route-level taking precedence.
@@ -361,7 +370,7 @@ func (c *GatewayController) reconcileFilterConfigSecret(
361370 mcpRoutes []aigv1b1.MCPRoute ,
362371 uuid string ,
363372 defaultLLMCosts []aigv1b1.LLMRequestCost ,
364- defaultRateLimitsFromHeaders []aigv1b1.RateLimitFromHeader ,
373+ defaultRateLimits []aigv1b1.RateLimitOverride ,
365374) (hasEffectiveRoute bool , _ error ) {
366375 // Precondition: aiGatewayRoutes is not empty as we early return if it is empty.
367376 ec := & filterapi.Config {UUID : uuid , Version : version .Parse ()}
@@ -378,10 +387,10 @@ func (c *GatewayController) reconcileFilterConfigSecret(
378387 }
379388 ec .GlobalLLMRequestCosts = append (ec .GlobalLLMRequestCosts , fc )
380389 }
381- // Process global RateLimitsFromHeaders from GatewayConfig.
390+ // Process global RateLimits from GatewayConfig.
382391 // CRD enforces uniqueness via +listType=map, so no deduplication needed.
383- for _ , h := range defaultRateLimitsFromHeaders {
384- ec .GlobalRateLimitsFromHeaders = append (ec .GlobalRateLimitsFromHeaders , aigwGlobalRateLimitFromHeaderToFilterAPI (h ))
392+ for _ , h := range defaultRateLimits {
393+ ec .GlobalRateLimits = append (ec .GlobalRateLimits , aigwGlobalRateLimitToFilterAPI (h ))
385394 }
386395
387396 // Models contributed by routes with no Spec.Hostnames. We only promote these to
@@ -523,12 +532,12 @@ func (c *GatewayController) reconcileFilterConfigSecret(
523532 ec .LLMRequestCosts = append (ec .LLMRequestCosts , fc )
524533 }
525534
526- dedupRL := map [string ]filterapi.RateLimitFromHeader {}
527- for _ , h := range aiGatewayRoute .Spec .RateLimitsFromHeaders {
528- dedupRL [h .MetadataKey ] = aigwRateLimitFromHeaderToFilterAPI (h , routeName )
535+ dedupRL := map [string ]filterapi.RateLimitOverride {}
536+ for _ , h := range aiGatewayRoute .Spec .RateLimits {
537+ dedupRL [h .MetadataKey ] = aigwRateLimitToFilterAPI (h , routeName )
529538 }
530539 for _ , h := range dedupRL {
531- ec .RateLimitsFromHeaders = append (ec .RateLimitsFromHeaders , h )
540+ ec .RateLimits = append (ec .RateLimits , h )
532541 }
533542 }
534543 }
0 commit comments