11

kubernetes搭建minio作为阿里OSS的Gateway

 2 years ago
source link: https://zhangrr.github.io/posts/20211126-kubernetes_minio_oss_gateway/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Kubernetes搭建minio作为阿里OSS的Gateway

2021-11-26 2 分钟阅读

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

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 更安全

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

image-20211126095040380

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

image-20211126095433603

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 &

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK