본문 바로가기

💭 고찰 (考察)/💭 IT, 일, 업무

서비스 확인에 대한 생각?

728x90
반응형

# 서비스 확인에 대한 고민

- 현재의 서비스가 정상적으로 실행되고 있는지 확인하는 방법은 여러가지가 있다.

로그를 확인하는 방법도 있고, 네트워크 흐름을 확인해서 정상적으로 트래픽이 가고 있는지, 커넥션이 되고 있는지 확인하는 방법 등 여러가지가 존재한다.

- 오늘은 네트워크 트래픽을 활용하여 서비스가 END-TO-END 로 어떻게 이동하는지 확인하는 방법에 대해서 알아보고자 한다.

- 환경은 EKS, 즉 쿠버네티스 환경의 컨테이너에서 출발하여 해당 서비스가 어떤 흐름으로 동작하는지 확인해 보고자 한다.

1. 일단 eks의 컨테이너로 접근을 한 뒤 ping 명령어를 통해서 해당 주소와 포트로 접근이 가능한지 확인한다.

- 컨테이너로 접근

kubectl get pod -n {name_space} {pod_name}

kubectl exec -it {pod_name} bash

2. 그리고 traceroute를 확인하여 해당 도메인의 네트워크 경로를 확인한다.

- traceroute 설치

- pod로 접근 후 아래의 명령어를 통해 traceroute를 설치한다.

# traceroute 설치
apt-get install traceroute

# traceroute DNS 테스트
traceroute google.com

- traceroute 결과 → google.com 테스트

# traceroute google.com
traceroute to google.com (142.250.199.110), 64 hops max
  1   10.0.130.255  0.003ms  0.002ms  0.002ms 
  2   10.0.2.101  0.109ms  0.075ms  0.076ms 
  3   52.79.0.147  6.553ms  52.79.0.141  39.500ms  59.545ms 
  4   100.65.18.80  4.094ms  100.65.18.160  62.157ms  29.339ms 
  5   100.66.8.216  9.900ms  100.66.8.254  3.817ms  1.114ms 
  6   100.66.10.192  2.144ms  100.66.10.160  7.261ms  8.154ms 
  7   100.66.6.3  4.786ms  100.66.6.39  35.923ms  59.039ms 
  8   100.66.4.229  38.143ms  100.66.4.57  3.974ms  8.039ms 
  9   100.65.11.65  1.121ms  100.65.9.161  0.844ms  0.427ms 
 10   54.239.122.11  3.167ms  54.239.122.13  5.223ms  54.239.122.11  2.344ms 
 11   54.239.122.130  17.935ms  54.239.123.50  3.447ms  2.708ms 
 12   54.239.122.173  15.734ms  2.583ms  2.326ms 
 13   100.91.151.19  28.875ms  28.322ms  28.661ms 
 14   240.0.188.12  32.399ms  240.2.0.15  28.263ms  28.138ms 
 15   52.93.250.228  34.135ms  29.249ms  58.302ms 
 16   99.83.92.93  35.698ms  99.82.179.83  30.426ms  30.189ms 
 17   *  *  * 
 18   142.250.58.192  31.646ms  108.170.233.190  32.145ms  31.900ms 
 19   108.170.242.98  33.713ms  142.250.214.139  31.818ms  108.170.243.43  28.801ms 
 20   142.250.199.110  32.380ms  32.107ms  31.863ms

3. 경로 확인 결과

- traceroute는 DNS 주소가 있을경우 DNS 주소를 도착지로 설정 하고 도착지 까지의 경로를 화면에 보여준다.

- DNS 주소가 아닌 서버의 ip:port_number 로 테스트 할 경우는 아래의 명령어를 통해 가능하다.

- pod의 컨테이너로 접근하여 동일한 vpc의 ec2에 설치된 애플리케이션의 port가 커넥션이 되는지 테스팅

curl -v telnet://{ip_정보}:{port_정보}

curl -v telnet://10.100.0.0:5433

- 결과

# curl -v telnet://10.100.0.0:5433
*   Trying 10.100.0.0:5433...
* TCP_NODELAY set
* Connected to 10.100.0.0 (10.100.0.0) port 5432 (#0)

- 좀더 알아볼거

* 트래픽 흐름을 볼 수 있는 opensource나 스크립트가 있는지...

- traceroute 사용 옵션은 아래와 같다.

traceroute --usage
Usage: traceroute [-I?V] [-f NUM] [-g GATES] [-m NUM] [-M METHOD] [-p PORT]
            [-q NUM] [-t NUM] [-w NUM] [--first-hop=NUM] [--gateways=GATES]
            [--icmp] [--max-hop=NUM] [--type=METHOD] [--port=PORT]
            [--tries=NUM] [--resolve-hostnames] [--tos=NUM] [--wait=NUM]
            [--help] [--usage] [--version] HOST

4. 마치며

- 인프라를 구성하다 보면 해당 경로가 실제로 열려 있는지 방화벽 설정은 어떻게 되어 있는지 보안그룹 또한 어떻게 설정이 되어 있는지 여러가지 고려할 사항이 많다. 인프라가 간단하면 별 문제가 되지 않지만 복잡하면... 정확한 구성도나 아키텍쳐가 없으면 사실상 멘땅에 헤딩 하면서 새로 그려야 하므로 어려워 진다.

- 그렇기 때문에 중간중간에 네트워크 흐름을 파악하고 어디서부터 흐름이 막혔는지 확인하는 작업은 매우 중요하다.

네트워크 흐름을 파악하는 방법은 인터넷에서 여러가지 찾을 수 있지만 OS 환경이나 네트워크 설정등에 영향을 받으므로 여러가지 방법에 대한 Case-Study와 더불어 자신만의 확인 방법등을 가지고 있는것이 좋다.

728x90
반응형