我已经创建了一个具有两个 NIC 的实例:
nic0 具有共享 VPC,无公共 IP
nic1 具有默认 vpc 和公共 IP
在创建虚拟机期间我可以看到通知。
防火墙设置不适用于多个网络接口。
创建虚拟机后,我无法使用公共 IP 地址访问该机器。
我尝试使用共享 VPC,我能够从该 VPC 进行 ssh 和 ping VM。
唯一的问题是,当尝试通过公共 IP 地址访问时,我无法得到任何响应。
答案1
根据 gcloud 文档,
Compute Engine DHCP 服务器仅在虚拟机 (nic0) 的主网络接口上编程默认路由。如果我们想使用外部 IP 连接到辅助接口,我们必须通过串行控制台在该网络接口上设置默认路由。
如果您想使用分配给 nic1 的公共 IP 通过 ssh 进入机器,则必须更改默认监听接口(默认为 nic0)。
- 使用串行控制台 ssh 进入机器
gcloud compute --project=your_project connect-to-serial-port vm_name --zone=your_zone
- 删除默认接口
ip route del default
- 添加新接口作为默认接口
ip route add default required_ip dev required_interface
您将通过使用跳转服务器通过 ssh 进入虚拟机并运行命令来找到您required ip
的。required interface
ip route
重要的:仅使用串行控制台而不是任何跳转服务器来更改默认路由,因为如果您通过跳转服务器执行此操作,则一旦删除默认接口,您将失去与机器的连接。
如果串行控制台中的 ssh 要求输入用户名和密码,而您尚未设置,则需要使用跳转服务器 ssh 进入虚拟机,运行sudo passwd $USER
,完成该过程,然后尝试上述方法通过 nic1 进行 ssh。
跳转服务器是指与我的私有机器(没有任何外部 IP)位于同一网络中的机器,这样我们首先可以 ssh 进入跳转服务器,然后从那里 ssh(跳转)进入私有虚拟机。
我知道答案有点晚了但如果你仍然需要任何帮助,请将其评论出来。
答案2
答案3
如果您可以通过第一个 IP 连接,但不能通过第二个 IP 连接,则显然您没有更改虚拟机上的路由表以使其正常工作。我不能说它有明确的记录。这在故障排除部分和这里。
一种方法是向虚拟机添加以下启动脚本:
instance=http://metadata.google.internal/computeMetadata/v1/instance
get() { curl -sS "$instance/network-interfaces/1/$1" \
-H 'Metadata-Flavor: Google'; }
ip=`get ip`
gw=`get gateway`
ip route add default via "$gw" table 1
ip rule add from "$ip" table 1
这样,源 IP 等于第二个 IP 的数据包将转到第二个网关(而不是第一个网关,默认情况下是第一个网关)。为此,我为此类数据包创建了一条规则,以使用路由表 1,其中我将第二个默认路由添加到第二个网关。
他们还建议创建一个“到”规则和第二个网关的路由,但这似乎没有必要。
terraform
可以找到一个演示此内容的项目这里。