阿里的云的 OSS 并不是完全版本的 AWS S3 兼容。
我们如果需要用 S3 协议访问 OSS,就比较麻烦了。
所以搭建一个 minio 来做网关,代理OSS,minio 是基本兼容S3的,所以这样曲线救国,通过 S3 协议访问 minio 来访问最后端的 OSS
这里还有一段故事:
Minio 中间有一版是支持 oss 的,但是后来 oss 改了协议,所以现在的最新版本 minio 反而是不支持代理 oss 的,我们必须手动作出镜像,放到镜像库里,然后阿里 ACK 再使用
首先去下载那一版直接支持oss的
1wget http://dl.minio.org.cn/server/minio/release/linux-amd64/archive/minio.RELEASE.2020-04-15T19-42-18Z
2
3chmod 755 minio.RELEASE.2020-04-15T19-42-18Z
这个文件比较宝贵,给个本地备份链接下载:
minio.RELEASE.2020-04-15T19-42-18Z
然后在当前目录编辑 Dockerfile ,因为 K8S 和 OSS 同一地域,所以用 OSS 私网域名:
1FROM alpine:3.12
2
3RUN apk add --update bash && rm -rf /var/cache/apk/*
4
5COPY minio.RELEASE.2020-04-15T19-42-18Z /data/minio.RELEASE.2020-04-15T19-42-18Z
6
7ENV MINIO_ACCESS_KEY=LTAI5tFFTbsxxxxxuLb
8ENV MINIO_SECRET_KEY=t78PyGnHZilxxxxxdxBCjvNgtVC5Y
9
10WORKDIR /data
11EXPOSE 9000
12
13CMD ["/data/minio.RELEASE.2020-04-15T19-42-18Z","gateway","oss","http://oss-cn-shanghai-internal.aliyuncs.com"]
14# 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 更安全
1---
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: minio-deploy
6 labels:
7 app: minio
8spec:
9 replicas: 1
10 selector:
11 matchLabels:
12 app: minio
13 template:
14 metadata:
15 labels:
16 app: minio
17 spec:
18 containers:
19 - name: minio
20 image: registry.cn-shanghai.aliyuncs.com/rendoumi/minio:latest
21 ports:
22 - containerPort: 9000
23---
24apiVersion: v1
25kind: Service
26metadata:
27 name: minio-svc
28 labels:
29 app: minio
30spec:
31 ports:
32 - name: http
33 protocol: TCP
34 port: 9000
35 targetPort: 9000
36 selector:
37 app: minio
38 type: ClusterIP
然后开转发:
1kubectl port-forward svc/minio-svc 9000:9000 &
用浏览器访问 http://localhost:9000 就可以了,还得输入一遍密码
这样就可以看到 OSS 的所有桶了
Minio的官方命令行客户端是 mc,使用方法如下:
1wget https://dl.min.io/client/mc/release/linux-amd64/mc
2chmod 755 mc
3
4./mc alias set minio http://minio-svc:9000 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY
5
6./mc ls minio
minio 跑在容器外进行 OSS 代理的方法,注意不同地方,OSS 的域名改为公网的了:
1#!/bin/sh
2export MINIO_ACCESS_KEY=LTAI5tFFTbsxxxxxuLb
3export MINIO_SECRET_KEY=t78PyGnHZilxxxxxdxBCjvNgtVC5Y
4nohup ./minio.RELEASE.2020-04-15T19-42-18Z gateway oss http://oss-cn-shanghai.aliyuncs.com >/dev/null 2>&1 &