阿里的云的 OSS 并不是完全版本的 AWS S3 兼容。
我们如果需要用 S3 协议访问 OSS,就比较麻烦了。
所以搭建一个 minio 来做网关,代理OSS,minio 是基本兼容S3的,所以这样曲线救国,通过 S3 协议访问 minio 来访问最后端的 OSS
这里还有一段故事:
Minio 中间有一版是支持 oss 的,但是后来 oss 改了协议,所以现在的最新版本 minio 反而是不支持代理 oss 的,我们必须手动作出镜像,放到镜像库里,然后阿里 ACK 再使用
首先去下载那一版直接支持oss的
wget http://dl.minio.org.cn/server/minio/release/linux-amd64/archive/minio.RELEASE.2020-04-15T19-42-18Z
chmod 755 minio.RELEASE.2020-04-15T19-42-18Z
这个文件比较宝贵,给个本地备份链接下载:
minio.RELEASE.2020-04-15T19-42-18Z
然后在当前目录编辑 Dockerfile ,因为 K8S 和 OSS 同一地域,所以用 OSS 私网域名:
FROM alpine:3.12
RUN apk add --update bash && rm -rf /var/cache/apk/*
COPY minio.RELEASE.2020-04-15T19-42-18Z /data/minio.RELEASE.2020-04-15T19-42-18Z
ENV MINIO_ACCESS_KEY=LTAI5tFFTbsxxxxxuLb
ENV MINIO_SECRET_KEY=t78PyGnHZilxxxxxdxBCjvNgtVC5Y
WORKDIR /data
EXPOSE 9000
CMD ["/data/minio.RELEASE.2020-04-15T19-42-18Z","gateway","oss","http://oss-cn-shanghai-internal.aliyuncs.com"]
# CMD /bin/sh -c "while true; do echo hi; sleep 10; done"
注意上面,MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY 对应的是阿里云 OSS的 AccessKey ID 和 AccessKey Secret
打开阿里云网址,新建AccessKey ID 和 AccessKey Secret ,注意这东西只能看见一次,之后再也不能明文看了,所以第一次务必保存好!!!
https://ram.console.aliyun.com/manage/ak

然后还有 Dockerfile 的最后一行,八戒的习惯是保留一个死循环 shell,如果镜像 CMD 有问题,无法启动,就换成这个先启动,然后再进去调试。(经常有什么库错、链接搞不好需要修改)
docker build -t registry.cn-shanghai.aliyuncs.com/rendoumi/minio .
然后 push 上去
docker push registry.cn-shanghai.aliyuncs.com/rendoumi/minio
编写好Deployment和svc,如果想公开还可以写 ingress 向外暴露,自己公司用还是 port-forward 更安全
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio-deploy
labels:
app: minio
spec:
replicas: 1
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: registry.cn-shanghai.aliyuncs.com/rendoumi/minio:latest
ports:
- containerPort: 9000
---
apiVersion: v1
kind: Service
metadata:
name: minio-svc
labels:
app: minio
spec:
ports:
- name: http
protocol: TCP
port: 9000
targetPort: 9000
selector:
app: minio
type: ClusterIP
然后开转发:
kubectl port-forward svc/minio-svc 9000:9000 &
用浏览器访问 http://localhost:9000 就可以了,还得输入一遍密码

这样就可以看到 OSS 的所有桶了

Minio的官方命令行客户端是 mc,使用方法如下:
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod 755 mc
./mc alias set minio http://minio-svc:9000 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY
./mc ls minio
minio 跑在容器外进行 OSS 代理的方法,注意不同地方,OSS 的域名改为公网的了:
#!/bin/sh
export MINIO_ACCESS_KEY=LTAI5tFFTbsxxxxxuLb
export MINIO_SECRET_KEY=t78PyGnHZilxxxxxdxBCjvNgtVC5Y
nohup ./minio.RELEASE.2020-04-15T19-42-18Z gateway oss http://oss-cn-shanghai.aliyuncs.com >/dev/null 2>&1 &