github.com/cilium/cilium@v1.16.2/operator/pkg/model/translation/envoy_http_connection_manager.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package translation 5 6 import ( 7 envoy_config_core "github.com/cilium/proxy/go/envoy/config/core/v3" 8 grpcStatsv3 "github.com/cilium/proxy/go/envoy/extensions/filters/http/grpc_stats/v3" 9 grpcWebv3 "github.com/cilium/proxy/go/envoy/extensions/filters/http/grpc_web/v3" 10 httpRouterv3 "github.com/cilium/proxy/go/envoy/extensions/filters/http/router/v3" 11 httpConnectionManagerv3 "github.com/cilium/proxy/go/envoy/extensions/filters/network/http_connection_manager/v3" 12 "google.golang.org/protobuf/proto" 13 "google.golang.org/protobuf/types/known/anypb" 14 "google.golang.org/protobuf/types/known/durationpb" 15 "google.golang.org/protobuf/types/known/wrapperspb" 16 17 "github.com/cilium/cilium/pkg/envoy" 18 ciliumv2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2" 19 ) 20 21 type HttpConnectionManagerMutator func(*httpConnectionManagerv3.HttpConnectionManager) *httpConnectionManagerv3.HttpConnectionManager 22 23 // NewHTTPConnectionManager returns a new HTTP connection manager filter with the given name and route. 24 // Mutation functions can be passed to modify the filter based on the caller's needs. 25 func NewHTTPConnectionManager(name, routeName string, mutationFunc ...HttpConnectionManagerMutator) (ciliumv2.XDSResource, error) { 26 connectionManager := &httpConnectionManagerv3.HttpConnectionManager{ 27 StatPrefix: name, 28 RouteSpecifier: &httpConnectionManagerv3.HttpConnectionManager_Rds{ 29 Rds: &httpConnectionManagerv3.Rds{RouteConfigName: routeName}, 30 }, 31 UseRemoteAddress: &wrapperspb.BoolValue{Value: true}, 32 SkipXffAppend: false, 33 HttpFilters: []*httpConnectionManagerv3.HttpFilter{ 34 { 35 Name: "envoy.filters.http.grpc_web", 36 ConfigType: &httpConnectionManagerv3.HttpFilter_TypedConfig{ 37 TypedConfig: toAny(&grpcWebv3.GrpcWeb{}), 38 }, 39 }, 40 { 41 Name: "envoy.filters.http.grpc_stats", 42 ConfigType: &httpConnectionManagerv3.HttpFilter_TypedConfig{ 43 TypedConfig: toAny(&grpcStatsv3.FilterConfig{ 44 EmitFilterState: true, 45 EnableUpstreamStats: true, 46 }), 47 }, 48 }, 49 { 50 Name: "envoy.filters.http.router", 51 ConfigType: &httpConnectionManagerv3.HttpFilter_TypedConfig{ 52 TypedConfig: toAny(&httpRouterv3.Router{}), 53 }, 54 }, 55 }, 56 UpgradeConfigs: []*httpConnectionManagerv3.HttpConnectionManager_UpgradeConfig{ 57 {UpgradeType: "websocket"}, 58 }, 59 CommonHttpProtocolOptions: &envoy_config_core.HttpProtocolOptions{ 60 MaxStreamDuration: &durationpb.Duration{ 61 Seconds: 0, 62 }, 63 }, 64 } 65 66 // Apply mutation functions for customizing the connection manager. 67 for _, fn := range mutationFunc { 68 connectionManager = fn(connectionManager) 69 } 70 71 connectionManagerBytes, err := proto.Marshal(connectionManager) 72 if err != nil { 73 return ciliumv2.XDSResource{}, err 74 } 75 76 return ciliumv2.XDSResource{ 77 Any: &anypb.Any{ 78 TypeUrl: envoy.HttpConnectionManagerTypeURL, 79 Value: connectionManagerBytes, 80 }, 81 }, nil 82 }