in grpc-xds/control-plane-go/pkg/xds/lds/http_connection_manager.go [38:98]
func createHTTPConnectionManagerForSocketListener(routeConfigurationName string, statPrefix string, enableRBAC bool) (*http_connection_managerv3.HttpConnectionManager, error) {
routerFilterConfig, err := anypb.New(&routerv3.Router{})
if err != nil {
return nil, fmt.Errorf("could not marshall Router HTTP filter into Any instance: %w", err)
}
httpConnectionManager := http_connection_managerv3.HttpConnectionManager{
CodecType: http_connection_managerv3.HttpConnectionManager_AUTO,
StatPrefix: statPrefix,
HttpFilters: []*http_connection_managerv3.HttpFilter{
{
// Router must be the last HTTP filter.
Name: envoyFilterHTTPRouterName,
ConfigType: &http_connection_managerv3.HttpFilter_TypedConfig{
TypedConfig: routerFilterConfig,
},
},
},
RouteSpecifier: &http_connection_managerv3.HttpConnectionManager_Rds{
Rds: &http_connection_managerv3.Rds{
ConfigSource: &corev3.ConfigSource{
ConfigSourceSpecifier: &corev3.ConfigSource_Ads{
Ads: &corev3.AggregatedConfigSource{},
},
ResourceApiVersion: corev3.ApiVersion_V3,
},
RouteConfigName: routeConfigurationName,
},
},
ForwardClientCertDetails: http_connection_managerv3.HttpConnectionManager_APPEND_FORWARD,
SetCurrentClientCertDetails: &http_connection_managerv3.HttpConnectionManager_SetCurrentClientCertDetails{
Subject: wrapperspb.Bool(true),
Dns: true,
Uri: true,
},
UpgradeConfigs: []*http_connection_managerv3.HttpConnectionManager_UpgradeConfig{
{
UpgradeType: "websocket",
},
},
}
if enableRBAC {
rbacFilterTypedConfig, err := anypb.New(&rbacfilterv3.RBAC{
Rules: &rbacv3.RBAC{}, // Present and empty `Rules` mean DENY all. Override per route.
})
if err != nil {
return nil, fmt.Errorf("could not marshall RBAC HTTP filter typedConfig into Any instance: %w", err)
}
// Prepend RBAC HTTP filter. Not append, as Router must be the last HTTP filter.
httpConnectionManager.HttpFilters = append([]*http_connection_managerv3.HttpFilter{
{
Name: EnvoyFilterHTTPRBACName,
ConfigType: &http_connection_managerv3.HttpFilter_TypedConfig{
TypedConfig: rbacFilterTypedConfig,
},
},
}, httpConnectionManager.HttpFilters...)
}
return &httpConnectionManager, nil
}