-
선언적 배포 트러블슈팅: eck-custom-resources operator 도입 실패 포스트모템이코에코(Eco²)/Troubleshooting 2025. 12. 18. 11:51

https://github.com/xco-sk/eck-custom-resources
GitHub - xco-sk/eck-custom-resources: Kubernetes operator for Indices, Index Templates, Roles, Users and other Elasticsearch and
Kubernetes operator for Indices, Index Templates, Roles, Users and other Elasticsearch and Kibana related resources. - xco-sk/eck-custom-resources
github.com
결과
작업 기간: 2025-12-18 01:11 ~ 03:07 (약 2시간)
결론: 도입 실패 → 폐기요약
Kibana 대시보드를 Kubernetes CRD로 선언적 관리하기 위해
eck-custom-resources오픈소스 operator를 도입했으나, 지속적인 호환성 문제와 프로젝트 유지보수 중단으로 폐기 결정.
목표
- Kibana 대시보드를 Git으로 버전 관리
- ArgoCD GitOps와 통합하여 선언적 배포
- Dashboard, DataView를 Kubernetes CR로 정의
사용한 도구
도구 버전 링크 eck-custom-resources v0.7.0 https://github.com/xco-sk/eck-custom-resources ECK Operator 2.9+ https://github.com/elastic/cloud-on-k8s Kibana 8.11.0 -
타임라인 (커밋 기준)
시간 커밋 작업 내용 결과 01:11 791dfced초기 도입 - Dashboard, DataView CR 정의 ❌ CR 생성 안됨 01:31 dfd724c0CRD 스키마 수정 ❌ KibanaInstance not found 01:50 928769e9eck-custom-resources operator 추가 ❌ operator 배포 실패 02:03 80a2cab7KibanaInstance 설정 추가 ❌ enabled 필드 누락 02:15 255acff7spec.enabled: true추가❌ certificate 에러 02:19 931dc7f7certificate 설정 추가 ❌ HTTPS/HTTP 불일치 02:29 ca54838dNetworkPolicy 수정 (elastic-system → logging) ❌ connection timeout 02:31 a887ea38HTTP URL로 변경 ✅ operator 연결 성공 02:34 3b7b5d5cDataView body 형식 수정 ❌ title undefined 02:36 5d488423인덱스 패턴 logs-* 수정 ❌ data_view wrapper 문제 02:41 0163c6c1data_view wrapper 제거 ✅ DataView 생성 성공 02:48 39115431searchSourceJSON 추가 ❌ searchSource 에러 02:52 2741c0e5패널별 references 추가 ❌ 여전히 에러 03:01 0b62f1f8indexRefName 추가 ❌ 여전히 에러 03:07 ec910d75indexRefName 제거 (정상 대시보드 참고) ❌ 여전히 에러 총 소요 시간: 약 2시간
커밋 횟수: 16회
성공률: 0% (대시보드 렌더링 실패)
발생한 에러들
1. KibanaInstance not found
KibanaInstance.kibana.eck.github.com "eco2-kibana" not found원인: ArgoCD sync-wave 순서 문제
해결: sync-wave 조정2. Required field 'enabled'
KibanaInstance.kibana.eck.github.com "eco2-kibana" is invalid: spec.enabled: Required value원인: CRD 스키마에 필수 필드 누락
해결:spec.enabled: true추가3. Certificate not configured
Failed to configure http client, certificate not configured (kibana.certificate)원인: HTTPS 연결 시 인증서 미설정
해결:spec.certificate추가4. HTTP response to HTTPS client
http: server gave HTTP response to HTTPS client원인: ECK Kibana가 TLS disabled 상태
해결: URL을http://로 변경5. Connection timeout
dial tcp ...: connect: connection timed out원인: NetworkPolicy가 elastic-system → logging 차단
해결: NetworkPolicy 수정6. DataView title undefined
[request body.data_view.title]: expected value of type [string] but got [undefined]원인: DataView CR body 형식이 Kibana API와 불일치
해결:data_viewwrapper 제거7. Cannot read 'searchSource' (최종 미해결)
Cannot read properties of undefined (reading 'searchSource')원인: Lens 패널의 references 구조가 Kibana 8.x와 호환되지 않음
시도한 해결책:kibanaSavedObjectMeta.searchSourceJSON추가- top-level
references배열에 패널별 참조 추가 indexRefName추가/제거
결과: 모든 시도 실패
🔍 근본 원인 분석
1. 프로젝트 유지보수 중단
- 마지막 릴리즈: 2024년 2월 5일 (v0.7.0)
- 약 10개월간 업데이트 없음
- Kibana 8.x의 Dashboard JSON 구조 변경에 대응 안됨
2. Kibana Saved Objects API 변경
- Kibana 8.7+에서 대부분의 Saved Objects API deprecated
- Import/Export API만 지원
- eck-custom-resources는 구버전 API 사용
3. Lens 시각화 복잡성
- Lens 패널은 by-value로 저장 시 복잡한 references 구조 필요
- 정확한 JSON 구조가 문서화되어 있지 않음
- Kibana UI에서 생성한 대시보드와 구조가 미묘하게 다름
대안
1. Kibana Import API + Job (권장)
apiVersion: batch/v1 kind: Job metadata: name: import-kibana-dashboards spec: template: spec: containers: - name: import image: curlimages/curl command: ["sh", "-c", "curl -X POST kibana:5601/api/saved_objects/_import ..."]2. Elastic Terraform Provider
resource "elasticstack_kibana_import_saved_objects" "dashboards" { file_contents = file("dashboards.ndjson") }3. Kibana UI + Export → Git
- Kibana UI에서 대시보드 생성
- Export → ndjson
- Git 저장
- CI/CD에서 Import
교훈
- 오픈소스 도입 전 유지보수 상태 확인 필수
- 마지막 커밋/릴리즈 날짜
- 이슈 응답 속도
- 커뮤니티 활성도
- 복잡한 JSON 구조는 UI에서 생성 후 Export가 안전
- Kibana Dashboard JSON은 버전별로 미묘하게 다름
- 수동 작성 시 디버깅이 매우 어려움
- 공식 도구 우선 검토
- Elastic 공식 Terraform Provider 존재
- 커뮤니티 프로젝트보다 안정적
정리 작업
폐기된 파일들:
workloads/kibana/base/(Dashboard, DataView, KibanaInstance CR)clusters/dev/apps/64-eck-custom-resources-operator.yamlclusters/dev/apps/65-eck-custom-resources-cr.yaml
Reference
'이코에코(Eco²) > Troubleshooting' 카테고리의 다른 글
Message Queue 트러블슈팅: RabbitMQ 구축 (0) 2025.12.22 분산 트레이싱 트러블슈팅: OpenTelemetry 커버리지 확장 (0) 2025.12.19 분산 트레이싱 트러블슈팅: Log-Trace 연동 및 Kibana 검색 구조 (0) 2025.12.19 분산 트레이싱 트러블슈팅: NetworkPolicy, Zipkin, OpenTelemetry (0) 2025.12.18 EFK 트러블슈팅: Fluent Bit CRI Parser 오류 (0) 2025.12.18