Istio 可以根据标头等路由流量。 Istio 文档中有 great examples 如何做到这一点。
Istio 还可以验证您的 JWT。 Istio 文档也cover that。
但我似乎找不到让我的 JWT 验证的方法,然后使用在 JWT Json 中找到的用户声明来路由流量。我链接到的示例只希望用户在标题中是纯文本。
如何将 Istio 虚拟服务设置为基于 JWT 中的声明(最好是经过验证的声明)进行路由。
答案 0 :(得分:2)
您可以使用 Istio 授权政策来实现这一点。如果声明或角色不存在,我对 Keycloak 和 Kong 做了类似的事情来限制 API 网关级别的用户流量。
Here 是使用 istio 进行 JWT 身份验证的一个很好的例子:
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: backend
namespace: default
spec:
selector:
matchLabels:
app: backend
jwtRules:
- issuer: "${KEYCLOAK_URL}/auth/realms/istio"
jwksUri: "${KEYCLOAK_URL}/auth/realms/istio/protocol/openid-connect/certs"
---
# To allow only requests with a valid token, create an authorization policy
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: backend
namespace: default
spec:
selector:
matchLabels:
app: backend
action: ALLOW
rules:
- from:
when:
- key: request.auth.claims[preferred_username]
values: ["testuser"]
示例链接:https://istio.io/latest/docs/tasks/security/authorization/authz-jwt/
OIDC 的另一个很好的例子:https://www.jetstack.io/blog/istio-oidc
RBAC 和组列表检查:https://istio.io/v1.4/docs/tasks/security/authorization/rbac-groups/