Milvus项目TLS安全通信配置指南
概述
在现代分布式系统中,数据传输安全至关重要。Milvus作为一款高性能向量数据库,支持通过TLS(传输层安全协议)实现客户端与服务器之间的安全通信。本文将详细介绍如何在Milvus中配置TLS安全通信,包括证书准备、服务器配置和客户端连接等完整流程。
TLS认证模式
Milvus支持两种TLS认证模式:
-
单向认证:仅服务器向客户端验证身份
- 服务器需要:server.pem和server.key文件
- 客户端需要:server.pem文件
-
双向认证:客户端和服务器互相验证身份
- 服务器需要:server.pem、server.key和ca.pem文件
- 客户端需要:client.pem、client.key和ca.pem文件
证书准备流程
准备工作
确保系统已安装OpenSSL工具:
sudo apt install openssl # Ubuntu/Debian系统
# 或
yum install openssl # CentOS/RHEL系统
创建证书配置文件
- 新建工作目录并创建配置文件:
mkdir cert && cd cert
touch openssl.cnf gen.sh
-
将OpenSSL标准配置复制到
openssl.cnf
文件中(内容较长,参考原文档) -
创建
gen.sh
脚本文件,内容如下:
#!/usr/bin/env sh
# 证书参数配置
Country="CN"
State="Shanghai"
Location="Shanghai"
Organization="milvus"
OrganizationUnit="milvus"
CommonName="localhost"
# 生成CA证书
openssl genpkey -algorithm RSA -out ca.key
openssl req -new -x509 -key ca.key -out ca.pem -days 3650 -subj "/C=$Country/ST=$State/L=$Location/O=$Organization/OU=$OrganizationUnit/CN=$CommonName"
# 生成服务器证书
openssl genpkey -algorithm RSA -out server.key
openssl req -new -nodes -key server.key -out server.csr -days 3650 -subj "/C=$Country/O=$Organization/OU=$OrganizationUnit/CN=$CommonName" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -days 3650 -in server.csr -out server.pem -CA ca.pem -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req
# 生成客户端证书
openssl genpkey -algorithm RSA -out client.key
openssl req -new -nodes -key client.key -out client.csr -days 3650 -subj "/C=$Country/O=$Organization/OU=$OrganizationUnit/CN=$CommonName" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -days 3650 -in client.csr -out client.pem -CA ca.pem -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req
准备证书文件
执行生成脚本:
chmod +x gen.sh
./gen.sh
成功执行后将生成以下文件:
- CA相关:ca.key、ca.pem、ca.srl
- 服务器相关:server.key、server.pem、server.csr
- 客户端相关:client.key、client.pem、client.csr
服务器配置
修改Milvus配置文件config/milvus.yaml
:
tls:
serverPemPath: /path/to/server.pem # 服务器证书路径
serverKeyPath: /path/to/server.key # 服务器私钥路径
caPemPath: /path/to/ca.pem # CA证书路径
common:
security:
tlsMode: 2 # 0:不认证 1:单向认证 2:双向认证
客户端连接示例(Python)
使用Milvus Python SDK建立安全连接:
from pymilvus import connections
# 连接参数
_HOST = '127.0.0.1'
_PORT = '19530'
# 建立TLS连接
connections.connect(
host=_HOST,
port=_PORT,
secure=True,
client_pem_path="cert/client.pem", # 客户端证书
client_key_path="cert/client.key", # 客户端私钥
ca_pem_path="cert/ca.pem", # CA证书
server_name="localhost" # 服务器名称(必须与证书CN一致)
)
# 验证连接
print("当前连接:", connections.list_connections())
最佳实践建议
-
证书管理:
- 定期更新证书(建议不超过1年)
- 保护私钥文件权限(建议设置为600)
- 生产环境建议使用专业CA机构颁发的证书
-
安全配置:
- 生产环境务必使用双向认证(tlsMode=2)
- 禁用不安全的加密套件
- 定期更新OpenSSL版本
-
性能考虑:
- TLS加密会增加约15%的性能开销
- 对于内网安全环境可考虑不使用TLS
-
故障排查:
- 确保证书CN与服务器名称匹配
- 检查证书有效期
- 验证证书链完整性
通过以上配置,您可以确保Milvus集群的通信安全,防止数据在传输过程中被窃听或篡改。根据实际安全需求选择合适的认证模式,并遵循证书管理的最佳实践。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考