1. 程式人生 > >記在k8s的pod上使用apache的commons-net:ftp功能時,ftp一直上傳檔案失敗

記在k8s的pod上使用apache的commons-net:ftp功能時,ftp一直上傳檔案失敗

    在k8s的pod上使用apache的commons-net:ftp功能時,一直顯示:

    

    即上傳檔案失敗,但是在本地環境進行上傳時卻又顯示上傳成功,讓人十分不解。在網上搜索了一下ftp的一些資料發現ftp共有兩種模式(參考https://blog.csdn.net/nyunyuzhao/article/details/5734978),分為被動(pasv)和主動模式(port),commons-net:ftp預設使用的是主動模式,即客戶端發起連線,告訴伺服器我開了某個埠你過來連線我,在本地環境下因為有公網IP的存在,伺服器端能夠通過ip+port訪問到客戶端機器,但是k8s的pod暴露出去的非實際ip,所以伺服器端不能連線到客戶端,造成了檔案無法傳輸成功。在被動模式中,都是客戶端去連線伺服器端,所以能夠訪問。

    commons-net:ftp設定使用被動模式的程式碼為:

FTPClient ftpClient = new FTPClient();
ftpClient.setDefaultPort(ftpServerPort);
ftpClient.connect(ftpServer);
ftpClient.login(username, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setBufferSize(10 * 1024);
ftpClient.setSendBufferSize(10 * 1024);
ftpClient.enterLocalPassiveMode();//重點在這一句,就是這裡設定主被動模式

參考博文:https://blog.csdn.net/nyunyuzhao/article/details/5734978