中间件组件说明
列出所有支持的中间件组件,这些组件可以集成到Dapr的处理流程中。
下表展示了Dapr支持的中间件组件。了解如何定制处理流程并配置中间件组件。
Table headers to note:
Header | Description | Example |
---|
Status | Component certification status | Alpha Beta Stable
|
Component version | The version of the component | v1 |
Since runtime version | The version of the Dapr runtime when the component status was set or updated | 1.11 |
HTTP
1 - Bearer
通过验证 bearer 令牌,使用 bearer 中间件保护 HTTP 端点
Bearer HTTP 中间件 利用 OpenID Connect 在 Web API 上验证 Bearer Token,无需修改应用程序代码。此设计将身份验证和授权与应用程序逻辑分离,使应用程序管理员可以配置身份验证和授权提供者,而不影响应用程序的正常运行。
组件格式
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: bearer-token
spec:
type: middleware.http.bearer
version: v1
metadata:
- name: audience
value: "<您的令牌受众,例如应用程序的客户端 ID>"
- name: issuer
value: "<您的令牌发行者,例如 'https://accounts.google.com'>"
# 可选项
- name: jwksURL
value: "<JWKS URL,例如 'https://accounts.google.com/.well-known/openid-configuration'>"
规格元数据字段
字段 | 必需 | 详情 | 示例 |
---|
audience | Y | 令牌中预期的受众,通常是您的应用程序的客户端 ID,由 OpenID Connect 平台提供。 | |
issuer | Y | 令牌发行者,即令牌中发行者声明的预期值。 | "https://accounts.google.com" |
jwksURL | N | JWKS(包含用于验证令牌的公钥的 JWK 集)的地址。如果未设置,将尝试从 OpenID 配置文档 <issuer>/.well-known/openid-configuration 中获取 URL。 | "https://accounts.google.com/.well-known/openid-configuration" |
issuer
的常见值包括:
- Auth0:
https://{domain}
,其中 {domain}
是您的 Auth0 应用程序的域名 - Microsoft Entra ID:
https://login.microsoftonline.com/{tenant}/v2.0
,其中 {tenant}
是您的应用程序的租户 ID,格式为 UUID - Google:
https://accounts.google.com
- Salesforce (Force.com):
https://login.salesforce.com
Dapr 配置
要应用此中间件,必须在 配置 中进行引用。请参阅 中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: bearer-token
type: middleware.http.bearer
相关链接
2 - OAuth2
使用OAuth2中间件来保护HTTP端点
OAuth2 HTTP中间件在Web API上启用OAuth2授权码流程,无需修改应用程序代码。这种设计将身份验证和授权问题与应用程序分离开来,使应用程序操作员可以独立采用和配置身份验证/授权提供者,而不影响应用程序的代码。
组件格式
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: oauth2
spec:
type: middleware.http.oauth2
version: v1
metadata:
- name: clientId
value: "<your client ID>"
- name: clientSecret
value: "<your client secret>"
- name: scopes
value: "https://www.googleapis.com/auth/userinfo.email"
- name: authURL
value: "https://accounts.google.com/o/oauth2/v2/auth"
- name: tokenURL
value: "https://accounts.google.com/o/oauth2/token"
- name: redirectURL
value: "http://dummy.com"
- name: authHeaderName
value: "authorization"
- name: forceHTTPS
value: "false"
警告
上述示例中使用了明文字符串来表示secret。建议使用secret存储来安全地存储这些secret,具体方法请参见
此处。
规范元数据字段
字段 | 详情 | 示例 |
---|
clientId | 您的应用程序的客户端ID,是在启用OAuth的平台上创建的凭据的一部分 | "your-client-id" |
clientSecret | 您的应用程序的客户端secret,是在启用OAuth的平台上创建的凭据的一部分 | "your-client-secret" |
scopes | 空格分隔的、区分大小写的范围字符串列表,通常用于应用程序中的授权 | "https://www.googleapis.com/auth/userinfo.email" |
authURL | OAuth2授权服务器的端点 | "https://accounts.google.com/o/oauth2/v2/auth" |
tokenURL | 客户端通过提供其授权授予或刷新令牌来获取访问令牌的端点 | "https://accounts.google.com/o/oauth2/token" |
redirectURL | 用户认证后授权服务器应重定向到的Web应用程序的URL | "https://myapp.com" |
authHeaderName | 转发到应用程序的授权头名称 | "authorization" |
forceHTTPS | 如果为true,则强制使用TLS/SSL | "true" ,"false" |
Dapr配置
要应用中间件,必须在配置中引用。请参阅中间件处理管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: oauth2
type: middleware.http.oauth2
相关链接
3 - OAuth2 客户端凭证
使用 OAuth2 客户端凭证中间件保护 HTTP 端点
OAuth2 客户端凭证的 HTTP 中间件可以在 Web API 上启用 OAuth2 客户端凭证流程,而无需对应用程序进行任何修改。这种设计将身份验证和授权与应用程序逻辑分离,使得应用程序的操作员可以独立于应用程序代码来选择和配置身份验证/授权提供者。
组件格式
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: oauth2clientcredentials
spec:
type: middleware.http.oauth2clientcredentials
version: v1
metadata:
- name: clientId
value: "<your client ID>"
- name: clientSecret
value: "<your client secret>"
- name: scopes
value: "https://www.googleapis.com/auth/userinfo.email"
- name: tokenURL
value: "https://accounts.google.com/o/oauth2/token"
- name: headerName
value: "authorization"
警告
上述示例中使用了明文字符串来表示 secret。建议使用 secret 存储来安全地存储这些敏感信息,具体方法请参见
这里。
规范元数据字段
字段 | 详情 | 示例 |
---|
clientId | 您的应用程序的客户端 ID,是由支持 OAuth 的平台生成的凭证的一部分 | |
clientSecret | 您的应用程序的客户端 secret,是由支持 OAuth 的平台生成的凭证的一部分 | |
scopes | 空格分隔的、区分大小写的 scopes 字符串列表,通常用于定义应用程序的授权范围 | "https://www.googleapis.com/auth/userinfo.email" |
tokenURL | 客户端通过提供授权授予或刷新令牌来获取访问令牌的端点 | "https://accounts.google.com/o/oauth2/token" |
headerName | 转发到您的应用程序的授权头名称 | "authorization" |
endpointParamsQuery | 指定请求令牌端点的附加参数 | true |
authStyle | 可选地指定端点希望客户端 ID 和客户端 secret 发送的方式。请参阅下表中的可能值 | 0 |
authStyle
的可能值
值 | 含义 |
---|
1 | 在 POST 请求体中以 application/x-www-form-urlencoded 参数的形式发送 “client_id” 和 “client_secret”。 |
2 | 使用 HTTP 基本授权方式发送 “client_id” 和 “client_secret”。这是 OAuth2 RFC 6749 第 2.3.1 节 中描述的可选方式。 |
0 | 自动检测提供者期望的身份验证方式,通过尝试两种方式并缓存成功的方式以备将来使用。 |
Dapr 配置
要应用中间件,必须在 配置中引用。请参阅 中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: oauth2clientcredentials
type: middleware.http.oauth2clientcredentials
相关链接
4 - 应用 Open Policy Agent (OPA) 策略
通过中间件对传入请求应用 Open Policy Agent (OPA) 策略
Open Policy Agent (OPA) HTTP 中间件 用于对传入的 Dapr HTTP 请求应用 OPA 策略。这可以用于在应用程序端点上实施可重用的授权策略。
组件格式
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: my-policy
spec:
type: middleware.http.opa
version: v1
metadata:
# `includedHeaders` 是一个不区分大小写的逗号分隔的头集合,包含在请求输入中。
# 默认情况下,请求头不会传递给策略。需要明确指定以接收传入请求头。
- name: includedHeaders
value: "x-my-custom-header, x-jwt-header"
# `defaultStatus` 是拒绝响应时返回的状态码
- name: defaultStatus
value: 403
# `readBody` 控制中间件是否在内存中读取整个请求体并使其可用于策略决策。
- name: readBody
value: "false"
# `rego` 是要评估的 open policy agent 策略。必需
# 策略包必须命名为 http,策略必须设置 data.http.allow
- name: rego
value: |
package http
default allow = true
# Allow 也可以是一个对象并包含其他属性
# 例如,如果您想在策略失败时重定向,可以将状态码设置为 301 并在响应中设置位置头:
allow = {
"status_code": 301,
"additional_headers": {
"location": "https://my.site/authorize"
}
} {
not jwt.payload["my-claim"]
}
# 您还可以允许请求并向其添加其他头:
allow = {
"allow": true,
"additional_headers": {
"x-my-claim": my_claim
}
} {
my_claim := jwt.payload["my-claim"]
}
jwt = { "payload": payload } {
auth_header := input.request.headers["Authorization"]
[_, jwt] := split(auth_header, " ")
[_, payload, _] := io.jwt.decode(jwt)
}
您可以使用 官方 OPA playground 来原型和实验策略。例如,您可以在此处找到上面的示例策略。
规格元数据字段
字段 | 详情 | 示例 |
---|
rego | Rego 策略语言 | 见上文 |
defaultStatus | 拒绝响应时返回的状态码 | "https://accounts.google.com" ,"https://login.salesforce.com" |
readBody | 如果设置为 true (默认值),则每个请求的主体将完全在内存中读取,并可用于进行策略决策。如果您的策略不依赖于检查请求体,请考虑禁用此功能(设置为 false )以显著提高性能。 | "false" |
includedHeaders | 一个不区分大小写的逗号分隔的头集合,包含在请求输入中。默认情况下,请求头不会传递给策略。需要明确指定以接收传入请求头。 | "x-my-custom-header, x-jwt-header" |
Dapr 配置
要应用中间件,必须在 配置 中引用。请参阅 中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: my-policy
type: middleware.http.opa
输入
此中间件提供一个 HTTPRequest
作为输入。
HTTPRequest
HTTPRequest
输入包含有关传入 HTTP 请求的所有相关信息。
type Input struct {
request HTTPRequest
}
type HTTPRequest struct {
// 请求方法(例如 GET,POST 等)
method string
// 原始请求路径(例如 "/v2/my-path/")
path string
// 路径分解为部分以便于使用(例如 ["v2", "my-path"])
path_parts string[]
// 原始查询字符串(例如 "?a=1&b=2")
raw_query string
// 查询分解为键及其值
query map[string][]string
// 请求头
// 注意:默认情况下,不包括任何头。您必须指定要通过 `spec.metadata.includedHeaders` 接收的头(见上文)
headers map[string]string
// 请求方案(例如 http, https)
scheme string
// 请求体(例如 http, https)
body string
}
结果
策略必须设置 data.http.allow
,可以是 boolean
值,也可以是具有 allow
布尔属性的 object
值。true
的 allow
将允许请求,而 false
值将拒绝请求,并使用 defaultStatus
指定的状态。以下策略,带有默认值,演示了对所有请求的 403 - Forbidden
:
package http
default allow = false
这与以下相同:
package http
default allow = {
"allow": false
}
更改拒绝响应状态码
拒绝请求时,您可以覆盖返回的状态码。例如,如果您想返回 401
而不是 403
,可以执行以下操作:
package http
default allow = {
"allow": false,
"status_code": 401
}
添加响应头
要重定向,请添加头并将 status_code
设置为返回结果:
package http
default allow = {
"allow": false,
"status_code": 301,
"additional_headers": {
"Location": "https://my.redirect.site"
}
}
添加请求头
您还可以在允许的请求上设置其他头:
package http
default allow = false
allow = { "allow": true, "additional_headers": { "X-JWT-Payload": payload } } {
not input.path[0] == "forbidden"
// 其中 `jwt` 是另一个规则的结果
payload := base64.encode(json.marshal(jwt.payload))
}
结果结构
type Result bool
// 或
type Result struct {
// 是否允许或拒绝传入请求
allow bool
// 覆盖拒绝响应状态码;可选
status_code int
// 设置允许请求或拒绝响应的头;可选
additional_headers map[string]string
}
相关链接
5 - RouterChecker HTTP 请求路由检查
使用 routerchecker 中间件阻止无效的 HTTP 请求路由
RouterChecker HTTP 中间件 组件通过正则表达式来验证 HTTP 请求路由的有效性,防止无效路由进入 Dapr 集群。RouterChecker 组件能够过滤掉不良请求,从而减少遥测和日志数据中的噪音。
组件格式
RouterChecker 对传入的 HTTP 请求应用一组规则。您可以在组件的元数据中使用正则表达式来定义这些规则。在以下示例中,HTTP 请求 RouterChecker 被设置为验证所有请求路径是否符合 ^[A-Za-z0-9/._-]+$
这个正则表达式。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: routerchecker
spec:
type: middleware.http.routerchecker
version: v1
metadata:
- name: rule
value: "^[A-Za-z0-9/._-]+$"
在此示例中,上述定义将导致以下请求被通过或拒绝:
PASS /v1.0/invoke/demo/method/method
PASS /v1.0/invoke/demo.default/method/method
PASS /v1.0/invoke/demo.default/method/01
PASS /v1.0/invoke/demo.default/method/METHOD
PASS /v1.0/invoke/demo.default/method/user/info
PASS /v1.0/invoke/demo.default/method/user_info
PASS /v1.0/invoke/demo.default/method/user-info
FAIL /v1.0/invoke/demo.default/method/cat password
FAIL /v1.0/invoke/demo.default/method/" AND 4210=4210 limit 1
FAIL /v1.0/invoke/demo.default/method/"$(curl
规格元数据字段
字段 | 详情 | 示例 |
---|
rule | HTTP 请求 RouterChecker 使用的正则表达式 | ^[A-Za-z0-9/._-]+$ |
Dapr 配置
要应用中间件,必须在配置中引用。请参阅中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: routerchecker
type: middleware.http.routerchecker
相关链接
6 - Sentinel 容错中间件组件
使用 Sentinel 中间件来保证应用程序的可靠性和弹性
Sentinel 是一个强大的容错组件,专注于流量管理,涵盖流量控制、流量整形、并发限制、熔断降级和自适应系统保护等多个领域,以确保微服务的可靠性和弹性。
Sentinel HTTP 中间件 使 Dapr 可以利用 Sentinel 的强大功能来保护您的应用程序。您可以参考 Sentinel Wiki 以获取有关 Sentinel 的更多详细信息。
组件格式
在以下定义中,最大请求数被设定为每秒 10 个:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: sentinel
spec:
type: middleware.http.sentinel
version: v1
metadata:
- name: appName
value: "nodeapp"
- name: logDir
value: "/var/tmp"
- name: flowRules
value: >-
[
{
"resource": "POST:/v1.0/invoke/nodeapp/method/neworder",
"threshold": 10,
"tokenCalculateStrategy": 0,
"controlBehavior": 0
}
]
规格元数据字段
字段 | 详情 | 示例 |
---|
appName | 当前运行服务的名称 | nodeapp |
logDir | 日志目录路径 | /var/tmp/sentinel |
flowRules | Sentinel 流量控制规则的 JSON 数组 | 流量控制规则 |
circuitBreakerRules | Sentinel 熔断器规则的 JSON 数组 | 熔断器规则 |
hotSpotParamRules | Sentinel 热点参数流量控制规则的 JSON 数组 | 热点规则 |
isolationRules | Sentinel 隔离规则的 JSON 数组 | 隔离规则 |
systemRules | Sentinel 系统规则的 JSON 数组 | 系统规则 |
一旦达到限制,请求将返回 HTTP 状态码 429: 请求过多。
请特别注意每个规则定义中的 resource
字段。在 Dapr 中,它遵循以下格式:
POST/GET/PUT/DELETE:Dapr HTTP API 请求路径
所有具体的 HTTP API 信息可以在 [Dapr API 参考]https://v1-16.docs.dapr.io/zh-hans/reference/api/ 中找到。在上述示例配置中,resource
字段被设置为 POST:/v1.0/invoke/nodeapp/method/neworder。
Dapr 配置
要应用中间件,必须在 configuration 中引用。请参阅 中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
spec:
httpPipeline:
handlers:
- name: sentinel
type: middleware.http.sentinel
相关链接
7 - Wasm
在HTTP管道中使用Wasm中间件
WebAssembly是一种安全执行由其他语言编译的代码的方法。运行时会执行WebAssembly模块(Wasm),这些模块通常是带有.wasm
扩展名的二进制文件。
Wasm HTTP中间件允许您使用编译为Wasm二进制文件的自定义逻辑来处理传入请求或提供响应。换句话说,您可以使用未预编译到daprd
二进制文件中的外部文件来扩展Dapr。Dapr嵌入了wazero以在不使用CGO的情况下实现这一点。
Wasm二进制文件可以从URL加载。例如,使用URL file://rewrite.wasm
可以从进程的当前目录加载rewrite.wasm
文件。在Kubernetes环境中,您可以参考如何:将Pod卷挂载到Dapr sidecar来配置可以包含Wasm模块的文件系统挂载。也可以从远程URL获取Wasm二进制文件。在这种情况下,URL必须精确指向一个Wasm二进制文件。例如:
http://example.com/rewrite.wasm
,或https://example.com/rewrite.wasm
。
组件格式
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: wasm
spec:
type: middleware.http.wasm
version: v1
metadata:
- name: url
value: "file://router.wasm"
- guestConfig
value: {"environment":"production"}
规范元数据字段
用户至少需要指定一个实现http-handler的Wasm二进制文件。如何编译将在后面描述。
字段 | 详情 | 必需 | 示例 |
---|
url | 包含要实例化的Wasm二进制文件的资源URL。支持的方案包括file:// 、http:// 和https:// 。file:// URL的路径相对于Dapr进程,除非它以/ 开头。 | true | file://hello.wasm ,https://example.com/hello.wasm |
guestConfig | 传递给Wasm来宾的可选配置。用户可以传递由Wasm代码解析的任意字符串。 | false | environment=production ,{"environment":"production"} |
Dapr配置
要应用中间件,必须在configuration中引用它。请参阅中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: wasm
type: middleware.http.wasm
注意:WebAssembly中间件使用的资源比本地中间件多。这可能导致资源限制比在本地代码中更快达到。生产环境中应控制最大并发。
生成Wasm
此组件允许您使用http-handler应用程序二进制接口(ABI)编译的自定义逻辑来处理传入请求或提供响应。handle_request
函数接收传入请求,并可以根据需要对其进行处理或提供响应。
要编译您的Wasm,您需要使用符合http-handler的来宾SDK(如TinyGo)来编译源代码。
以下是TinyGo中的示例:
package main
import (
"strings"
"github.com/http-wasm/http-wasm-guest-tinygo/handler"
"github.com/http-wasm/http-wasm-guest-tinygo/handler/api"
)
func main() {
handler.HandleRequestFn = handleRequest
}
// handleRequest实现了一个简单的HTTP路由器。
func handleRequest(req api.Request, resp api.Response) (next bool, reqCtx uint32) {
// 如果URI以/host开头,修剪它并分派到下一个处理程序。
if uri := req.GetURI(); strings.HasPrefix(uri, "/host") {
req.SetURI(uri[5:])
next = true // 继续到主机上的下一个处理程序。
return
}
// 提供静态响应
resp.Headers().Set("Content-Type", "text/plain")
resp.Body().WriteString("hello")
return // 跳过下一个处理程序,因为我们已经写了一个响应。
}
如果使用TinyGo,按如下所示编译,并将名为"url"的规范元数据字段设置为输出的位置(例如,file://router.wasm
):
tinygo build -o router.wasm -scheduler=none --no-debug -target=wasi router.go`
Wasm guestConfig
示例
以下是如何使用guestConfig
将配置传递给Wasm的示例。在Wasm代码中,您可以使用来宾SDK中定义的函数handler.Host.GetConfig
来获取配置。在以下示例中,Wasm中间件从组件中定义的JSON配置中解析执行的environment
。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: wasm
spec:
type: middleware.http.wasm
version: v1
metadata:
- name: url
value: "file://router.wasm"
- guestConfig
value: {"environment":"production"}
以下是TinyGo中的示例:
package main
import (
"encoding/json"
"github.com/http-wasm/http-wasm-guest-tinygo/handler"
"github.com/http-wasm/http-wasm-guest-tinygo/handler/api"
)
type Config struct {
Environment string `json:"environment"`
}
func main() {
// 获取配置字节,这是组件中定义的guestConfig的值。
configBytes := handler.Host.GetConfig()
config := Config{}
json.Unmarshal(configBytes, &config)
handler.Host.Log(api.LogLevelInfo, "Config environment: "+config.Environment)
}
相关链接
8 - 将请求体转换为大写
测试您的HTTP管道是否正常工作,使用大写中间件
大写HTTP中间件用于将请求体的内容转换为大写字母。它主要用于测试管道的正常运行,仅在本地开发环境中使用。
组件格式
在以下定义中,该中间件将请求体的内容转换为大写:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: uppercase
spec:
type: middleware.http.uppercase
version: v1
此组件没有可配置的metadata
选项。
Dapr配置
要使用此中间件,必须在配置中进行设置。请参阅中间件管道以获取更多信息。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: uppercase
type: middleware.http.uppercase
相关链接
9 - HTTP 路由别名
通过路由别名中间件将任意 HTTP 路由映射为 Dapr 端点
HTTP 路由别名 中间件 组件允许您将进入 Dapr 的任意 HTTP 路由映射为有效的 Dapr API 端点。
组件格式
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: routeralias
spec:
type: middleware.http.routeralias
version: v1
metadata:
# 包含 JSON 或 YAML 格式的字典字符串
# 字典中的每个键是传入路径,值是映射后的路径
- name: "routes"
value: |
{
"/mall/activity/info": "/v1.0/invoke/srv.default/method/mall/activity/info",
"/hello/activity/{id}/info": "/v1.0/invoke/srv.default/method/hello/activity/info",
"/hello/activity/{id}/user": "/v1.0/invoke/srv.default/method/hello/activity/user"
}
在上面的示例中,传入的 HTTP 请求 /mall/activity/info?id=123
会被映射为 /v1.0/invoke/srv.default/method/mall/activity/info?id=123
。
规格元数据字段
字段 | 详情 | 示例 |
---|
routes | 包含 JSON 或 YAML 格式的字典字符串。字典中的每个键是传入路径,值是映射后的路径。 | 见上例 |
Dapr 配置
要使用中间件,必须在 配置 中进行引用。参见 中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: routeralias
type: middleware.http.routeralias
相关链接
10 - 速率限制
通过速率限制中间件控制每秒请求数量
HTTP中间件速率限制HTTP中间件允许您限制每秒HTTP请求的最大数量。通过速率限制,您可以保护应用程序免受拒绝服务(DoS)攻击的影响。DoS攻击可能由恶意第三方发起,也可能由于软件错误(即所谓的“友军火力”DoS攻击)而发生。
组件格式
在以下定义中,每秒最大请求数被设置为10:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: ratelimit
spec:
type: middleware.http.ratelimit
version: v1
metadata:
- name: maxRequestsPerSecond
value: 10
规格元数据字段
字段 | 详情 | 示例 |
---|
maxRequestsPerSecond | 每秒允许的最大请求数,基于远程IP。 组件通过X-Forwarded-For 和X-Real-IP 头来识别请求者的IP。 | 10 |
一旦达到限制,请求将返回HTTP状态码429: Too Many Requests。
重要
速率限制是在每个Dapr sidecar中独立执行的,而不是在整个集群范围内统一执行。此外,您还可以使用最大并发设置来限制应用程序的请求处理能力,这种方法适用于所有流量,不论远程IP、协议或路径。
Dapr配置
要应用中间件,必须在配置中进行引用。请参阅中间件管道。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: ratelimit
type: middleware.http.ratelimit
相关链接