如何通过Curl在Minio中创建Bucket(避免使用mc命令)
如何通过Curl在Minio中创建Bucket(避免使用mc命令)
嗨,我之前也碰到过一模一样的问题,刚好能给你捋清楚怎么解决!你用普通的curl PUT请求失败,是因为新版Minio默认要求使用AWS Signature Version 4(也就是报错里的AWS4-HMAC-SHA256)来做身份验证,而你用的-u参数是Basic Auth方式,已经不被Minio默认支持了。下面给你两种不用mc命令的解决办法:
方案一:临时开启Basic Auth兼容(仅测试/非生产环境用)
如果你只是在测试环境折腾,不想搞复杂的签名,那可以修改Minio的配置,让它同时支持旧版的v2签名和新版的v4签名。因为你的Minio跑在kind集群里,需要调整一下Minio Deployment的配置:
- 找到你的Minio Deployment对象,修改容器的启动参数或者添加环境变量:
- 环境变量方式:给Minio容器添加
MINIO_API_SIGNATURES=s3v4,s3v2 - 启动参数方式:在Minio的启动命令末尾加上
--api s3v4,s3v2
- 环境变量方式:给Minio容器添加
- 重启Minio的Pod之后,你原来的curl命令就能正常工作了:
curl -X PUT -u "minioroot:miniopassword" "http://localhost:9000/ci-bucket" - 注意:这个方法绝对不要在生产环境用,因为v2签名的安全性比v4低很多。
方案二:用curl原生支持的AWS SigV4签名(推荐,生产可用)
其实新版的curl(7.75.0及以上版本)已经自带了AWS SigV4签名的支持,完全不用额外工具。步骤很简单:
- 先检查你的curl版本,确保是7.75.0以上:
curl --version - 然后直接用带签名的curl命令创建Bucket,注意Bucket名称后面要加
/(这是S3规范要求的,Minio会以此识别是创建Bucket的请求):curl -X PUT "http://localhost:9000/ci-bucket/" \ --aws-sigv4 "aws4_request" \ --user "minioroot:miniopassword" \ --header "Host: localhost:9000" - 如果你是在kind集群外面访问,记得先把Minio的端口转发到本地,比如:
然后再执行上面的创建Bucket命令就行。kubectl port-forward service/minio 9000:9000
执行成功后,你可以用下面的命令验证Bucket是否创建成功:
curl -X GET "http://localhost:9000/" \ --aws-sigv4 "aws4_request" \ --user "minioroot:miniopassword"
这个命令会列出所有已存在的Bucket,你应该能看到ci-bucket在里面。
备注:内容来源于stack exchange,提问作者guettli
相关产品推荐
相关产品推荐

