tidb-operator 1.5.x 的Backup CR 该如何配置才能备份到阿里云OSS 呢?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.5.1
【复现路径】
像这样配置 Backup CR,POD 报错:“使用了STS类型的AccessKey ID,但是未在请求中附上SecurityToken字段表明使用了STS的认证方式”

backupMode: snapshot
backupType: full
br:
  logLevel: debug
  cluster: basicai
  clusterNamespace: tidb-cluster
resources: {}
s3:
  bucket: bas....p
  endpoint: https://oss-cn-beijing.aliyuncs.com
  prefix: tidb_test/alidev
  provider: alibaba
  region: oss-cn-beijing
  secretName: s3-secret

secret: s3-secret 是存在的,且里面的ak/sk 是正确的,通过该ak/sk,BR 命令徒手备份都能完成。

得参考BR 命令那样(在storage 参数的值后面指定ak/sk:–storage “s3://ba…p/tidb_test/alidev?access-key=LT…tN&secret-access-key=MD…K”),在 prefix 字段的值后面显式加上ak/sk 才能将备份文件写入OSS:

  s3:
    bucket: ba...p
    endpoint: https://oss-cn-beijing.aliyuncs.com
    prefix: tidb_test/alidev?access-key=L...N&secret-access-key=M...JK
    provider: alibaba
    region: oss-cn-beijing

但是问题又来了,但是在备份的最后阶段,Backup CR 去OSS 里读取备份的元数据时就报错:error: read backup meta from bucket basicai-ops-backup and prefix tidb_test/alidev?access-key=LTA…N&secret-access-key=MD…K: backupmeta not exist。

请教下,这个Backup CR 该怎么配置才能正确备份到阿里云OSS?

以 v1.5.2 为例,代码逻辑为:

  1. 读取 secretName 对应 secret, tidb-operator/pkg/backup/util/util.go at master · pingcap/tidb-operator · GitHub
  2. 读取后添加进 env, tidb-operator/pkg/backup/backup/backup_manager.go at v1.5.2 · pingcap/tidb-operator · GitHub
  3. 最后统一设置到 pod env, tidb-operator/pkg/backup/backup/backup_manager.go at v1.5.2 · pingcap/tidb-operator · GitHub

简单来说,secret 里的 key/value 都会设置到 pod env,你可以 get pod -oyaml 或 describe 看一下 spec (BR 是支持 env 配置 AK/SK 后读写 S3 的)

POD 报错:“使用了STS类型的AccessKey ID,但是未在请求中附上SecurityToken字段表明使用了STS的认证方式”

需要找 OSS 的技术支持确认为何要求 token

但是在备份的最后阶段,Backup CR 去OSS 里读取备份的元数据时就报错:error: read backup meta from bucket basicai-ops-backup and prefix tidb_test/alidev?access-key=LTA…N&secret-access-key=MD…K: backupmeta not exist

同上 :sweat_smile:

蹲一手最佳答复,

唉,我在github 也提了issue,目前没有人来关注了:How to use Backup CR to backup tidb to aliyun OSS? · Issue #5611 · pingcap/tidb-operator · GitHub

学到了