記在k8s的pod上使用apache的commons-net:ftp功能時,ftp一直上傳檔案失敗
阿新 • • 發佈:2018-12-06
在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