如何访问仅接受来自 kubernetes 集群中特定国家/地区的 IP 地址的 ftp?

How to access ftp that only accepts IP address from a specific country within a kubernetes cluster?

我从事的项目维护着一个数据湖,该数据湖集中了来自巴西政府的 public 信息。我们的管道 运行 在 Kubernetes 集群上。

我目前正在构建劳动力市场数据管道。这是我用来下载数据的 bash 脚本:

#!/bin/bash

# To run this script the user must run 'bash download.sh group', where group is cagedmov | cagedfor | cageddex.
# See explanation in the next comment:

# The microdata resulting from the new consolidation are made available in accordance with the
# month of disclosure, as of January 2020, containing three files for each
# competence. Following a consistent naming pattern, CAGEDMOVAYYYMM files
# bring the movements declared within the deadline with declaration competence
# same as YYYYMM. The CAGEDFORAAAMM files bring the declared moves
# outside the deadline with declaration competence equal to YYYYMM. the files
# CAGEDEXCAAAAMM bring the excluded movements with declaration competence
# of exclusion equal to YYYYMM

lower_group=
upper_group=${lower_group^^}

mkdir -p /tmp/novo_caged/$lower_group/input
ufs=('RO' 'AC' 'AM' 'RR' 'PA' 'AP' 'TO' 'MA' 'PI' 'CE' 'RN' 'PB' 'PE' 'AL' 'SE' 'BA' 'MG' 'ES' 'RJ' 'SP' 'PR' 'SC' 'RS' 'MS' 'MT' 'GO' 'DF')
anos=(2020 2021 2022)
meses=($(seq 1 1 12))

for uf in "${ufs[@]}"
do
    for ano in "${anos[@]}"
    do
        for mes in "${meses[@]}"
        do
            mkdir -p /tmp/novo_caged/$lower_group/ano=$ano/mes=$mes/sigla_uf=$uf/
        done
    done
done

cd /tmp/novo_caged/$lower_group/input
ftp_path="ftp://anonymous:anonymous@ftp.mtps.gov.br/pdet/microdados/NOVO CAGED/"

pad_meses=($(echo {01..12}))
folders=($(seq 202001 1 202012))

for ano in "${anos[@]}"
do
    for mes in "${pad_meses[@]}"
    do
        wget "$ftp_path$ano/$ano$mes/$upper_group$ano$mes.7z"
        7z x -y $upper_group$ano$mes.7z
        rm *7z
    done
done

脚本运行在我的电脑上完美运行,但是当我部署到Kubernetes集群时,脚本抛出错误Failed to connect to ftp.mtps.gov.br port 21: Connection timed out。显然,地址 ftp.mtps.gov.br 只接受来自巴西 IP 地址的请求。有没有办法绕过这个限制?自动化此 ETL 并以更新的方式发布此数据对我们的项目非常重要。

您可以将 Tor 用作 sockx5 代理,并将其配置为让流量从特定国家/地区退出。
在 torrc 配置文件中添加这些行,或最终修改现有的。

ExitNodes {br}
StrictNodes 1

最后一件事,你需要告诉你的 bash 脚本使用 tor。
这可以通过不同的方式完成,最简单的一种是使用 torify 命令。
我建议测试在脚本顶部添加此行的所有内容

#!/bin/bash

curl https://api.myip.com;exit

这将为您提供该国家/地区被用作 tor 出口节点的证据。如果没问题,去掉这条测试线。

https://www.torproject.org/
https://linux.die.net/man/1/torify