k8s部署vsftp 支持多线程下载

ftp image

vsftpd

具体参数参考: https://github.com/fauria/docker-vsftpd

ftp模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式
  • PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:我打开了XXXX端口,你过来连接我于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据
  • PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:我打开了XXXX端口,你过来连接我于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据

概括:

主动模式: 服务器向客户端敲门,然后客户端开门
被动模式: 客户端向服务器敲门,然后服务器开门

docker 部署

一般选用被动模式,服务端打开端口这样比较容易控制

docker run -d -v /my/data/directory:/home/vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=myuser -e FTP_PASS=mypass \
-e PASV_ADDRESS=127.0.0.1 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd

在本地运行以上命令可以快速启动ftp服务,注意修改一下本地的挂载目录,另外环境变量PASV_ADDRESS如果是在本地无需修改,如果部署在其他服务器或者暴露在公网,要修改为对应的host
ip 或 公网ip
有些文章中说需要进入到容器容器去修改或者增加一些用户信息,其实这里通过环境变量就已经搞定。docker部署方式相对简单很多。

k8s部署

ftp 需要被动模式
k8s svc Headless(因为k8s kube proxy 转发不确定确定哪些端口是需要转发的,所有只能通过k8s dns 直接解析podIP, 而不是clusterIP)

---
kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: ftp
  name: ftp
spec:
  selector:
    matchLabels:
      app: ftp
  template:
    metadata:
      labels:
        app: ftp
    spec:
      #使用本地服务器端口
      hostNetwork: true
      containers:
      - name: ftp-container
        image: fauria/vsftpd
        ports:
        - containerPort: 21
        - containerPort: 31110
        - containerPort: 31111
        - containerPort: 31112
        - containerPort: 31113
        - containerPort: 31114
        - containerPort: 31115
        env:
        - name: FTP_USER
          value: "admin"
        - name: FTP_PASS
          value: "admin&1234"
        - name: PASV_MIN_PORT
          value: "31110"
        - name: PASV_MAX_PORT
          value: "31115"
        #走公网的填写公网IP,内网注释掉改部分,取消下面注释的自动获取方法
        # - name: PASV_ADDRESS
        #   value: 10.0.1.133
        - name: PASV_ADDRESS
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        volumeMounts:
        - name: ftp-dir
          mountPath: /home/vsftpd/admin/
      volumes:
      - name: ftp-dir
        hostPath:
          path: /opt/vsftpd-test
          type: DirectoryOrCreate

ftp 多线程下载

ftp 支持多线程下载,这个得看你被动连接端口开放了多少个,例如上方设置除了 21端口外
开放了6个连接端口,我们下载时,就可以使用最多6线程.

axel -a -n 5 ftp://"admin@admin&1234":192.168.50.134/admin/a.zip

参考文章:http://bamboox.online/2020/03/28/ftp-on-k8s/

上一篇:linux的vnc- rdesktop远程登录windows桌面


下一篇:为啥厨师和服务员会打架?--多线程通信问题之生产者和消费者