Files
homelab-wiki/services/seaweedfs.md
T

86 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: SeaweedFS S3 使用指南
lifecycle: active
evidence: documented
last_reviewed: 2026-09-16
last_verified: null
---
# SeaweedFS 对象存储
SeaweedFS 为应用提供 S3 兼容对象存储,zot Registry 是它的消费者之一。
普通应用使用自己的 bucket 和 S3 身份;容器镜像通过 [zot](zot.md) 发布与拉取。
本页依据 homelab-infra 工作区 `apps/seaweedfs/README.md` 和 `apps/zot/README.md` 整理,
客户端语法参考 AWS CLI 官方文档。本轮未查询现场或读写对象。
## 连接入口与身份
| 场景 | endpoint |
|---|---|
| LAN 客户端的 HTTPS S3 入口 | `https://s3.ad.ddupan.top` |
| Kubernetes 集群内 Service | `http://seaweedfs-s3.seaweedfs.svc.cluster.local:8333` |
首次接入先明确自己的 bucket、需要的 Read/Write/List 等权限及凭据获取方式。
当前所读配置使用静态 S3 AK/SK,由 OpenBao 管理;SeaweedFS OIDC/STS 尚未接入。
zot 前端的 SPIFFE 登录不代表通用 S3 客户端已经能用 SPIFFE 换取 S3 凭据。
应用使用专属身份,不复用 zot 或 Terraform 的存储凭据。
Kubernetes Secret 是 ESO 生成的消费副本,身份或凭据变更应修改受管来源,不能手工改副本。
## 用 AWS CLI 查看自己的对象
前提:已安装 AWS CLI,并由既有授权流程将本应用的凭据注入当前进程环境
(`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`),或配置受保护的专用 CLI profile。
不要把实际 AK/SK 复制到命令示例、仓库或日志中。
将下例 bucket 替换为自己的已授权 bucket,先只读列出少量对象:
```bash
aws --endpoint-url https://s3.ad.ddupan.top s3api list-objects-v2 \
--bucket YOUR_APP_BUCKET --max-items 10 --no-cli-pager
```
预期返回对象信息或空 bucket 的结果。只具有指定 bucket 权限的身份,不必拥有列举所有 bucket 的权限;
因此不以全局 `aws s3 ls` 是否成功作为接入的唯一标准。
`--max-items` 控制返回条数,具体行为见
[AWS CLI list-objects-v2](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects-v2.html)。
## 上传和下载一个测试文件
仅在自己的测试 bucket/prefix 以及具备写权限时操作。替换占位符,并使用尚未占用的 key:
```bash
aws --endpoint-url https://s3.ad.ddupan.top s3 cp ./hello.txt \
s3://YOUR_APP_BUCKET/YOUR_UNUSED_TEST_KEY
aws --endpoint-url https://s3.ad.ddupan.top s3 cp \
s3://YOUR_APP_BUCKET/YOUR_UNUSED_TEST_KEY ./hello.downloaded.txt
cmp ./hello.txt ./hello.downloaded.txt
```
本地先准备 `hello.txt`。预期上传与下载成功,`cmp` 无输出且退出码为 0。
这会在目标 bucket 留下测试对象,是否清理由该 bucket 的所有者决定。
语法参考 [AWS CLI cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html)。
上游 S3 客户端文档用于解释命令,不代表 SeaweedFS 实现了全部 AWS S3 功能。
## zot 数据与维护边界
zot 专用数据位于 `zot` bucket 的 `registry/` 前缀,由 Registry 管理 OCI layout。
不要把普通文件直接写入该前缀,也不要用 S3 客户端手工删除镜像内部对象。
zot 的 S3 身份只允许相应 bucket 的 Read/Write/List/Tagging,不能访问 `tfstate`。
其凭据唯一来源为 OpenBao `kv/k8s/zot-s3`,由 ESO 同步给 zot 和 SeaweedFS;
基础 S3 身份配置在 `kv/k8s/seaweedfs-s3`,两份配置的合成及轮换见源码 README。
轮换不仅是改一个值,还需协调服务端重新加载和消费者更新,避免两端配置不一致。
## 遇到问题先看哪里
- 域名或连接失败:确认当前使用的是 LAN endpoint 还是仅集群内可达的 Service。
- 访问被拒绝:核对使用的应用身份、bucket/key 与所需动作权限,不直接扩大为管理员权限。
- 签名或凭据错误:核对凭据来源、同步情况和客户端配置;不要打印 AK/SK 排障。
- Registry 不可用:区分 zot 的 SPIFFE 客户端认证与它到 S3 的后端认证。
部署与配置来源:homelab-infra `apps/seaweedfs/README.md`、`apps/zot/README.md`。
单一存储系统内的数据副本不等于独立备份;zot 源文档尚未记录已建立独立异机/离线备份。
其他应用的数据保留与恢复策略应由各自用途明确,不能从“已接入 S3”推断已经完成备份。