精读笔记(RHCA 英文教材)· CL260 Chapter 9 Accessing Object Storage Using a REST API
大约 7 分钟
精读笔记(RHCA 英文教材)· CL260 Chapter 9 Accessing Object Storage Using a REST API
教材原文:RHCA 官方英文教材(PDF 第 313~338 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch8(RGW 部署/多站点);AWS S3 与 OpenStack Swift 双 API 的客户端实操;
00-RHCA教材精读-导航与学习法.md
Chapter Goal / Objectives(原文+译)
- GOAL: Access Ceph object storage through the Amazon S3 and OpenStack Swift REST APIs(用 S3/Swift REST API 访问对象存储).
- OBJECTIVES: ① 配置 RGW 提供 S3 兼容访问并管理对象;② 配置 RGW 提供 Swift 兼容访问并管理对象。
- 结构:两个 Section + 各 Guided Exercise + 章末 Lab(
lab grade rest-review)。
9.1 Providing Object Storage Using the Amazon S3 API
概念与限制
- S3 兼容接口:应用可在 RGW 与其它 S3 兼容厂商间互通、平滑迁移;混合云可用不同 key/region 混用私有与公有云。
- 命名空间=bucket;每个 RGW 用户有 access key(标识)+ secret key(认证)。
- S3 限制(考试级记忆):
- 单对象 0 B ~ 5 TB;
- 单次 PUT 上限 5 GB;
- >100 MB 建议用 multipart upload(分段上传);
- 单请求元数据上限 16,000 B。
S3 用户与密钥管理
radosgw-admin user create --uid=testuser --display-name="Test User" \
--email=test@example.com --access-key=12345 --secret=67890 # 指定 AK/SK
radosgw-admin user create --uid=s3user --display-name="S3 user" # 不指定→自动生成并打印
radosgw-admin key create --uid=s3user --gen-secret # 只重生成 secret(多应用不同 key)
radosgw-admin key rm --uid=s3user --access-key=XXX # 移除单把 key(不影响其它 key)
radosgw-admin user suspend / user enable --uid=… # 停用/启用(连带停子用户)
radosgw-admin user modify --uid=johndoe --access=full # 改访问级别:read/write/readwrite/full
radosgw-admin user rm --uid=s3user --purge-data # 删用户+其对象与桶
radosgw-admin user info / user stats --uid=… # 用户信息/用量
radosgw-admin usage show --show-log-entries=false # 全用户用量(规划扩容)- ⚠️ 自动生成的 access key 可能含不易处理的字符(需转义),要么手动指定、要么重生成。
- 建议:网关用户不要共用 admin;每个应用/服务独立用户+最小权限。
配额
radosgw-admin quota set --quota-scope=bucket --uid=loghistory --max-objects=1024 [--max-size=…]
radosgw-admin quota enable --quota-scope=bucket --uid=loghistory # 设完再 enable;负数=停用
radosgw-admin global quota set --quota-scope=bucket --max-objects=2048 # 全局(作用于所有桶)
radosgw-admin global quota enable --quota-scope=bucket
radosgw-admin period update --commit # 或重启 RGW 使配额生效(zone/period 配置场景)桶 URL 格式与访问
- Path-style:
http://server.example.com/bucket/(默认); - Virtual-hosted-style:
http://bucket.server.example.com/——s3cmd 等客户端只认这种;开启:ceph config set client.rgw rgw_dns_name <域名>+ DNS 加通配记录指向网关 IP。 - 客户端示例(aws CLI 配
--profile):
aws configure --profile=ceph # 填 access key / secret / region(任意)/ json
aws --endpoint-url=http://serverc:80 s3 mb s3://demobucket
aws --endpoint-url=… s3 cp /tmp/demoobject s3://demobucket/demoobject
aws --endpoint-url=… s3 ls s3://demobucket
# radosgw-admin 也能做桶操作(bucket list / bucket rm…)
radosgw-admin bucket list / bucket rm版本化 / 生命周期 / 桶策略 / MFA
- S3 bucket versioning:bucket 里保留多版本对象,上传自动带 version id。
- 对象过期(lifecycle):按前缀+天数的规则删对象/使不可用。
- Bucket policy:只支持 bucket 级策略子集(不支持 user/group/role 策略);用标准 S3 操作管理(
aws s3api put-bucket-policy),radosgw-admin 管不了。JSON 元素:Version、Statement[Effect/Principal/Action/Resource(ARN)]。 - MFA Delete:RGW 支持用 TOTP 口令做二次认证因子,防止误删/未授权删除。
实验要点 · Guided Exercise(lab: s3-rest)
radosgw-admin user create(operator/12345/67890)→ aws configure --profile=ceph → mb 建桶 → cp 上传 → ls/下载校验 → 换其它客户端(curl)验证 → finish。
9.2 Providing Object Storage Using the Swift API
Swift 用户模型:tenant ↔ user 映射到 user ↔ subuser
- S3 是单层模型(一个用户多把 key);Swift 是多层:tenant(拥有存储/容器)下挂 users(不同访问级别)。RGW 用 subuser 表达:Swift
tenant:user↔ RGWuser:subuser。 - 建 Swift 用户/subuser:
radosgw-admin user create --uid=username --display-name="Swift User" \
--subuser=username:swift --key-type=swift --access=full # 建用户时同时建 swift subuser
radosgw-admin subuser create --subuser=username:swift --key-type=swift --access=full
radosgw-admin key create --subuser=username:swift --key-type=swift # 生成 Swift 密钥(-K 用的 secret)
radosgw-admin subuser modify --subuser=uid:_id_ --access=read|write|readwrite|full
radosgw-admin subuser rm --subuser=uid:_id_ [--purge-data] [--purge-keys]
radosgw-admin key rm --subuser=uid:_id_- 认证:RGW 同时当数据服务器与 Swift 认证服务(URL 路径
/auth);支持 Auth 1.0(内部 Swift:环境变量ST_AUTH/ST_USER/ST_KEY)与 2.0(Keystone:OS_AUTH_URL/OS_USERNAME/OS_PASSWORD/OS_TENANT_NAME/OS_TENANT_ID)。
Swift 客户端命令
export ST_AUTH=http://serverc:80/auth/1.0
# swift -A 认证URL -U user:swift -K secret <命令>
swift -A $ST_AUTH -U operator:swift -K opswift stat # 账号统计
swift -A $ST_AUTH -U operator:swift -K opswift post backup-artifacts # 建容器
swift -A $ST_AUTH -U operator:swift -K opswift upload services /etc/hosts # 上传(对象名=etc/hosts,可用 --object-name 改名)
swift -A $ST_AUTH -U operator:swift -K opswift download container obj # 下载
swift -A $ST_AUTH -U operator:swift -K opswift list / delete … # 列/删Swift 容器版本化与过期
- 容器版本化两种 flag(同一时刻只能设一个,都设→400 Bad Request):
- X-History-Location=归档容器名:删对象→原容器 404、对象被拷进归档容器(可恢复);
- X-Versions-Location=归档容器名:删对象→把最近一版从归档拷回并删该归档版(类似回滚);要彻底删除需按版本数重复删。
- 开启:
rgw_swift_versioning_enabled=true(ceph.conf[client.radosgw.<名>]段)。 - 过期:上传时带
X-Delete-At(绝对时间)/X-Delete-After(相对秒数)头,到点停止服务并稍后删除。 - 多租户:建用户时
--tenant testtenant,容器/桶按 tenant 隔离(不同 tenant 可同名)。
实验要点 · Guided Exercise + Lab(lab: rest-review)
GE:为 operator 用户建 operator:swift subuser(full)→ swift stat 验证 → post 容器、upload/download 对象 → 配置 X-History-Location 容器验证删除行为。Lab:S3 侧建 operator(12345/67890)→ serverc 造 10MB log-object-1oMB.bin 传 log-artifacts → serverf 下载校验;Swift 侧 operator:swift(opswift) 造 20MB 备份对象上传 → lab grade rest-review。
命令速查表(本章)
| 命令 | 作用 |
|---|---|
radosgw-admin user create/rm/suspend/enable/modify/info/stats | 用户全生命周期 |
radosgw-admin key create/rm [--gen-secret/--gen-access-key/--key-type] | 密钥管理 |
| `radosgw-admin quota/global quota set | enable --quota-scope=bucket |
radosgw-admin usage show | 用量统计 |
ceph config set client.rgw rgw_dns_name DOMAIN | 开 virtual-hosted URL |
aws configure --profile=… + aws --endpoint-url=… s3 mb/cp/ls | S3 客户端 |
radosgw-admin subuser create/modify/rm | Swift subuser |
swift -A URL -U user:swift -K KEY stat/post/upload/download/list/delete | Swift 客户端 |
radosgw-admin user create --subuser=.. --key-type=swift --access=full | 一步建 Swift 用户 |
词汇表(本章)
| 英文术语 | 中文 | 一句话速记 |
|---|---|---|
| access key / secret key | 访问键/密钥 | 标识与认证(AK/SK) |
| multipart upload | 分段上传 | >100MB 建议、5GB 上限的替代 |
| path-style / virtual-hosted | 路径式/虚拟主机式 URL | /bucket/ vs bucket.域名/(需 rgw_dns_name+通配 DNS) |
| bucket policy / ARN | 桶策略/资源名 | bucket 级 JSON 授权(仅子集) |
| MFA Delete / TOTP | 二次认证删除 | 防误删的时效口令 |
| lifecycle / versioning | 生命周期/版本化 | 前缀+天数过期;对象多版本 |
| subuser | 子用户 | Swift tenant:user → RGW user:subuser |
| tenant | 租户 | Swift 隔离单位(--tenant) |
| ST_AUTH / OS_* | 认证环境变量 | Auth 1.0 vs 2.0(Keystone) |
| X-History-Location | 历史归档 flag | 删除→归档容器留底(原 404) |
| X-Versions-Location | 版本回滚 flag | 删除→从归档恢复最近一版 |
| X-Delete-At/After | 定时过期头 | 到点停止服务并清理 |
自测
- S3 的三条硬限制(对象 5TB、单次 5GB、元数据 16KB)与分段上传建议阈值(100MB)?
radosgw-admin user create不指定 key 时会发生什么?自动生成的 key 有什么坑(特殊字符)?- 多应用共用一用户时如何做到“撤一把 key 不影响其它”(key create 多把 + key rm 单把)?
- 配额命令为什么分“set 后 enable”?全局配额与用户配额分别作用于什么范围?改完 zone 部署如何生效(period update --commit / 重启 RGW)?
- 客户端只支持 virtual-hosted URL 时管理员要做什么(rgw_dns_name + 通配 DNS)?
- S3 桶策略支持范围(仅 bucket、无 user/group/role);策略由哪四要素构成?用什么命令上传?
- Swift 的 tenant:user 如何映射到 RGW(user:subuser)?建 Swift 用户的一条龙命令?
- Auth 1.0 与 2.0 的认证 URL 与关键环境变量分别是什么(/auth 1.0 vs Keystone)?
- X-History-Location 与 X-Versions-Location 删除行为差异?两个 flag 同设会怎样(400)?
- Swift 定时删除对象用什么头?RGW 开启 Swift 版本化的配置项是什么?
