Skip to content

Commit

Permalink
Gateway API BackendRef filters support
Browse files Browse the repository at this point in the history
Fixes: #29080

Signed-off-by: chaunceyjiang <chaunceyjiang@gmail.com>
  • Loading branch information
chaunceyjiang committed Jan 11, 2024
1 parent 980c5dd commit f396316
Show file tree
Hide file tree
Showing 7 changed files with 2,402 additions and 6 deletions.
27 changes: 26 additions & 1 deletion operator/pkg/model/ingestion/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package ingestion

import (
"fmt"
"strings"
"time"

Expand Down Expand Up @@ -125,8 +126,8 @@ func toHTTPRoutes(listener gatewayv1.Listener, input []gatewayv1.HTTPRoute, serv
if len(computedHost) == 1 && computedHost[0] == allHosts {
computedHost = nil
}

for _, rule := range r.Spec.Rules {
var backendHTTPFilters []*model.BackendHTTPFilter
bes := make([]model.Backend, 0, len(rule.BackendRefs))
for _, be := range rule.BackendRefs {
if !helpers.IsBackendReferenceAllowed(r.GetNamespace(), be.BackendRef, gatewayv1.SchemeGroupVersion.WithKind("HTTPRoute"), grants) {
Expand All @@ -141,6 +142,28 @@ func toHTTPRoutes(listener gatewayv1.Listener, input []gatewayv1.HTTPRoute, serv
}
if serviceExists(string(be.Name), helpers.NamespaceDerefOr(be.Namespace, r.Namespace), services) {
bes = append(bes, backendToModelBackend(be.BackendRef, r.Namespace))
for _, f := range be.Filters {
switch f.Type {
case gatewayv1.HTTPRouteFilterRequestHeaderModifier:
backendHTTPFilters = append(backendHTTPFilters, &model.BackendHTTPFilter{
Name: fmt.Sprintf("%s:%s:%d", helpers.NamespaceDerefOr(be.Namespace, r.Namespace), be.Name, uint32(*be.Port)),
RequestHeaderFilter: &model.HTTPHeaderFilter{
HeadersToAdd: toHTTPHeaders(f.RequestHeaderModifier.Add),
HeadersToSet: toHTTPHeaders(f.RequestHeaderModifier.Set),
HeadersToRemove: f.RequestHeaderModifier.Remove,
},
})
case gatewayv1.HTTPRouteFilterResponseHeaderModifier:
backendHTTPFilters = append(backendHTTPFilters, &model.BackendHTTPFilter{
Name: fmt.Sprintf("%s:%s:%d", helpers.NamespaceDerefOr(be.Namespace, r.Namespace), be.Name, uint32(*be.Port)),
ResponseHeaderModifier: &model.HTTPHeaderFilter{
HeadersToAdd: toHTTPHeaders(f.ResponseHeaderModifier.Add),
HeadersToSet: toHTTPHeaders(f.ResponseHeaderModifier.Set),
HeadersToRemove: f.ResponseHeaderModifier.Remove,
},
})
}
}
}
}

Expand Down Expand Up @@ -184,6 +207,7 @@ func toHTTPRoutes(listener gatewayv1.Listener, input []gatewayv1.HTTPRoute, serv
httpRoutes = append(httpRoutes, model.HTTPRoute{
Hostnames: computedHost,
Backends: bes,
BackendHTTPFilters: backendHTTPFilters,
DirectResponse: dr,
RequestHeaderFilter: requestHeaderFilter,
ResponseHeaderModifier: responseHeaderFilter,
Expand All @@ -202,6 +226,7 @@ func toHTTPRoutes(listener gatewayv1.Listener, input []gatewayv1.HTTPRoute, serv
QueryParamsMatch: toQueryMatch(match),
Method: (*string)(match.Method),
Backends: bes,
BackendHTTPFilters: backendHTTPFilters,
DirectResponse: dr,
RequestHeaderFilter: requestHeaderFilter,
ResponseHeaderModifier: responseHeaderFilter,
Expand Down

0 comments on commit f396316

Please sign in to comment.