首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用特使+ Istio限制节俭率

用特使+ Istio限制节俭率
EN

Stack Overflow用户
提问于 2019-10-28 16:32:52
回答 2查看 419关注 0票数 1

我正在尝试添加非常基本的rls1支持,通过允许用户提供外部stacks2作为环境变量来引导。我遇到了一个问题,客户端似乎拒绝了配置。

下面是我的Istio控制平面代码的一个独立的简化版本:

代码语言:javascript
复制
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端点时,当未提供速率消除配置时,代理就会出现并正确配置。一旦我试图添加瑞格配置,它就会完全消失。

我做错了什么?

  1. 定义权限分配api:limit.proto#L9的源代码
  2. 见官方文档:limit.proto
  3. 这里的参考实现:https://github.com/lyft/ratelimit
EN

回答 2

Stack Overflow用户

发布于 2019-10-30 15:55:18

结果,我的GrpcService配置不正确。它丢失了StatPrefix字段。我通过查看特使的日志就能弄清楚这件事。我还能够在代码中检查这一点,方法是运行ratelimitService.Validate(),通过递归验证。

票数 1
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58594844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档