跳到正文
Træfɪk

<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.grp
apiVersion: 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 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证