Linkerd 服务配置文件规范详解
服务配置文件为 Linkerd 服务网格提供关于特定服务的附加行为定义,用于精细化控制流量路由、重试策略与失败判定逻辑。
核心结构 服务配置文件必须包含以下两个顶层字段:
- routes:一个
route对象数组,定义不同请求路径的处理规则。 - retryBudget:指定该服务允许的最大重试比例及时间窗口策略。
Route 配置项
每个 route 必须包含以下字段:
| 字段 | 说明 |
|---|---|
name |
路由名称,用于在监控和日志中标识该规则。 |
condition |
请求匹配条件,决定哪些请求被此路由捕获。 |
responseClasses |
(可选)响应分类规则列表,用于标记成功或失败响应。 |
isRetryable |
布尔值,表示该路由的失败请求是否应自动重试。 |
timeout |
请求从发出到完成(含重试)的最大等待时间,单位为秒。 |
请求匹配条件(Condition)
condition 必须精确包含以下任一类型:
| 类型 | 说明 |
|---|---|
pathRegex |
使用正则表达式匹配请求路径。 |
method |
匹配请求方法(如 GET, POST 等)。 |
all |
所有子条件均需满足。 |
any |
至少一个子条件满足即可。 |
not |
条件不成立时才匹配。 |
示例:
condition:
pathRegex: '/users/\d+'
多个条件组合等价于使用 all:
condition:
all:
- method: POST
- pathRegex: '/users/\d+'
复杂组合支持嵌套:
condition:
any:
- all:
- method: POST
- pathRegex: '/users/\d+'
- all:
- not:
method: DELETE
- pathRegex: /config.json
响应分类(Response Class) 用于定义哪些响应被视为失败。
| 字段 | 说明 |
|---|---|
condition |
响应匹配规则,决定响应是否属于该分类。 |
isFailure |
若为 true,则此类响应将触发重试机制。 |
响应匹配规则(Response Match) 与请求匹配类似,仅支持以下一种方式:
| 类型 | 说明 |
|---|---|
status |
匹配状态码范围。 |
all |
所有条件同时满足。 |
any |
至少一个条件满足。 |
not |
不满足条件时匹配。 |
状态码范围(Status Range)示例:
status:
min: 500
max: 599
该配置将匹配所有 5xx 错误。
重试预算(Retry Budget) 控制服务的重试频率,防止过量重试造成雪崩。
| 字段 | 说明 |
|---|---|
retryRatio |
最大重试次数占原始请求的比例(如 0.1 表示最多 10% 的请求可重试)。 |
minRetriesPerSecond |
即使超过比率,也允许最低每秒若干次重试(用于快速恢复)。 |
ttl |
统计周期长度,例如 60s,决定多久内计算一次重试率。 |
配置示例:
retryBudget:
retryRatio: 0.2
minRetriesPerSecond: 2
ttl: 30s
此设置表示:每 30 秒内,最多允许原始请求量的 20% 进行重试,且即使超出比例,每秒仍可至少尝试 2 次。