TSB 提供了授权功能,用于授权来自公共网络的请求。本文将描述如何使用 Open Policy Agent (OPA) 配置 Tier-1 网关授权。
在开始之前,请确保你:
- 熟悉TSB 概念。
- 已完成了 Tier-1 网关路由到 Tier-2 网关,并在 TSB 中已配置了httpbin。
- 创建了一个租户,并了解工作空间和配置组。
- 针对你的 TSB 环境配置了
tctl
。
以下图示展示了在 Tier-1 网关中使用 OPA 的请求/响应流程。来到 Tier-1 网关的请求将由 OPA 检查。如果请求被视为未经授权,则请求将被拒绝并返回 403(禁止)响应,否则它们将被发送到 Tier-2 网关。
部署 httpbin
服务
按照本文中的说明创建 httpbin
服务,并确保该服务在 httpbin.tetrate.com
上公开。
配置 OPA
在此示例中,你将部署 OPA 作为其自己独立的服务。如果尚未这样做,请为 OPA 服务创建一个命名空间:
kubectl create namespace opa
按照OPA 文档中的说明创建使用基本身份验证的 OPA 策略,并在 opa
命名空间中部署 OPA 服务和代理。
kubectl apply -f opa.yaml
然后更新你的 Tier-1 网关配置以使用 OpenAPI 规范,将以下部分添加到 Tier-1 网关,并使用 tctl 应用它们:
apiVersion: gateway.tsb.tetrate.io/v2
kind: Tier1Gateway
metadata:
organization: tetrate
tenant: tetrate
workspace: tier1
group: tier1
name: tier1gw
spec:
workloadSelector:
namespace: tier1
labels:
app: tier1gw
istio: ingressgateway
externalServers:
- name: httpbin
hostname: httpbin.tetrate.com
port: 443
tls:
mode: SIMPLE
secretName: tier1-cert
clusters:
- labels:
network: tier2
authorization:
external:
uri: grpc://opa.opa.svc.cluster.local:9191
测试
你可以按照“在 Ingress Gateways 中配置外部授权”中的说明进行外部授权测试,但需要获取 Tier-1 网关地址而不是 Ingress 网关地址。
要获取 Tier-1 网关地址,请执行以下命令:
kubectl -n tier1 get service tier1-gateway \
-o jsonpath='{.status.loadBalancer.ingress[0].ip}'
然后按照说明操作,但请将 gateway-ip
的值替换为 Tier-1 网关的地址。