<span class="nav-link-with-icon">OPA <img src="https://doc.traefik.io/traefik-hub/img/ps-traefik-hub-logo-light.svg" class="menu-icon" alt="Traefik Hub API Gateway"></span>
Traefik Hub 功能
此中间件仅在 Traefik Hub 中提供。了解更多 Traefik Hub 高级功能。
Traefik Hub 提供 Open Policy Agent 中间件,可限制对服务的访问,还可以使用从策略中提取的数据丰富请求头。 OPA 中间件作为 OPA 代理工作。
OPA 版本
此中间件使用 OPA v1.x,并采用兼容 Rego v0 的语法。
完全支持使用 Rego v0 风格编写的策略(例如,不带 if 关键字的 allow { ... })。
配置示例¶
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: opa-allow-jwt-claim
namespace: apps
spec:
plugin:
opa:
policy: |
package example.policies
allow {
[_, encoded] := split(input.headers.Authorization, " ")
[header, payload, signature] = io.jwt.decode(encoded)
payload["email"] == "[email protected]"
}
forwardHeaders:
Group: data.package.grpapiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: opa-deny-json
namespace: apps
spec:
plugin:
opa:
policy: |
package example.policies
default allow = false
json_content {
input.headers["Accept"] == "application/json"
}
allow {
not json_content
}
allow: data.example.policies.allow配置选项¶
| 字段 | 说明 | 默认值 | 必填 |
|---|---|---|---|
policy |
策略文件的路径或内容。 | "" | 否(必须设置 policy 或 bundlePath 其中之一) |
bundlePath |
bundlePath 选项应包含 OPA 策略包的路径。 |
"" | 否(必须设置 policy 或 bundlePath 其中之一) |
allow |
allow 选项设置要计算的表达式,用于决定是否授权请求。 |
"" | 否(必须设置 allow 或 forwardHeaders 其中之一) |
forwardHeaders |
forwardHeaders 选项设置要添加到请求中的 HTTP 头,并使用给定表达式的结果填充它们。 |
{} | 否(必须设置 allow 或 forwardHeaders 其中之一) |
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。
为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。