我正在尝试在istio中使用速率限制(我已经和特使一起做过了,但项目经理希望我这样做)。我的配置基于istio的教程。我尝试了一些不同的东西,但都不能让它工作,我甚至不知道如何调试它。Kiali并没有给出任何关于配额,规则,...我的目标是阻止最多2个请求每XX秒的流量到一个服务。如果您想尝试一下,可以在这里找到我的代码:https://github.com/hagakure/istio_rating。
我做的第一步是: istioctl install --设置meshConfig.disablePolicyChecks=false --按照istio网站上的说明设置values.pilot.policy.enabled=true
然后添加一些yaml配置:
我的服务:
apiVersion: v1
kind: Service
metadata:
name: hello-world-svc
namespace: rate-limit
spec:
selector:
app: hello-world
ports:
- protocol: TCP
port: 80
targetPort: 80由Istio曝光:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: hello-world-gateway
namespace: rate-limit
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http-web
protocol: HTTP
hosts:
- '*'
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: hello-world-vs
namespace: rate-limit
spec:
hosts:
- "*"
gateways:
- hello-world-gateway
http:
- route:
- destination:
port:
number: 80
host: hello-world-svc.rate-limit.svc.cluster.local我的istio限速配置:
apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
name: requestcount
namespace: rate-limit
spec:
compiledTemplate: quota
params:
dimensions:
destination: destination.labels["app"] | destination.service.host | "unknown"
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpec
metadata:
name: quota
namespace: rate-limit
spec:
rules:
- quotas:
- quota: requestcount.instance.rate-limit
charge: 1
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpecBinding
metadata:
name: quota-binding
namespace: rate-limit
spec:
quotaSpecs:
- name: quota
namespace: rate-limit
services:
- service: '*'
---
apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
name: quotahandler
namespace: rate-limit
spec:
compiledAdapter: redisquota
params:
redisServerUrl: localhost:6379
connectionPoolSize: 10
quotas:
- name: requestcount.instance.rate-limit
maxAmount: 2
validDuration: 30s
---
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
name: quota-rule
namespace: rate-limit
spec:
actions:
- handler: quotahandler.handler.rate-limit
instances:
- requestcount.instance.rate-limit但是没有附加任何东西,我可以想要多少卷曲就卷曲多少,没有问题:'(
发布于 2020-07-28 18:33:05
1.6.2我知道它已经被弃用了,但它仍然可以使用,不是吗?
正如在documentation中提到的
混音器策略在Istio 1.5中已弃用,不建议用于生产。
考虑使用Envoy native rate limiting而不是混音器速率限制。Istio将通过Istio扩展API添加对本机速率限制API的支持。
据我所知,当你安装istio时,混音器已经不存在了,documentation说
如果您依赖特定的混音器功能,如进程外适配器,则可以重新启用混音器。Mixer将继续接收错误修复和安全修复,直到Istio 1.7。
但是我找不到合适的文档来说明如何做到这一点。
当混音器被弃用时,有关于速率限制的旧github issue。
我已经和特使一起做过了,但是项目经理想让我试一下
有一个带有特使过滤器速率限制的github issue示例,如上面的问题和文档中所述,现在应该使用它,而不是istio文档中废弃的速率限制。所以我建议你和你的项目经理谈谈这件事。这实际上是正确的方法。
关于的问题,如果你使用旧版本的istio和mixer,或者你以某种方式在新版本上启用了它,可能会发生这个问题。
看看这个github issue。
您提到的文档中的命令存在一些问题
istioctl install --set meshConfig.disablePolicyChecks=false --set values.pilot.policy.enabled=true 相反,您应该使用
istioctl install --set values.pilot.policy.enabled=true --set values.global.policyCheckFailOpen=true或
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
values:
pilot:
policy:
enabled: true
global:
policyCheckFailOpen: true希望这些信息对你有用。
https://stackoverflow.com/questions/63128010
复制相似问题