
私の人生初めて、どのプロセスがLinuxの特定のポートをリッスンしているのかわかりません。 :)
これは K8s を実行する Ubuntu Server 22.04 インストールです。クラスタには、ポート80と443にバインドされた受信コントローラがあります。これが機能する理由は次のとおりです。
:~# curl localhost
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
:~# curl localhost:443
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>
~# curl https://localhost:443 -k
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
問題は、どのプロセスがこれらのポートにどのようにバインドされるかを知ることができないことです。を試してみましたが、ss
何も表示されません。
:~# ss -tlnpu | grep 80
tcp LISTEN 0 4096 192.168.13.191:2380 0.0.0.0:* users:(("etcd",pid=1452,fd=8))
tcp LISTEN 0 4096 127.0.0.1:2380 0.0.0.0:* users:(("etcd",pid=1452,fd=7))
:~# ss -tlnpu | grep 443
tcp LISTEN 0 4096 *:6443 *:* users:(("kube-apiserver",pid=1546,fd=7))
ポートでリッスンしている実際のプロセスを見つけるには?
答え1
特定のケースではKubernetesを実行しているため、dockerコマンドを使用してそのポートでリッスンしているコンテナを見つけるのに最適な機会があります。
$ docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
CONTAINER ID NAMES PORTS
a690f047d3c8 quizzical_sanderson 0.0.0.0:8080->8080/tcp, 8443/tcp
431ff622ad62 tender_payne 0.0.0.0:9191->9090/tcp
78941a2ee170 awx_task 8052/tcp
2f5fc70ac576 awx_web 0.0.0.0:80->8052/tcp, 0.0.0.0:443->8053/tcp
コンテナがawx_web
ホストのポート80と443をコンテナのプライベートネットワークネームスペースからそれぞれポート8052と8053に転送するのがわかります。
docker ps
パラメータなしで直接実行することもできます--format
。私はこの--format
パラメータを使用してより読みやすく便利にしました。