服务必须强制启用Sidecar才能使istio速率限制起作用吗?

时间:2020-01-23 07:40:53

标签: istio

执行启用速率限制任务内存配额时,速率限制不起作用。

我正在遵循ratelimit文档。除了演示设置之外,我能看到的一件事是我禁用了Sidecar服务。

在Kubernetes上运行istio 发行istio 1.2.5

apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
  name: quotahandler
  namespace: istio-system
spec:
  compiledAdapter: memquota
  params:
    quotas:
    - name: requestcountquota.instance.istio-system
      maxAmount: 2
      validDuration: 1s
      # The first matching override is applied.
      # A requestcount instance is checked against override dimensions.
---
apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
  name: requestcountquota
  namespace: istio-system
spec:
  compiledTemplate: quota
  params:
    dimensions:
      source: request.headers["x-forwarded-for"] | "unknown"
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpec
metadata:
  name: request-count
  namespace: istio-system
spec:
  rules:
  - quotas:
    - charge: 1
      quota: requestcountquota
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpecBinding
metadata:
  name: request-count
  namespace: istio-system
spec:
  quotaSpecs:
  - name: request-count
    namespace: istio-system
  services:
  - name: my-service
    namespace: default
  #- service: '*'  # Uncomment this to bind *all* services to request-count

---
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: quota
  namespace: istio-system
spec:
  # quota only applies if you are not logged in.
  # match: match(request.headers["cookie"], "user=*") == false
  actions:
  - handler: quotahandler
    instances:
    - requestcountquota

还尝试重新启动飞行员和调音台,但在日志中未发现错误。

是否强制my-service的Pod运行istio边车以限制速率? (我们确实有用于路由的虚拟服务,但没有杂物,因为要允许来自应用程序的外部调用)

1 个答案:

答案 0 :(得分:0)

是的,该服务需要注入特使车辆以允许速率限制。

像乔尔一样,在评论中提到:

Sidecar是启用几乎所有istio功能所必需的,因此是必须的。要启用从应用程序到网状网络外部的呼叫,可以更改出口策略或创建服务条目,此处详细介绍:istio.io/docs/tasks/traffic-management/egress/egress-control

还有我的

如果您的服务不是由istio envoy注入的,则istio不会用于网络通信,因此无法应用速率限制。

根据istio文档:

Istio使创建带有负载的已部署服务网络变得容易 平衡,服务到服务的身份验证,监控等等, 与 few 或服务代码中没有代码更改。您将Istio支持添加到服务中 通过在整个环境中部署特殊的Sidecar代理, 拦截微服务之间的所有网络通信,然后 使用其控制平面功能配置和管理Istio, 其中包括:

  • 用于HTTP,gRPC,WebSocket和TCP流量的自动负载平衡。

  • 通过丰富的路由规则,重试,故障转移和故障注入对流量行为进行细粒度控制。

  • 可插拔的策略层和配置API,支持访问控制,速率限制和配额。

  • 集群中所有流量的自动指标,日志和跟踪,包括集群的入口和出口。

  • 通过基于身份的强大身份验证和授权,确保群集中服务之间的通信安全。

Istio专为可扩展性而设计,可满足各种部署需求 需求。