본문 바로가기

IT

쿠버네티스[EKS] Kiali 설치 및 기존 Prometheus 활용

728x90

기존 Prometheus는 해당 helm chart를 활용하여 설치하였다.

https://prometheus-community.github.io/helm-charts

https://sh970901.tistory.com/151

 

쿠버네티스[EKS] 프로메테우스, 그라파나 helm 설치

helm을 먼저 설치하자. https://sh970901.tistory.com/150 Helm, Helm chart쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션을 관리하기 위한 강력한 오케스트레이션 도구로 널리 사용되고 있다. 하지만 쿠

sh970901.tistory.com

 

 

Istio Addon을 띄우기 위한 yaml 파일이 Github에 있어 이를 활용하였다. addon 파일을 그냥 apply하면 된다. 꼭 istio-system 네임스페이스에 설치하도록 하자.

export KIALI_ADDON=https://raw.githubusercontent.com/istio/istio/1.20.2/samples/addons/kiali.yaml
kubectl apply -f $KIALI_ADDON -n istio-system

 

만약 기존 Prometheus를 쓰지 않고 Kiali 만을 위해 구축하는 것이라며 이 또한 간단하게 설치할 수 있다.

export PROMETHEUS_ADDON=https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/prometheus.yaml
kubectl apply -f $PROMETHEUS_ADDON -n istio-system

 

하지만 필자는 기존에 EKS Cluster/Nodes/Pods 모니터링을 위해 구축한 기존 Prometheus 가 있었기에 해당 Prometheus와 통합하기 위한 삽질을 기록한다.

 

values.yaml 파일에 additionalScrapeConfigs에 수정이 필요하다. 아래와 같이 Scrape config를 추가한다.

      - job_name: 'istiod'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istiod;http-monitoring
      - job_name: 'istio-mesh'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system

        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istio-telemetry;prometheus

      # Scrape config for envoy stats
      - job_name: 'envoy-stats'
        metrics_path: /stats/prometheus
        kubernetes_sd_configs:
        - role: pod

        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_pod_container_port_name]
          action: keep
          regex: '.*-envoy-prom'
        - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:15090
          target_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: namespace
        - source_labels: [__meta_kubernetes_pod_name]
          action: replace
          target_label: pod_name

      - job_name: 'istio-policy'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system


        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istio-policy;http-monitoring

      - job_name: 'istio-telemetry'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system

        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istio-telemetry;http-monitoring

      - job_name: 'pilot'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system

        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istio-pilot;http-monitoring

      - job_name: 'galley'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system

        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istio-galley;http-monitoring

      - job_name: 'citadel'
        kubernetes_sd_configs:
        - role: endpoints
          namespaces:
            names:
            - istio-system

        scrape_interval: 15s
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: istio-citadel;http-monitoring

 

그 다음 위에서 받은 kiali.yaml 파일에 이를 참고하여 ConfigMap을 수정해야한다. 

https://stackoverflow.com/questions/63372998/how-to-install-kiali-dashboard-with-prometheus-in-place-in-gke-with-default-isti 

 

How to Install Kiali Dashboard with prometheus in place in GKE with default istio beta feature?

I have been trying to install Kiali on an Istio (beta) enabled GKE cluster, I am following the official documentation to install Kiali using this link but Prometheus is somehow damaged since GCP has

stackoverflow.com

data:
  config.yaml: |
        external_services:
              custom_dashboards:
                enabled: true
              istio:
                root_namespace: istio-system
              grafana:
                url: http://prometheus-grafana.monitoring.svc.cluster.local:80
                in_cluster_url: http://prometheus-grafana.monitoring.svc.cluster.local:80
              prometheus:
                auth:
                  ca_file: ''
                  insecure_skip_verify: false
                  password: ''
                  token: ''
                  type: none
                  use_kiali_token: false
                  username: ''
                custom_metric_url: http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local:9090/
                url: http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local:9090/

 

이전에 구축한 Prometheus와 Grafana의 svc주소를 external_services에 추가하는 작업을 마치면 정상적으로 Kiali 대시보드에서 메트릭을 확인할 수 있다.

 

Tracing 지표를 제외하고는 확인이 되는데 추가적인 addon이 필요하다. Jaeger를 많이 사용한다고 하는데 이를 설치하여 적용하는 것은 다음 포스팅에서 확인하도록 하자.