# 서비스 확인에 대한 고민
- 현재의 서비스가 정상적으로 실행되고 있는지 확인하는 방법은 여러가지가 있다.
로그를 확인하는 방법도 있고, 네트워크 흐름을 확인해서 정상적으로 트래픽이 가고 있는지, 커넥션이 되고 있는지 확인하는 방법 등 여러가지가 존재한다.
- 오늘은 네트워크 트래픽을 활용하여 서비스가 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와 더불어 자신만의 확인 방법등을 가지고 있는것이 좋다.