내 생애 처음으로 어떤 프로세스가 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
매개변수를 사용하여 더 읽기 쉽고 편리하게 만들었습니다.