딥 링크
딥 링크 (Deep Links)
딥 링크를 사용하면 사용자가 Argo CD 사용자 인터페이스에서 Splunk, Datadog 같은 타사 시스템으로 빠르게 이동할 수 있어요. 운영자는 딥 링크 템플릿을 argocd-cm에 구성해서 타사 시스템 링크를 설정할 수 있답니다.
출처: 문서
본문
Argo CD 관리자는 argocd-cm에 구성된 딥 링크 템플릿을 제공해서 타사 시스템 링크를 설정할 수 있어요. 템플릿은 조건부로 렌더링될 수 있고, 링크가 표시되는 위치와 관련된 다양한 리소스 유형(프로젝트, 애플리케이션, 개별 리소스(파드, 서비스 등))을 참조할 수 있어요.
딥 링크 구성 (Configuring Deep Links)
딥 링크 구성은 argocd-cm에 <location>.links 필드로 존재하며, <location>은 어디에 표시될지 결정해요. <location>의 가능한 값은 다음과 같아요:
project: 이 필드 아래의 모든 링크는 Argo CD UI의 프로젝트 탭에 표시돼요application: 이 필드 아래의 모든 링크는 애플리케이션 요약(summary) 탭에 표시돼요resource: 이 필드 아래의 모든 링크는 리소스(deployments, pods, services 등) 요약 탭에 표시돼요
목록의 각 링크에는 다섯 개의 하위 필드가 있어요:
title: UI에 해당 링크로 표시될 제목/태그url: 딥 링크가 이동할 실제 URL. 이 필드는 위치에 따라 해당 애플리케이션, 프로젝트, 리소스 객체의 데이터를 사용하도록 템플릿화할 수 있어요. 템플릿화에는 text/template 패키지를 사용해요description(선택): 딥 링크가 무엇에 대한 것인지 설명icon.class(선택): 드롭다운 메뉴에 링크를 표시할 때 사용할 font-awesome 아이콘 클래스if(선택):true또는false로 평가되는 조건문으로,url필드와 같은 데이터에 접근할 수 있어요. 조건이true로 평가되면 딥 링크가 표시되고, 그렇지 않으면 숨겨져요. 필드를 생략하면 기본적으로 딥 링크가 표시돼요. 조건 평가에는 expr-lang/expr을 사용해요
[!NOTE] Secret 종류의 리소스는 데이터 필드가 redact 되지만 다른 필드는 딥 링크 템플릿에 접근할 수 있어요.
[!WARNING] 데이터 유출이나 악성 링크 생성을 막기 위해 url 템플릿과 입력값을 검증하세요.
앞서 언급했듯이 링크와 조건은 리소스의 데이터를 사용하도록 템플릿화할 수 있으며, 각 링크 카테고리는 해당 리소스에 연결된 서로 다른 유형의 데이터에 접근할 수 있어요. 시스템에서 템플릿화에 사용할 수 있는 리소스는 총 4가지예요:
app또는application: 애플리케이션 리소스 데이터에 접근하는 데 사용되는 키예요resource: 실제 k8s 리소스의 값에 접근하는 데 사용되는 키예요cluster: name, server, namespaces 등 관련 대상 클러스터 데이터에 접근하는 데 사용되는 키예요project: 프로젝트 리소스 데이터에 접근하는 데 사용되는 키예요
위 리소스는 특정 링크 카테고리에서 접근할 수 있으며, 각 카테고리에서 사용 가능한 리소스 목록은 다음과 같아요:
resource.links:resource,application,cluster,projectapplication.links:app/application,clusterproject.links:project
딥 링크와 그 변형이 포함된 argocd-cm.yaml 파일 예시:
# sample project level links
project.links: |
- url: https://myaudit-system.com?project={{.project.metadata.name}}
title: Audit
description: system audit logs
icon.class: "fa-book"
# sample application level links
application.links: |
# pkg.go.dev/text/template is used for evaluating url templates
- url: https://mycompany.splunk.com?search={{.app.spec.destination.namespace}}&env={{.project.metadata.labels.env}}
title: Splunk
# conditionally show link e.g. for specific project
# github.com/expr-lang/expr is used for evaluation of conditions
- url: https://mycompany.splunk.com?search={{.app.spec.destination.namespace}}
title: Splunk
if: application.spec.project == "default"
- url: https://{{.app.metadata.annotations.splunkhost}}?search={{.app.spec.destination.namespace}}
title: Splunk
if: app.metadata.annotations.splunkhost != ""
# sample resource level links
resource.links: |
- url: https://mycompany.splunk.com?search={{.resource.metadata.name}}&env={{.project.metadata.labels.env}}
title: Splunk
if: resource.kind == "Pod" || resource.kind == "Deployment"
# sample checking a tag exists that contains - or / and how to alternatively access it
- url: https://mycompany.splunk.com?tag={{ index .resource.metadata.labels "some.specific.kubernetes.like/tag" }}
title: Tag Service
if: resource.metadata.labels["some.specific.kubernetes.like/tag"] != nil && resource.metadata.labels["some.specific.kubernetes.like/tag"] != ""