我正在尝试添加非常基本的rls1支持,通过允许用户提供外部stacks2作为环境变量来引导。我遇到了一个问题,客户端似乎拒绝了配置。
下面是我的Istio控制平面代码的一个独立的简化版本:
import (
"github.com/envoyproxy/go-control-plane/envoy/api/v2/core"
"istio.io/istio/pilot/pkg/model"
"istio.io/istio/pilot/pkg/networking/util"
ratelimit "github.com/envoyproxy/go-control-plane/envoy/config/ratelimit/v2"
thrift_proxy "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1"
thrift_ratelimit "github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/rate_limit/v2alpha1"
)
// thriftListenerOpts are options for a Thrift listener
type thriftListenerOpts struct {
// stat prefix for the thrift connection manager
// DO not set this field. Will be overridden by buildCompleteFilterChain
statPrefix string
transport int
protocol int
routeConfig *thrift_proxy.RouteConfiguration
}
func buildRatelimtedThriftProxy(node *model.Proxy, thriftOpts *thriftListenerOpts, ratelimitServiceUri string) *thrift_proxy.ThriftProxy {
var ratelimitService *thrift_ratelimit.RateLimit
var ratelimitFilter *thrift_proxy.ThriftFilter
var proxy *thrift_proxy.ThriftProxy
proxy = &thrift_proxy.ThriftProxy{
StatPrefix: thriftOpts.statPrefix,
Transport: thrift_proxy.HEADER,
Protocol: thrift_proxy.BINARY,
RouteConfig: thriftOpts.routeConfig,
}
ratelimitFilter = &thrift_proxy.ThriftFilter{
Name: "config.filter.thrift.rate_limit.v2alpha1.RateLimit",
}
ratelimitService = &thrift_ratelimit.RateLimit{
RateLimitService: &ratelimit.RateLimitServiceConfig{
GrpcService: &core.GrpcService{
TargetSpecifier: &core.GrpcService_GoogleGrpc_{
GoogleGrpc: &core.GrpcService_GoogleGrpc{
TargetUri: ratelimitServiceUri,
},
},
},
},
}
if util.IsXDSMarshalingToAnyEnabled(node) {
ratelimitFilter.ConfigType = &thrift_proxy.ThriftFilter_TypedConfig{TypedConfig: util.MessageToAny(ratelimitService)}
} else {
ratelimitFilter.ConfigType = &thrift_proxy.ThriftFilter_Config{Config: util.MessageToStruct(ratelimitService)}
}
proxy.ThriftFilters = append(proxy.ThriftFilters, ratelimitFilter)
return proxy
}当检查特使的管理接口的/config_dump端点时,当未提供速率消除配置时,代理就会出现并正确配置。一旦我试图添加瑞格配置,它就会完全消失。
我做错了什么?
发布于 2019-10-30 15:55:18
结果,我的GrpcService配置不正确。它丢失了StatPrefix字段。我通过查看特使的日志就能弄清楚这件事。我还能够在代码中检查这一点,方法是运行ratelimitService.Validate(),通过递归验证。
发布于 2021-01-07 02:41:14
在Istio中,支持Th裂缝和其他层-7协议的内置协议是有限的,或者没有。如果您想要已经在艾拉基端得到支持的全部功能,请考虑EnvoyProxy。Aeraki可以在Istio服务网格中帮助支持Thrift或其他第7层协议,包括流量管理,例如基于版本的路由和流量分割,以及服务度量。
演示:http://aeraki.zhaohuabing.com:3000/d/pgz7wp-Gz/aeraki-demo?orgId=1&refresh=10s&kiosk https://www.youtube.com/watch?v=vrjp-Yg3Leg
https://stackoverflow.com/questions/58594844
复制相似问题