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/