Amazon-Web-Services

無法使用公共 IP:80 連接在 ec2 上執行的 Web 服務

  • December 10, 2018

我有這個帶有私有 IP 172.31.11.204 和公共 IP 34.205.XX 的 EC2 實例我的 Web 服務在私有 IP 172.31.11.204 和埠 31336 上執行。

  1. 在 EC2 內部,我可以使用curl 172.31.11.204:31336
  2. 在我的電腦上,我可以使用 ec2 公共 IP 和埠 31336 訪問它 curl 34.205.X.X:31336

但我無法使用埠 80 訪問服務,即 curl 34.205.26.X:80

我的安全組規則非常好。

另外,我嘗試在 IPtables 中添加以下 nat 規則 -

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.31.11.204:31336

或者

sudo iptables -t nat -I PREROUTING --src 0/0 --dst 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 31336

當我執行 tcpdump 時,我注意到傳入連接受到上述規則的影響,但返回流量卡在 172.31.11.204.80

我搜尋了很多,但找不到任何解決方案。

兩種選擇:

  1. 你為什麼不讓你的應用程序監聽埠 80 並完成它呢?由於您想將所有流量重定向到它,因此它的安全性不會降低。
  2. 您可能需要在 INPUT 鏈中打開埠 80:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

然後是沒有地址的重定向規則:

iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 31336

也許--to-ports 127.0.0.1:31336,不確定。

也嘗試設置sysctl -w net.ipv4.conf.eth0.route_localnet=1- 這可能是需要的。

但是,如果我是你,我只會讓應用程序在埠 80 上偵聽;)


**更新:**您應該已經提到監聽的容器31336是由Kubernetes管理的!在這種情況下,您需要一個Service來接受外部連接並將它們轉發到Pod

在這裡查看更多詳細資訊:https ://kubernetes.io/docs/concepts/services-networking/service/

希望有幫助!

引用自:https://serverfault.com/questions/943598