ㅡ.ㅡ

[Service Mesh] Linkerd 본문

Network

[Service Mesh] Linkerd

ekwkqk12 2021. 11. 14. 15:14

Linkerd CLI 설치

## Linkerd CLI 실행파일 
curl -fsL https://run.linkerd.io/install | sh
cp .linkerd2/bin/linkerd-stable-2.11.1 /bin/linkerd

## 구동환경 체크
linkerd check --pre

## Linkerd Cluster 설치
linkerd install | kubectl apply -f -

## Linkerd Cluster 설치 확인
linkerd check

Linkerd-Viz(DashBoard) 설치

## Helm Chart 다운로드
helm repo add linkerd https://helm.linkerd.io/stable
helm repo update
helm pull linkerd/linkerd-viz --untar

## 아래 Values.yaml 수정 후 마지막에 실행
helm upgrade --install linkerd-viz -f values.yaml ./ 

Ingress 추가(template/ingress.yaml)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: linkerd-viz
  name: linkerd-viz-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/group.order: '룰셋 번호'
    alb.ingress.kubernetes.io/group.name: external-alb
    alb.ingress.kubernetes.io/success-codes: 200,301,302
spec:
  rules:
  - host: 호스트명
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: web
          servicePort: 8084

아래 이미지와 같이 사이드카 프록시를 통해 통신된 트래픽 정보를 대략적으로 확인할 수 있고 해당 파드와 그라파나 대시보드를 통해 상세한 내용을 볼 수 있다.

공식문서를 확인해 보면 Prometheus-Stack을 통해 데이터를 저장하는 방법도 있는거같다.....
테스트를 해봤지만 그라파나쪽에서 Prometheus에 저장된 필드명을 변경해야되는건지.. Helm Chart에 내장된 Prometheus+ Grafana와 같이는 표현되지않았다... 추 후 다시 테스트후 작성 예정! >> Grafana에서 irate함수 사용시 Prometheus-stack의 scrape interval의 기본값이 30초로 설정되어있어 데이터가 나오지않는 이슈였습니다(Linkerd DashBoard에서 irate 시간 값을 60s로 설정해도 데이터가 잘 나옴, 추가로 Grafana Linkerd DashBoard에서 Prometheus의 이름이 소문자로 설정되어있음 해당값을 대문자로 수정시 해결가능)

prometheus-stack에 적용하는 방법은 아래와 같이 linkerd, linkerd-viz라는 네임스페이스의 데이터 scrape설정을 추가한다.
namespace는 구축된 linkerd와 같이 변경해야됨

## Prometheus-stack values.yaml

2026   prometheusSpec:
2036     ## Defaults to 30s.
2039     scrapeInterval: "10s"
2043     scrapeTimeout: "10s"
2047     evaluationInterval: "10s"

2386     additionalScrapeConfigs:
2387     - job_name: 'linkerd-controller'
2388       kubernetes_sd_configs:
2389       - role: pod
2390         namespaces:
2391           names:
2392           - 'linkerd-viz'
2393           - 'linkerd'
2394       relabel_configs:
2395       - source_labels:
2396         - __meta_kubernetes_pod_container_port_name
2397         action: keep
2398         regex: admin-http
2399       - source_labels: [__meta_kubernetes_pod_container_name]
2400         action: replace
2401         target_label: component
2402
2403     - job_name: 'linkerd-service-mirror'
2404       kubernetes_sd_configs:
2405       - role: pod
2406       relabel_configs:
2407       - source_labels:
2408         - __meta_kubernetes_pod_label_linkerd_io_control_plane_component
2409         - __meta_kubernetes_pod_container_port_name
2410         action: keep
2411         regex: linkerd-service-mirror;admin-http$
2412       - source_labels: [__meta_kubernetes_pod_container_name]
2413         action: replace
2414         target_label: component
2415
2416     - job_name: 'linkerd-proxy'
2417       kubernetes_sd_configs:
2418       - role: pod
2419       relabel_configs:
2420       - source_labels:
2421         - __meta_kubernetes_pod_container_name
2422         - __meta_kubernetes_pod_container_port_name
2423         - __meta_kubernetes_pod_label_linkerd_io_control_plane_ns
2424         action: keep
2425         regex: ^{{default .Values.proxyContainerName "linkerd-proxy" .Values.proxyContainerName}};linkerd-admin;linkerd$
2426       - source_labels: [__meta_kubernetes_namespace]
2427         action: replace
2428         target_label: namespace
2429       - source_labels: [__meta_kubernetes_pod_name]
2430         action: replace
2431         target_label: pod
2432       # special case k8s' "job" label, to not interfere with prometheus' "job"
2433       # label
2434       # __meta_kubernetes_pod_label_linkerd_io_proxy_job=foo =>
2435       # k8s_job=foo
2436       - source_labels: [__meta_kubernetes_pod_label_linkerd_io_proxy_job]
2437         action: replace
2438         target_label: k8s_job
2439       # drop __meta_kubernetes_pod_label_linkerd_io_proxy_job
2440       - action: labeldrop
2441         regex: __meta_kubernetes_pod_label_linkerd_io_proxy_job
2442       # __meta_kubernetes_pod_label_linkerd_io_proxy_deployment=foo =>
2443       # deployment=foo
2444       - action: labelmap
2445         regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
2446       # drop all labels that we just made copies of in the previous labelmap
2447       - action: labeldrop
2448         regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
2449       # __meta_kubernetes_pod_label_linkerd_io_foo=bar =>
2450       # foo=bar
2451       - action: labelmap
2452         regex: __meta_kubernetes_pod_label_linkerd_io_(.+)
2453       # Copy all pod labels to tmp labels
2454       - action: labelmap
2455         regex: __meta_kubernetes_pod_label_(.+)
2456         replacement: __tmp_pod_label_$1
2457       # Take `linkerd_io_` prefixed labels and copy them without the prefix
2458       - action: labelmap
2459         regex: __tmp_pod_label_linkerd_io_(.+)
2460         replacement:  __tmp_pod_label_$1
2461       # Drop the `linkerd_io_` originals
2462       - action: labeldrop
2463         regex: __tmp_pod_label_linkerd_io_(.+)
2464       # Copy tmp labels into real labels
2465       - action: labelmap
2466         regex: __tmp_pod_label_(.+)

Linkerd-viz prometheus, grafana 비활성화 및 주소 설정

59 # -- url of external prometheus instance
60 prometheusUrl: "Prometheus 도메인"
61
62 # -- url of external grafana instance with reverse proxy configured.
63 grafanaUrl: "Grafana 도메인"

280   enforcedHostRegexp: "Linkerd-viz 도메인"

296 grafana:
297   # -- toggle field to enable or disable grafana
298   enabled: false

343 prometheus:
344   # -- toggle field to enable or disable prometheus
345   enabled: false

Springboot App/Linkerd Injector Enable 설정

template:
    metadata:
      labels:
        app: {{ .Values.app_name }}
      annotations:
        linkerd.io/inject: enable

'Network' 카테고리의 다른 글

[Service Mesh] Istio  (0) 2022.02.02
[ServiceMesh] Emissary Ingress/Linkerd  (0) 2021.12.11