minikube에 Kafka 애플리케이션을 올리면서(docker-compose로 돌던 Kafka 앱을 minikube에 구성하기) Pod 안에서 두 가지를 확인해야 했다. 다른 Pod의 포트로 연결이 되는지, 그리고 이 Pod의 애플리케이션이 포트를 리스닝하고 있는지. 앞의 것은 netcat(nc)으로, 뒤의 것은 netstat -tuln으로 봤다.

번거로운 건 설치였다. 컨테이너 이미지마다 배포판이 다르고 배포판마다 패키지 매니저와 패키지 이름이 다르다. kafka-ui Pod에서는 apk를, Spring Boot Pod에서는 apt-get을 썼다. 매번 찾아보지 않으려고 주요 Linux 배포판별 명령을 한곳에 모아 둔다.

nc -zv는 데이터 없이 연결만 시도한다

netcat은 네트워크 연결을 테스트하고 다른 서버의 포트와 통신이 되는지 확인하는 유틸리티다. 포트가 열려 있는지만 볼 때는 -zv 두 옵션이면 된다.

# [usage] nc -zv {수신 target IP} {open 되어있는지 확인하고자 하는 port}
nc -zv 10.244.0.74 9092
  • -z: 데이터를 보내지 않고 연결만 시도한다.

  • -v: 자세한 출력(Verbose)을 켜서 연결 과정을 보여 준다.

열려 있으면 succeeded, 닫혀 있으면 Connection refused가 나온다.

Connection to 10.244.0.74 9092 port [tcp/*] succeeded!
connect to 10.244.0.74 port 9094 (tcp) failed: Connection refused

배포판별 설치

사용법은 어디서나 위와 같고 설치 명령만 다르다.

# Debian, Ubuntu (apt)
sudo apt update && sudo apt install netcat-openbsd

# Fedora, CentOS (dnf 또는 yum)
sudo dnf install nc
sudo yum install nc          # CentOS에서는 yum이 보편적

# Arch Linux (pacman)
sudo pacman -Syu gnu-netcat  # -Syu는 시스템 전체 업그레이드도 함께 한다

# openSUSE (zypper)
sudo zypper install netcat-openbsd

# Alpine Linux (apk)
apk update && apk add netcat-openbsd

# Amazon Linux 2 (yum)
sudo yum install nc

# Amazon Linux 2023 (dnf)
sudo dnf install nc

netstat -tuln은 ss -tuln으로 대신한다

netstat은 네트워크 연결, 라우팅 테이블, 인터페이스 통계, masquerade 연결, 멀티캐스트 멤버십 등을 보여 주는 명령이다. 리스닝 중인 포트만 보려면 -tuln을 붙인다.

  • -t, -u: TCP와 UDP 소켓

  • -l: 리스닝 상태인 소켓만

  • -n: 서비스 이름 대신 포트 번호를 숫자 그대로

netstat이 들어 있는 net-tools는 최근 대부분의 배포판에서 ss로 대체되고 있다. ss는 netstat보다 빠르고 효율적으로 정보를 보여 준다고 알려져 있다. 옵션도 -tuln을 그대로 쓴다. ss는 iproute2 패키지에 들어 있고, 최신 배포판에는 대부분 기본으로 깔려 있다. 없으면 아래처럼 설치한다.

# Debian, Ubuntu
sudo apt update && sudo apt install iproute2

# Fedora, CentOS
sudo dnf install iproute
sudo yum install iproute     # CentOS

# Arch Linux
sudo pacman -Syu iproute2

# openSUSE
sudo zypper install iproute2

# Alpine Linux
apk update && apk add iproute2

# Amazon Linux 2
sudo yum install iproute

# Amazon Linux 2023
sudo dnf install iproute

설치 후에는 어느 배포판이든 같다.

ss -tuln

Red Hat 계열(Fedora, CentOS, Amazon Linux)만 패키지 이름이 iproute2가 아니라 iproute다. 설치가 실패하면 이 차이부터 의심하면 된다.

결국 연결을 두드려 볼 때는 nc -zv, 리스닝 포트를 볼 때는 ss -tuln. 명령 자체는 배포판을 가리지 않고, 다른 건 패키지 이름뿐이다.