[Kubernetes] Istio for access log
취직 이후 글을 거의 못 썼습니다.
게을러서 그렇지만 차후 다른 분들이 이글을 보고 도움이 되었으면 싶어서 글을 작성합니다.
1. Helm chart 이용해서 istio 설치 하기
공식 사이트를 가보면 쉽게 istio 를 설치 할 수 있게 해두었습니다.
https://istio.io/latest/docs/setup/install/helm/
Install with Helm
Instructions to install and configure Istio in a Kubernetes cluster using Helm.
istio.io
해당 cmd 를 이용하면 빠르게 설치할 수 있지만 당연히 value 들이 무엇을 하는지에 대한 감이 안 잡힐 수 도 있다고 생각합니다.
그래서 우선 istio repo 를 다운 받아 봅니다.
git clone https://github.com/istio/istio
이후 해당 repo 안 manifests/charts/istio-control/istio-discovery 로 들어가게 되면
chart.yaml, values.yaml, templates 등 helm 으로 배포하는데 필요한 모든 것이 있습니다.
helm 을 통해서 배포를 진행해도 되지만
accesslog 를 istio-proxy 를 통해서 받아오기 위해 설정하는 것이기 때문에 해당 부분에 대한 값을 추가 해줄 것 입니다.
우선은 helm 을 통해 local 로 설치 해주어도 되고 아니면 helm repo 를 받아온 다음 install 을 진행해주어도 된다.
2. access log 를 위한 설정
values.yaml 안에서 meshconfig 라는 값을 찾아 줍니다.
제가 받은 repo 안에서는 대략 line 185 에서 meshConfig: 라는 부분을 찾았습니다.
해당 부분에 accessLog 에 관련된 설정을 해주지 않으면 access log 를 받아 올 수 없게 됩니다.
정확하게 말하자면 accesslog 에 대한 file 을 설정 해주고 해당 출력을 어떤 방식으로 출력할지에 대해서 설정 해주는 방식을 통해서 access log 를 출력한다.
위 처럼 설정 해주게 되면 istio-proxy 에서 생성되는 accesslog 를 stdout 을 통해서 TEXT 형태로 내보낸다는 사실을 알 수 있다.
3. 실제 로그 확인
예시로 prometheus 에서 어떻게 출력하는지 테스트 해보았습니다.
[2023-05-11T12:29:09.749Z] "POST /api/v1/query_range HTTP/1.1" 200 - via_upstream - "-" 672 1016 836 2 "127.0.0.1, xx.xxx.x.xxx" "node-fetch" "f265651e-1141-4bf3-a131-36375b8aa340" "00F7C3FC44644A7B6E124A1AFBCB7A1D.gr7.us-west-2.eks.amazonaws.com" "10.150.0.65:9090" inbound|9090|| 127.0.0.6:57419 10.150.0.65:9090 xx.xxx.x.xxx:0 - default
https://istio.io/latest/docs/tasks/observability/logs/access-log/
Envoy Access Logs
This task shows you how to configure Envoy proxies to print access logs to their standard output.
istio.io
위 로그에서 access log 를 어떻게 보는지에 대해서 말하고 있습니다.
어떤 method 로 어느 path 로 가고 어떤 응답이 왔는지에 대해서
위 예시에서 보면 10.150.0.65 으로 9090 port 로 POST 요청이 왔다는 사실을 알 수 있습니다.
4. Envoy 용어 정리
HOST : 논리적인 네트워크 애플리케이션을 의미한다. 각각의 애플리케이션이 주소를 이용하여서 호스트가 될 수 있다.
DOWNSTREAM : Envoy 에 요청을 보내고 응답을 받는 호스트 입니다.
UPSTREAM : Envoy 로 부터 요청을 받아서 응답을 보내는 호스트를 의미합니다.
위 용어 정리는 아직 미숙한 부분이 많아서 추가적으로 찾아서 부연 설명을 넣을 수 있도록 하겠습니다.