2014-10-03 64 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進行通信。一切都按預期工作。

我對你和其他讀者的建議(因爲這篇文章現在已經很老了)是再試一次。確保你沒有任何其他衝突的規則,路線或軟件。