2014-10-03 87 views
0

我有一个目的没有公有IP的实例。GCE +负载均衡器+没有公共IP的实例

我有GCE网络负载平衡器使用上述实例作为目标池。

一切都很好。

然后我希望我的实例与互联网进行交流的,所以我跟着这个文档:https://cloud.google.com/compute/docs/networking#natgateway(配置NAT网关)

实例可以与互联网罚款负载平衡器沟通无法与我的实例了沟通。

我认为这些步骤中创建的问题与负载均衡器:

$ gcloud compute routes create no-ip-internet-route --network gce-network \ 
    --destination-range 0.0.0.0/0 \ 
    --next-hop-instance nat-gateway \ 
    --next-hop-instance-zone us-central1-a \ 
    --tags no-ip --priority 800 

[email protected]:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

```

你知道什么可以做,使两件事一起工作?

+0

有什么特别的理由说明你为什么要使用NAT网关?否则,你可以创建一个防火墙规则来允许你想要的流量和端口。你的实例应该能够通过互联网连接就好了。 – Boyan 2014-10-07 14:49:33

+1

@Boyan根据Google文档:“目前,发送到Internet的任何数据包都必须由具有外部IP地址的实例发送。如果创建从特定实例向Internet发送数据包的路由,则该实例也必须有一个外部IP。如果您创建了一个将数据包发送到Internet网关的路由,但源实例没有外部IP地址,则该数据包将被丢弃。“ - 因此,似乎需要NAT网关才能通过实例与Internet进行通信 – TikTak 2014-10-07 17:04:36

回答

1

我已经重新创建了您所描述的环境并且没有遇到任何问题。

$ gcloud compute routes create no-ip-internet-route --network gce-network \ 
--destination-range 0.0.0.0/0 \ 
--next-hop-instance nat-gateway \ 
--next-hop-instance-zone us-central1-a \ 
--tags no-ip --priority 800 

,上面的命令将做的唯一事情,就是创建一个路由规则,以便在没有外部交通实例指出,他们想要需要发送的任何通信的NAT网关。这不会影响LB到达您的实例的能力。

在我的测试,我跟着你引用的确切指南,which you can find here,那结果:

  • 1新的网络
  • 1防火墙规则以允许端口SSH 22
  • 1防火墙规则允许所有内部流量
  • 1个新实例充当NAT网关
  • 1个新实例内部实例没有外部IP地址

我还将内部实例添加到'TargetPool'并为测试目的创建了一个LB。

我的内部实例既可以通过LB的外部地址访问,也可以通过NAT网关在内部访问。由于NAT网关的配置,内部实例也能够与Internet进行通信。一切都按预期工作。

我对你和其他读者的建议(因为这篇文章现在已经很老了)是再试一次。确保你没有任何其他冲突的规则,路线或软件。