以下是在k8s 1.20.15上安装istio,并实现对应用进行限流的步骤:

  1. 安装istio

可以使用以下命令安装istio:

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.11.1
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo
  1. 部署应用

在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
  1. 配置限流

使用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的响应。

  1. 应用限流规则

将这个yaml应用到k8s集群中:

kubectl apply -f my-app-limits.yaml

现在,当应用收到超过100个请求时,它会返回429响应,从而实现了限流

k8s 12015 istio 安装实现对应用进行限流QPS限制为100

原文地址: http://www.cveoy.top/t/topic/gInb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录