主题
LangSmith 使用 Redis 来支持其队列/缓存操作。默认情况下,LangSmith 自托管版将使用一个内部的 Redis 实例。但是,您可以配置 LangSmith 以使用外部的 Redis 实例。通过配置外部 Redis 实例,您可以更轻松地管理 Redis 实例的备份、扩展和其他运维任务。
要求
- 一个已部署的 Redis 实例,您的 LangSmith 实例需要能够通过网络访问它。我们建议使用托管的 Redis 服务,例如:
- 注意:我们官方仅支持 Redis 版本 >= 5。
- 我们支持独立部署和 Redis 集群。请参阅相应章节获取部署说明。
- 我们支持无身份验证、密码验证和 IAM/工作负载身份 验证。
- 默认情况下,我们建议使用至少具有 2 个 vCPU 和 8GB 内存的实例。但是,实际需求将取决于您的追踪工作负载。我们建议监控您的 Redis 实例并根据需要进行扩展。
独立 Redis
连接字符串
您需要为您的 Redis 实例组装连接字符串。此连接字符串应包含以下信息:
- 主机
- 数据库
- 端口
- URL 参数
其格式如下:
"redis://host:port/db?<url_params>"一个示例连接字符串可能如下所示:
"redis://langsmith-redis:6379/0"注意:如果您的独立 Redis 需要身份验证或 TLS,请直接在连接 URL 中包含这些信息:
- 当 Redis 服务器启用 TLS 时,使用
rediss://。 - 在连接字符串中提供密码。
例如:
text
rediss://langsmith-redis:6380/0?password=foo对于 IAM 身份验证,使用身份作为用户名(无密码):
text
rediss://<iam-identity>@host:6380配置
准备好连接字符串后,您可以配置您的 LangSmith 实例以使用外部 Redis 实例。您可以通过修改 LangSmith Helm Chart 安装的 values 文件或 Docker 安装的 .env 文件来实现。
yaml
redis:
external:
enabled: true
connectionUrl: "您的连接 url"bash
# 在您的 .env 文件中
REDIS_DATABASE_URI="您的连接 url"您也可以将连接 URL 存储在现有的 Kubernetes Secret 中,并在 Helm 值中引用它。
yaml
redis:
external:
enabled: true
# 包含连接 URL 的现有 Secret 的名称
existingSecretName: "my-redis-secret"
# Secret 中存储连接 URL 的键(显示默认值)
connectionUrlSecretKey: "connection_url"yaml
apiVersion: v1
kind: Secret
metadata:
name: my-redis-secret
type: Opaque
stringData:
# 完整的连接 URL,例如,使用 TLS 和密码
connection_url: "rediss://langsmith-redis:6380/0?password=foo"配置完成后,您应该能够重新安装您的 LangSmith 实例。如果一切配置正确,您的 LangSmith 实例现在应该正在使用您的外部 Redis 实例。
Redis 集群
自 LangSmith helm 版本 0.12.25 起,我们正式支持 Redis 集群。
主机名
使用 Redis 集群时,请提供节点主机名和端口的列表。每个节点 URI 必须采用以下形式:
text
redis://hostname:port例如:
text
redis://redis-node-0:6379
redis://redis-node-1:6379
redis://redis-node-2:6379不要在这些 URI 中包含密码,也不要在此处使用 rediss。对于 Redis 集群:
- 通过
redis.external.cluster.password或使用passwordSecretKey通过 Secret 单独提供密码。 - 使用
redis.external.cluster.tlsEnabled: true单独启用 TLS。
配置
连接到外部 Redis 集群时,请在 redis.external.cluster 下配置 Helm 值。您可以:
- 直接在
values.yaml中提供节点 URI 和(可选的)密码。 - 或者引用包含节点 URI 和密码的现有 Kubernetes
Secret。
yaml
redis:
external:
enabled: true
cluster:
enabled: true
# 集群节点 URI 列表。格式:redis://host:port
nodeUris:
- "redis://redis-node-0:6379"
- "redis://redis-node-1:6379"
- "redis://redis-node-2:6379"
# 可选。如果您的集群需要身份验证,请设置密码或使用 Secret(推荐)。
password: "your_redis_password"
# 如果您的集群使用 TLS,请启用此项。
tlsEnabled: trueyaml
redis:
external:
enabled: true
# 包含集群连接详细信息的现有 Secret 的名称
existingSecretName: "my-redis-cluster-secret"
cluster:
enabled: true
# Secret 中的键。此处显示默认值;如果您的 Secret 使用不同的键,请覆盖。
nodeUrisSecretKey: "redis_cluster_node_uris"
passwordSecretKey: "redis_cluster_password"
tlsEnabled: true如果使用现有 Secret,它应包含:
yaml
apiVersion: v1
kind: Secret
metadata:
name: my-redis-cluster-secret
type: Opaque
stringData:
# 节点 URI 的 JSON 数组(作为字符串)
redis_cluster_node_uris: '["redis://redis-node-0:6379","redis://redis-node-1:6379","redis://redis-node-2:6379"]'
# 如果您的集群需要密码,则为可选
redis_cluster_password: "your_redis_password"Redis 的 TLS
使用本节配置 Redis 连接的 TLS。有关挂载内部/公共 CA 以便 LangSmith 信任您的 Redis 服务器证书的信息,请参阅 配置自定义 TLS 证书。
服务器 TLS(单向)
要验证 Redis 服务器证书:
- 使用
config.customCa.secretName和config.customCa.secretKey提供 CA 包。 - 对于独立 Redis,在连接 URL 中使用
rediss://。 - 对于 Redis 集群,设置
redis.external.cluster.tlsEnabled: true。
仅当您的 Redis 服务器使用内部或私有 CA 时,才挂载自定义 CA。公开信任的 CA 不需要此配置。
yaml
config:
customCa:
secretName: "langsmith-custom-ca" # 包含您的 CA 包的 Secret
secretKey: "ca.crt" # Secret 中包含 CA 包的键
redis:
external:
enabled: true
# 使用 rediss://,如果服务器需要,请包含密码
connectionUrl: "rediss://host:6380/0?password=<PASSWORD>"yaml
config:
customCa:
secretName: "langsmith-custom-ca" # 包含您的 CA 包的 Secret
secretKey: "ca.crt" # Secret 中包含 CA 包的键
redis:
external:
enabled: true
cluster:
enabled: true
tlsEnabled: true
nodeUris:
- "redis://redis-node-0:6379"
- "redis://redis-node-1:6379"
- "redis://redis-node-2:6379"
password: "<PASSWORD>"yaml
apiVersion: v1
kind: Secret
metadata:
name: langsmith-custom-ca
type: Opaque
stringData:
ca.crt: |
-----BEGIN CERTIFICATE-----
<ROOT_OR_INTERMEDIATE_CA_CERT_CHAIN>
-----END CERTIFICATE-----带客户端身份验证的相互 TLS (mTLS)
自 LangSmith helm chart 版本 0.12.29 起,我们支持 Redis 客户端的 mTLS。对于 mTLS 中的服务器端身份验证,除了以下客户端证书配置外,还需使用 服务器 TLS 步骤(自定义 CA)。
如果您的 Redis 服务器需要客户端证书身份验证:
- 提供一个包含您的客户端证书和密钥的 Secret。
- 通过
redis.external.clientCert.secretName引用它,并使用certSecretKey和keySecretKey指定密钥。 - 对于独立 Redis,继续在连接 URL 中使用
rediss://。 - 对于 Redis 集群,设置
redis.external.cluster.tlsEnabled: true。
yaml
redis:
external:
enabled: true
clientCert:
secretName: "redis-mtls-secret"
certSecretKey: "tls.crt"
keySecretKey: "tls.key"
# 独立部署示例:
# connectionUrl: "rediss://host:6380/0?password=<PASSWORD>"
# 或者,对于集群:
cluster:
enabled: true
tlsEnabled: true
nodeUris:
- "redis://redis-node-0:6379"
- "redis://redis-node-1:6379"
- "redis://redis-node-2:6379"
password: "<PASSWORD>"yaml
apiVersion: v1
kind: Secret
metadata:
name: redis-mtls-secret
type: Opaque
stringData:
tls.crt: |
-----BEGIN CERTIFICATE-----
<CLIENT_CERT>
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
<CLIENT_KEY>
-----END PRIVATE KEY-----证书卷的 Pod 安全上下文
为 mTLS 挂载的证书卷受文件访问限制保护。为确保所有 LangSmith pod 都能读取证书文件,您必须在 pod 安全上下文中设置 fsGroup: 1000。
您可以通过以下两种方式之一进行配置:
选项 1:使用 commonPodSecurityContext
在顶层设置 fsGroup 以应用于所有 pod:
yaml
commonPodSecurityContext:
fsGroup: 1000选项 2:添加到各个 pod 的安全上下文
如果您需要更精细的控制,请将 fsGroup 单独添加到每个 pod 的安全上下文中。有关完整参考,请参阅 mTLS 配置示例。
IAM 身份验证
自 LangSmith helm chart 版本 0.12.34 起,我们支持 Redis 的 IAM 身份验证。这允许您使用云提供商的工作负载身份而不是静态密码。
IAM 身份验证在独立 Redis 和 Redis 集群配置中都受支持。但是,并非所有云提供商都支持所有 Redis 产品的 IAM 身份验证。请查阅您的云提供商的文档,以验证您的特定 Redis 设置是否支持 IAM(例如,GCP 仅支持 Memorystore 集群的 IAM,不支持独立 Memorystore)。
支持的提供商
| 提供商 | Redis 服务 | 文档 |
|---|---|---|
| AWS | ElastiCache for Redis | IAM 身份验证 |
| GCP | Memorystore for Redis | IAM 身份验证 |
| Azure | Azure Cache for Redis | Microsoft Entra 身份验证 |
先决条件
- 在您的 Kubernetes 集群中配置工作负载身份。请参阅您的云提供商的文档:
- 在您的 Redis 实例上启用 IAM 身份验证,并授予您的工作负载身份访问权限。请参考上面链接的云提供商文档。
- 根据您的云提供商的要求,使用工作负载身份绑定为您的 Kubernetes ServiceAccounts 和 Deployments/Jobs 添加注解。
配置
要启用 IAM 身份验证,请设置 iamAuthProvider 字段并使用兼容 IAM 的连接字符串(身份作为用户名,无密码):
yaml
redis:
external:
enabled: true
existingSecretName: "redis-secret"
iamAuthProvider: "azure" # 或 "gcp" 或 "aws"yaml
apiVersion: v1
kind: Secret
metadata:
name: redis-secret
type: Opaque
stringData:
# IAM 连接 URL - 身份作为用户名,无密码
connection_url: "rediss://<identity>@<host>:6380"带 IAM 身份验证的 Redis 集群
对于带 IAM 身份验证的 Redis 集群,请同时配置集群设置和 IAM 提供商:
yaml
redis:
external:
enabled: true
existingSecretName: "redis-cluster-secret"
iamAuthProvider: "gcp" # 或 "aws" 或 "azure"
cluster:
enabled: true
nodeUrisSecretKey: "redis_cluster_node_uris"
tlsEnabled: true必需的注解
您必须将云提供商工作负载身份所需的所有 ServiceAccount 注解和 pod 标签应用到所有连接到 Redis 的 LangSmith 组件。这包括:
Deployments: backend, queue, platformBackend, hostBackend
以 backend 服务为例(对上面列出的其他服务重复此操作):
yaml
backend:
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<role-name>"
...yaml
backend:
serviceAccount:
annotations:
iam.gke.io/gcp-service-account: "<service-account>@<project>.iam.gserviceaccount.com"
...yaml
backend:
serviceAccount:
annotations:
azure.workload.identity/client-id: "<managed-identity-client-id>"
deployment:
labels:
azure.workload.identity/use: "true"
...有关可配置服务的完整列表及其注解/标签选项,请参阅 Helm 值参考。