Kubernetes搭建minio作为阿里OSS的Gateway

阿里的云的 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

image-20211126094340872

然后还有 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 就可以了,还得输入一遍密码

image-20211126095040380

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

image-20211126095433603

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 &

替代kubernetes Crontab的神器kala
Kubernetes下nginx Ingress的限制
comments powered by Disqus