マイクロインスタンスを使用してポート8080で「hello world」を表示する単純なPython httpサーバーを実行しようとしています。また、Nginxの背後で実行されているTornadoの4つのインスタンスがあります。ポート80は問題ではありません。
ファイアウォール設定にポート8080を追加し、ポート8080が開いていてサーバーでリッスンしていることを確認しましたが、何をしても、接続は常に拒否されます。ブラウザ、telnet、wgetを使用して接続しようとしましたが、すべての接続が拒否されました。
netstat -an | grep "LISTEN "
の出力は次のとおりです
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8003 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::8000 :::* LISTEN
tcp6 0 0 :::8001 :::* LISTEN
tcp6 0 0 :::8002 :::* LISTEN
tcp6 0 0 :::8003 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
これが私のiptablesリストです
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http-alt
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Python私が使用しているスクリプト:
#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
PORT_NUMBER = 8080
#This class will handles any incoming request from
#the browser
class myHandler(BaseHTTPRequestHandler):
#Handler for the GET requests
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
# Send the html message
self.wfile.write("Hello World!")
return
try:
#Create a web server and define the handler to manage the
#incoming request
server = HTTPServer(('', PORT_NUMBER), myHandler)
print 'Started httpserver on port ' , PORT_NUMBER
#Wait forever for incoming htto requests
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down the web server'
server.socket.close()
ネットワークには、対応するファイアウォールルールがありますか?次の手順に従って作成します。
Developers Console に移動し、対応するプロジェクトをクリックします。
「計算」をクリックします
「ネットワーク」をクリックします
対応するネットワークの名前をクリックします。インスタンスがどのネットワークにあるかは、「Compute Engine」セクションの下の「VMインスタンス」をクリックするか、コマンドで確認できます。
gcloud compute instances describe <instance> | grep "network:" | awk -F/ '{print $(NF)}'
[ファイアウォールルール]セクションで、[新規作成]をクリックします
ファイアウォールルールの名前を入力し、[プロトコルとポート]フィールドに「tcp:8080」と入力します
ルールを保存する
その後、HTTPサーバーにアクセスできるようになります。
それ以外の場合は、次のコマンドを使用して、マシンがそのポートでSYN TCPパケットを受信するかどうかを確認できます:Sudo tcpdump -i eth0 port 8080
それが役に立てば幸い
GCE Webコンソール>ネットワーク>ファイアウォールルール>ルールを編集し、ターゲットタグを削除して適用します。
GL
正しいポートを追加してください。上記の答えは "tcp:80"ですが、サーバーが別のポートで実行されている場合は機能しません。それがおそらく他の人のために働いていない理由です
Kubernetesを展開し、ポッドをサービスとして公開した後、クラウドシェルからポート8080でアプリケーションを表示しようとしました。ただし、次のエラーが表示されました:エラー:ポート8080でCloud Shellに接続できませんでした。サーバーがポート8080でリッスンしていることを確認して、再試行してください。
また、外部IPアドレスを使用してアプリケーションにアクセスしようとしました http:// external-ip:8080 / ですが、ページに接続できませんでした
ネットワークルールを作成すると、おそらく問題が発生します。ネットワークルールが記述され、関連するMetaTagが作成されたら、VMインスタンスに同じMetaTagが含まれていることを確認して、必要なトラフィックがマシンにリダイレクトされるようにします。
何が問題だったのかはまだわかりませんが、インスタンスとネットワークを削除してから新しいものを作成しました。新しいインスタンスとネットワークは正常に機能しているように見えるので、古いものと同じ問題を抱えていないように見えるので、古いネットワークで遊んでいるときに何かがおかしかったと思います。