k8s 12015 istio 安装实现对应用进行限流QPS限制为100
以下是在k8s 1.20.15上安装istio,并实现对应用进行限流的步骤:
- 安装istio
可以使用以下命令安装istio:
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.11.1
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo
- 部署应用
在k8s集群上部署一个简单的应用,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-image:v1
ports:
- containerPort: 80
- 配置限流
使用istio的流量管理功能来配置限流。可以使用以下yaml来配置一个限流规则:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: my-app-limits
spec:
workloadSelector:
labels:
app: my-app
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_INBOUND
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.lua
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inlineCode: |
function envoy_on_request(request_handle)
local headers = request_handle:headers()
local qps = tonumber(headers:get(":authority")) or 0
if qps > 100 then
request_handle:respond(
{[":status"] = "429", ["content-type"] = "text/plain"},
"Too many requests\n"
)
end
end
这个yaml定义了一个EnvoyFilter,它会在my-app这个workload的sidecar中添加一个名为envoy.filters.http.lua的filter。这个filter会检查请求头中的":authority"字段,如果它的值超过了100,就会返回一个429 Too Many Requests的响应。
- 应用限流规则
将这个yaml应用到k8s集群中:
kubectl apply -f my-app-limits.yaml
现在,当应用收到超过100个请求时,它会返回429响应,从而实现了限流
原文地址: http://www.cveoy.top/t/topic/gInb 著作权归作者所有。请勿转载和采集!