TSB 支持指定用于保护与外部授权服务器通信的TLS 或 mTLS参数。本文将向你展示如何通过将 CA 证书添加到授权配置来为外部授权服务器配置 TLS 验证。
在开始之前,请确保你:
- 熟悉TSB 概念
- 安装了 TSB 环境。你可以使用TSB 演示进行快速安装
- 完成了TSB 用法快速入门。本文假设你已经创建了租户并熟悉工作空间和配置组。还需要将 tctl 配置到你的 TSB 环境中。
本文中的示例将建立在“在 Ingress Gateways 中配置外部授权”之上。在继续之前,请确保已完成该文档,并注意你将在命名空间 httpbin
上工作。
创建 TLS 证书
为了使 Ingress Gateway 到授权服务的流量启用 TLS,你必须拥有 TLS 证书。本文假设你已经有 TLS 证书,通常包括服务器证书和私钥,以及用于客户端的根证书作为 CA。本文使用以下文件:
authz.crt
作为服务器证书authz.key
作为证书私钥authz-ca.crt
作为 CA 证书
如果你决定使用其他文件名,请在下面的示例中相应地替换它们。
自签名证书
出于示例目的,你可以使用此脚本创建自签名证书。
拥有文件后,使用服务器证书和私钥创建 Kubernetes secret。
kubectl create secret tls -n httpbin opa-certs \
--cert=authz.crt \
--key=authz.key
你还需要 CA 证书来验证 TLS 连接。
创建一个名为 authz-ca
的 ConfigMap
,其中包含 CA 证书:
kubectl create configmap -n httpbin authz-ca \
--from-file=authz-ca.crt
使用 TLS 证书部署授权服务
按照“在 TSB 中安装 Open Policy Agent”中的说明设置带有终止 TLS 的 Sidecar 代理的 OPA 实例。
修改 Ingress Gateway
你需要向 Ingress Gateway 添加 CA 证书以验证 TLS 连接。
创建一个名为 httpbing-ingress-gateway.yaml
的文件,其中包含以下内容。此清单添加了覆盖以读取包含 CA 证书的 authz-ca
的 ConfigMap
到 Ingress Gateway 部署。
apiVersion: install.tetrate.io/v1alpha1
kind: IngressGateway
metadata:
name: httpbin-ingress-gateway
namespace: httpbin
spec:
kubeSpec:
service:
type: LoadBalancer
overlays:
- apiVersion: apps/v1
kind: Deployment
name: httpbin-ingress-gateway
patches:
- path: spec.template.spec.volumes[-1]
value:
name: authz-ca
configMap:
name: authz-ca
- path: spec.template.spec.containers.[name:istio-proxy].volumeMounts[-1]
value:
name: authz-ca
mountPath: /etc/certs
readOnly: true
使用 kubectl 应用:
kubectl apply -f httpbin-ingress-gateway.yaml
然后更新 Ingress Gateway 配置以启用 TLS 验证:
apiVersion: gateway.tsb.tetrate.io/v2
kind: IngressGateway
metadata:
organization: tetrate
name: httpbin-ingress-gateway
group: httpbin
workspace: httpbin
tenant: tetrate
spec:
workloadSelector:
namespace: httpbin
labels:
app: httpbin-ingress-gateway
http:
- name: httpbin
port: 443
hostname: "httpbin.tetrate.com"
tls:
mode: SIMPLE
secretName: httpbin-certs
routing:
rules:
- route:
host: "httpbin/httpbin.httpbin.svc.cluster.local"
port: 8080
authorization:
external:
tls:
mode: SIMPLE
files:
caCertificates: /etc/certs/authz-ca.crt
uri: grpcs://opa.opa.svc.cluster.local:18443
使用 tctl 应用:
tctl apply -f ext-authz-ingress-gateway-tls.yaml
测试
你可以使用与“在 Ingress Gateways 中配置外部授权”中显示的相同测试步骤。