带 TLS 验证的外部速率限制

查看本文大纲

一旦你配置了外部速率限制服务器,你可能希望确保与速率限制服务的通信安全。TSB 支持指定TLS 或 mTLS参数来确保与外部速率限制服务器的通信的安全性。本文档将向你展示如何通过将 CA 证书添加到速率限制配置中来为外部速率限制服务器配置 TLS 验证。

在开始之前,请确保你已完成以下准备工作:

  • 熟悉 TSB 概念
  • 安装 TSB 环境。你可以使用 TSB 演示 进行快速安装
  • 完成 TSB 使用快速入门。本文假定你已经创建了租户,并熟悉工作空间和配置组。还需要配置 tctl 到你的 TSB 环境。
  • 完成了 设置外部速率限制服务器。本文将继续你在设置外部速率限制服务器中所做的工作。你将在 ext-ratelimit 命名空间中工作,并且应该已经正确配置了带有外部速率限制的 Ingress 网关。

TLS 证书

要启用 Ingress 网关到速率限制服务的 TLS,请确保你拥有一个 TLS 证书。本文假定你已经拥有 TLS 证书,通常包括服务器证书和私钥,以及客户端将使用的 CA 作为根证书。

本文假定以下文件已存在。如果你使用不同的文件名,请相应地更改它们:

文件名 描述
ratelimit.crt 服务器证书
ratelimit.key 证书私钥
ratelimit-ca.crt CA 证书

:::注意 自签名证书 为了示例的目的,你可以选择使用自签名证书。 你可以使用这里显示的脚本生成自签名证书,但请确保根据需要调整输入参数。 :::注意

一旦你拥有证书文件,请使用服务器证书和私钥创建 Kubernetes 密钥对。

kubectl create secret tls -n ext-ratelimit ratelimit-certs \
  --cert=ratelimit.crt \
  --key=ratelimit.key

使用 TLS 证书部署速率限制服务

在本示例中,你将使用 Envoy 速率限制服务。Envoy 代理 sidecar 作为透明代理,将在将请求发送到速率限制服务之前验证并终止 TLS。

创建一个包含以下内容的 Envoy 配置文件,将其命名为 proxy-config-tls.yaml

执行以下命令将配置存储到 Kubernetes 中作为 ConfigMap

kubectl create configmap -n ext-ratelimit ratelimit-proxy \
  --from-file=proxy-config-tls.yaml

你需要使用 Envoy sidecar 部署速率限制服务以终止 TLS。创建一个名为 ratelimit-tls.yaml 的文件,其内容如下。

然后使用 kubectl 应用此文件:

kubectl apply -f ratelimit-tls.yaml

一旦应用了新配置,请确保 ratelimit-tls 服务正常运行。 请注意,如果你遵循了设置外部速率限制服务器的说明,你还将看到 ratelimitredis 服务。

kubectl get pods -n ext-ratelimit

NAME                             READY   STATUS    RESTARTS   AGE
ratelimit-d5c5b64ff-m87dt        1/1     Running   0          2h
ratelimit-tls-568c5cdc69-z82xf   2/2     Running   0          

 89s
redis-7d757c948f-42sxg           1/1     Running   0          2h

在 Ingress 网关中启用速率限制服务器的 TLS 验证

ratelimit-tls 服务现在可以终止 TLS,但是 Ingress 网关也必须配置以验证 TLS 连接。

首先,创建一个名为 ratelimit-caConfigMap 来存储来自 ratelimit-ca.crt 的 CA 信息:

kubectl create configmap -n httpbin ratelimit-ca \
  --from-file=ratelimit-ca.crt

然后将 ratelimit-ca ConfigMap 添加到 Ingress 网关 pod 中。为此,你需要编辑 httpbin-ingress-gateway.yaml 文件 并添加一个读取你在先前步骤中创建的 ConfigMap 的覆盖层,然后将配置挂载到 Ingress 网关部署中。

使用 kubectl 应用以更新现有的 Ingress 网关

kubectl apply -f httpbin-ingress-gateway.yaml

最后,更新 ext-ratelimit-ingress-gateway.yaml 中的 Ingress 网关配置,并启用 TLS 验证:

使用 tctl 应用

tctl apply -f ext-ratelimit-ingress-gateway-tls.yaml

测试

要验证设置是否正常工作,你可以使用与“设置外部速率限制服务器的测试步骤”中显示的相同的测试步骤。