首页 > 解决方案 > GCP:如何动态更改 VM 实例的公共 IP 并保持连接

问题描述

我们在 Compute Engine 中有许多用于抓取的 VM 实例,它们可能会在某些站点中被阻止,然后我们尝试使用 NordVPN 更改 IP。当我们检测到我们被阻止时,我们正在尝试创建一个 Python 脚本来自动更改 IP。目前,我们正在使用我们最近发现的这个 Python 包:NordVPN-switcher,但我们遇到了下一个错误:

Connecting you to Denver ...
An unknown error occurred while connecting to a different server! 

An unknown error occurred while connecting to a different server! Retrying with a different server...

Traceback (most recent call last):
  File "demo.py", line 13, in <module>
    rotate_VPN(instructions)  # refer to the instructions variable here
  File "/home/eduardo_santos_housecallprosolut/.local/lib/python3.8/site-packages/nordvpn_switcher/nordvpn_switch.py", line 514, in rotate_VPN
    raise Exception("Unable to connect to a new server. Please check your internet connection.\n")
Exception: Unable to connect to a new server. Please check your internet connection.

注意:我们有互联网连接。

虚拟机实例也安装了 NordVPN,如果我们手动尝试,我们可以更改它,但由于我们使用 SSH 连接到实例,在我们更改 IP 的那一刻,连接丢失。

那么,目前的问题是:

  1. 如何正确动态更改实例的IP?
  2. 更改发生后如何保持连接。

注意:爬虫和所有逻辑都是docker化的,Python版本是3.9

正如我在开始时提到的,我们有很多机器用于抓取,我们希望保留每个使用的 IP 的注册表,以便更好地分配,可能使用 Redis DB 或 MongoDB 中的小型集合。你怎么看待这件事?什么是开发这个的好方法?

太感谢了。

标签: pythonnetworkinggoogle-cloud-platformgoogle-compute-enginevpn

解决方案


我今晚在具有公共 IP 的 VM 上尝试了这个,然后我删除了公共 IP,它继续工作。这可能是解决方案!

您可以使用 IAP连接到您的虚拟机。像这样在带有 gcloud 的终端中执行此操作:

gcloud compute ssh --tunnel-through-iap -project=$project_name --zone=us-west2-a $instance_name

让我知道。如果它不适合你,我将删除答案


推荐阅读