☰
OpenStack Kolla-Ansible部署Swift文件存储对接Ceph RadosGW:Proxmox场景下的TaoToken统一Key配置与验证
2026/10/12 3:05:45 网站建设 项目流程

1. Proxmox 上 Kolla-Ansible 部署 Swift 对接 RadosGW 的真实痛点

在 Proxmox VE 里用 Kolla-Ansible 部署 OpenStack,再把 Swift 文件存储接到 Ceph RadosGW 上,这套链路听起来顺,实际动手时坑集中在两个地方:一是 Ceph 的ceph.conf里 Keystone 认证参数在 Octopus 到 Pacific 之间从空格键名改成了下划线键名,网上大量教程还停留在旧写法;二是 OpenStack 侧、Ceph 侧、客户端侧各自要维护一套认证信息,Token、Key、Endpoint 散落在不同文件里,改一次配置要翻三四个地方。

这篇要解决的就是这两件事。核心检索词先摆出来:Kolla-Ansible 部署 Swift 对接 Ceph RadosGW,本质上是让 RadosGW 提供与 Swift 兼容的对象存储 API,再由 Keystone 统一做身份认证,Kolla-Ansible 负责把 OpenStack 这边的 HAProxy、Endpoint、Keystone 配置全部铺好。适合已经在 Proxmox 上跑通了 Kolla-Ansible 基础部署、Ceph 集群也正常、现在想把对象存储这一环补齐的人。

需要先明确一个认知:所谓「Swift 对接 RadosGW」,并不是真的部署了一个 Swift 服务,而是把 Swift 的 API 入口重定向到 RadosGW。RadosGW 本身提供了和 Swift 一致的 API,所以只要在 Kolla-Ansible 里开启enable_ceph_rgw,再把 RadosGW 主机注册进去,HAProxy 就会把radosgw_back后端指过去,客户端用swift命令访问时,实际打到的是 RadosGW。

我试过在 Proxmox 三节点环境里反复重建这套链路,最耗时间的不是部署本身,而是认证参数的版本差异和 Token 的传递。下面按可复现的顺序拆开讲,每一步都给到能直接复制的配置片段。

在进入具体配置前,先把多组件认证分散的问题收拢一下。OpenStack 侧有 Keystone 的 admin Token,Ceph 侧有 RadosGW 的 Keystone 认证参数,客户端侧有OS_AUTH_TOKEN和OS_STORAGE_URL。这些如果各自手工维护,重建一次环境就要重新对齐一遍。用一个统一的 API Key 通道来管理这些凭据的获取和轮换,能省掉大量对不上的排查时间。TaoToken 在这里的角色就是提供统一的 Key 与 API 通道,把模型对话、Coding Plan、控制台、API Keys 这些入口收敛到一处,配置片段和验证请求都可以基于它来组织。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。

2. TaoToken 统一 Key 前置配置与 Kolla-Ansible globals.yml 关键参数

这一节先把 TaoToken 侧的 Key 准备好,再落到 Kolla-Ansible 的globals.yml。顺序不能反,因为后面验证请求要用到统一的 Key 和 Base URL。

2.1 TaoToken 控制台获取统一 Key

进入控制台创建 API Key,路径是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。创建完成后拿到形如sk-开头的 Key,这个 Key 就是后续所有验证请求的统一凭据。API Keys 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,可以在这里做轮换和吊销。

如果你还要在部署机上调模型做辅助排查,模型对话入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,长期跑编码或 Agent 任务用 Coding Plan,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。

2.2 Kolla-Ansible globals.yml 启用 RadosGW

在部署机的/etc/kolla/globals.yml里,找到 Ceph 相关段落,开启 RadosGW 集成:

# /etc/kolla/globals.yml enable_ceph_rgw: "yes" ceph_rgw_hosts: - host: rgw01 ip: 10.10.1.51 port: 7480

host名字随意,不需要 DNS 解析,但ip必须填 RadosGW 实际监听地址。port7480 是 RadosGW 默认端口,对应rgw_frontends属性。这里如果端口写错,后面 HAProxy 的radosgw_back会一直红。

2.3 Ceph 侧 ceph.conf 的 Keystone 认证参数

这是版本差异最容易踩的地方。Pacific 版本之后,键名从空格形式改成下划线形式。在 Proxmox 节点的/etc/ceph/ceph.conf里,[client.radosgw.pve1]段落下新增:

[client.radosgw.pve1] host = pve1 keyring = /etc/pve/priv/ceph.client.radosgw.keyring rgw_keystone_url = 10.10.1.250:5000 rgw_keystone_api_version = 3 rgw_keystone_admin_domain = Default rgw_keystone_admin_project = admin rgw_keystone_admin_token = <你的Keystone admin token>

注意rgw_keystone_api_version = 3,网上很多教程还在用 V2,V3 才是当前 Keystone 的默认。rgw_keystone_admin_token的值来自下一步swift auth导出的OS_AUTH_TOKEN。改完保存,重启 RadosGW:

systemctl restart radosgw

2.4 获取并写入 Keystone admin token

在部署机激活 Python 虚拟环境和 admin 授权文件,安装 swiftclient:

. /path/to/venv/bin/activate . /etc/kolla/admin-openrc.sh pip install python-swiftclient swift --help

然后导出认证信息:

swift auth

输出里会有OS_STORAGE_URL和OS_AUTH_TOKEN,把OS_AUTH_TOKEN的值记下来,回到 Proxmox shell 写入文件:

echo "<OS_AUTH_TOKEN的值>" > /etc/ceph/keystone_admin_token

这个 token 就是 Ceph 侧rgw_keystone_admin_token要填的内容。两处必须一致,否则 RadosGW 向 Keystone 认证时会返回 401。

2.5 统一 Key 的 JSON 配置片段

把 TaoToken 的 Key、Base URL、Model ID 三件套写成一个可复用的 JSON,放在部署机上供验证脚本读取:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "model_id": "claude-sonnet-4-5", "keystone_url": "http://10.10.1.250:5000", "radosgw_endpoint": "http://10.10.1.51:7480" }

这份 JSON 把 OpenStack 侧、Ceph 侧、TaoToken 侧的入口都收在一处,后面验证请求直接读它,不用再翻多个文件。Model ID 按你实际使用的模型填,Claude Code 相关接入参考 https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite 。

3. 可复制配置:Kolla-Ansible 重新部署与 RadosGW 对接完整片段

配置齐了之后,重新部署 Kolla-Ansible,让 HAProxy 和 Endpoint 更新。

3.1 重新部署命令

kolla-ansible -i ./multinode deploy

这一步会重新渲染 HAProxy 配置,把radosgw_back后端加进去。部署完成后检查 HAProxy 报告,radosgw_back全部为绿色才算通。如果还是红色,先看 RadosGW 进程是否在 Proxmox 节点上正常监听 7480:

ss -tlnp | grep 7480

3.2 Ceph RadosGW 完整 ceph.conf 参考

把前面分散的片段拼起来,完整的ceph.conf大致如下,注意所有缩进取消,键名统一用下划线:

[global] auth_client_required = cephx auth_cluster_required = cephx auth_service_required = cephx cluster_network = 10.10.11.1/24 fsid = 59063611-9b12-4807-bf9d-ecfa60480d94 mon_allow_pool_delete = true mon_host = 10.10.1.51 ms_bind_ipv4 = true ms_bind_ipv6 = false osd_pool_default_min_size = 2 osd_pool_default_size = 2 public_network = 10.10.1.51/24 [client] keyring = /etc/pve/priv/$cluster.$name.keyring [client.radosgw.pve1] host = pve1 keyring = /etc/pve/priv/ceph.client.radosgw.keyring rgw_keystone_url = 10.10.1.250:5000 rgw_keystone_api_version = 3 rgw_keystone_admin_domain = Default rgw_keystone_admin_project = admin rgw_keystone_admin_token = <你的Keystone admin token> [mds] keyring = /var/lib/ceph/mds/ceph-$id/keyring [mds.pve1] host = pve1 mds standby for name = pve [mon.pve1] public_addr = 10.10.1.51

3.3 客户端 swiftclient 配置

部署机上激活环境后,swift stat能直接跑通,说明客户端到 RadosGW 的链路已经建立。如果要用统一 Key 做辅助验证,把 TaoToken 的 Base URL 和 Key 写进环境变量:

export TAOTOKEN_BASE_URL="https://taotoken.net/api" export TAOTOKEN_API_KEY="sk-你的TaoTokenKey" export TAOTOKEN_MODEL_ID="claude-sonnet-4-5"

这样后续用 curl 验证模型通道时直接引用,不用每次手敲。

3.4 参数对照表

参数位置作用常见错误值
enable_ceph_rgwglobals.yml开启 RadosGW 集成no 或缺失
ceph_rgw_hosts.ipglobals.ymlRadosGW 监听地址填成 hostname
rgw_keystone_api_versionceph.confKeystone API 版本2
rgw_keystone_admin_tokenceph.confKeystone admin token与 swift auth 不一致
rgw_keystone_urlceph.confKeystone 地址缺端口 5000

这张表里的每一行对不上,都会导致后面验证失败。尤其是rgw_keystone_api_version,填 2 的话 RadosGW 会用 V2 接口去认证,而当前 Keystone 默认 V3,直接 401。

4. 验证请求与成功结果:swift stat 与模型通道双验证

配置完成后,分两步验证:先验证 Swift 到 RadosGW 的存储链路,再验证 TaoToken 统一 Key 的模型通道。

4.1 swift stat 验证存储链路

在部署机执行:

swift stat

预期输出:

Account: v1 Containers: 0 Objects: 0 Bytes: 0 Containers in policy "default-placement": 0 Objects in policy "default-placement": 0 Bytes in policy "default-placement": 0 X-Timestamp: 1675740884.45155 X-Account-Bytes-Used-Actual: 0 X-Trans-Id: tx000008f5efad48bd19d87-0063e1c6d4-96a42-default X-Openstack-Request-Id: tx000008f5efad48bd19d87-0063e1c6d4-96a42-default Accept-Ranges: bytes Content-Type: text/plain; charset=utf-8

看到Account: v1和X-Trans-Id就说明请求已经打到 RadosGW,Keystone 认证通过。如果报 401,回到第 5 节排查。

4.2 Horizon 验证容器操作

重新登录 Horizon,进入「项目 -> 对象存储 -> 容器」,创建一个容器,上传文件再下载。能正常上传下载,说明 RadosGW 的 Swift 兼容 API 工作正常。

4.3 TaoToken 统一 Key 验证模型通道

用 curl 验证统一 Key 是否可用:

curl -s -X POST "$TAOTOKEN_BASE_URL/v1/messages" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "'"$TAOTOKEN_MODEL_ID"'", "max_tokens": 64, "messages": [{"role": "user", "content": "ping"}] }'

预期返回 JSON 里包含content字段和正常的stop_reason。如果返回 401,检查 Key 是否复制完整;如果返回reading choices相关错误,说明请求体格式和模型不匹配,换用 messages 格式重试。

4.4 验证结果对照

验证项命令成功标志
存储链路swift statAccount: v1
容器操作Horizon 上传下载无报错
模型通道curl /v1/messages返回 content
HAProxy 后端报告页radosgw_back 全绿

四项都通过,整条链路就算复现完成。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

这一节把实际会撞到的报错逐个对照。

5.1 401 Unauthorized

最常见。原因有三个:rgw_keystone_admin_token和swift auth导出的OS_AUTH_TOKEN不一致;rgw_keystone_api_version填了 2;rgw_keystone_url缺端口。逐个核对ceph.conf里的三行,改完重启radosgw。

5.2 local proxy failed

HAProxy 报local proxy failed,说明后端radosgw_back连不上。先确认 RadosGW 在 Proxmox 节点上监听 7480,再确认ceph_rgw_hosts里的 ip 和实际监听地址一致。如果 RadosGW 绑的是 0.0.0.0,ip 填节点实际地址即可。

5.3 reading choices 报错

这个报错出现在模型通道验证时,通常是请求体用了旧的 completions 格式,而模型只接受 messages 格式。把prompt字段换成messages数组,max_tokens保留,重试即可。

5.4 OAuth 相关报错

如果接入 Claude Code 时出现 OAuth 报错,检查 Base URL 是否写成了https://taotoken.net/api,以及 Key 是否放在ANTHROPIC_API_KEY或对应环境变量里。Claude Code 接入参考 https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite ,里面给了完整的 Base URL、Key、Model ID 三件套写法。

5.5 排查顺序建议

先看 HAProxy 报告确认后端绿不绿,再跑swift stat确认认证通不通,最后用 curl 验证模型通道。顺序反了会在无关的地方浪费时间。每次改完ceph.conf记得systemctl restart radosgw,改完globals.yml记得重新kolla-ansible deploy。

6. 统一 Key 通道下的接入与排障入口

整条链路跑通后,日常维护的重点就落在凭据轮换和排障入口上。TaoToken 的统一 Key 把模型通道的凭据收在一处,API Keys 管理页 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 可以做轮换和吊销,接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里有各语言的请求示例。存储侧的 Keystone admin token 和 RadosGW 认证参数仍然在ceph.conf里,改完重启 RadosGW 即可。

如果后面要把这套环境接到长期编码或 Agent 任务上,Coding Plan 入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,模型对话验证入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。排障时优先看 HAProxy 报告和swift stat输出,这两个能覆盖大部分认证和链路问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询