BCORE — 비코어 주식회사

PADION

dnsd · Internal DNS Control Plane

health-aware DNS · stock CoreDNS · 무DB · 다중 노드 복제

살아있는 백엔드만,
DNS 로 자동 라우팅.

zone 마다 헬스체크로 살아있는 백엔드만 A 레코드로 발행하고, 정적 레코드·도메인별 forward·SOA/캐시를 웹 UI/REST 로 관리합니다. 손대지 않은 stock CoreDNS 가 그 결과를 읽어 응답 — CoreDNS 를 코드로 링크하지 않아 버전 독립. DB 없이 설정 파일 하나로 동작합니다.

DNS Control

  • zone 별 health-aware 서비스 — 살아있는 백엔드만 A 집합으로
  • 정적 레코드 A / AAAA / CNAME / TXT / MX / NS
  • 도메인별 forward(upstream) + 정책 + per-rule 캐시
  • 글로벌 · zone 별 SOA / 캐시 설정
  • 다중 노드 안전 복제 (split-brain 방지)
  • 감사 로그 · 표준 메트릭 · SBOM
What is

health-aware 내부 DNS인가

레이크하우스 같은 내부 스택은 수많은 stateless 서비스(게이트웨이·코디네이터·워커)가 여러 노드에 흩어져 돌아갑니다. 죽은 인스턴스로 가는 트래픽을 막으려면 "살아있는 곳"만 이름으로 가리켜야 하는데, 정적 DNS 나 수동 관리로는 헬스 변화를 따라가지 못합니다. 무거운 LB 를 모든 서비스 앞에 두는 것도 과합니다.

PADION dnsd 는 백엔드를 헬스체크해 살아있는 것만 DNS A 로 발행하고, 정적 레코드·forward·SOA 까지 한 콘솔에서 관리합니다. 실제 응답은 손대지 않은 stock CoreDNS 가 zone 파일을 읽어 처리하므로 CoreDNS 버전업과 무관하고, DB 없이 설정 파일 하나가 진실의 원천입니다.

Key Features

6개의 핵심

Health-aware DNS

서비스별 TCP / HTTP / HTTPS 헬스체크(경로·rise/fall·timeout). 살아있는 백엔드만 A 집합으로 발행. 전멸 시 동작(fail-open / fail-closed) 선택 가능. debounce 로 깜빡임 합치기.

stock CoreDNS · 비결합

dnsd 가 CoreDNS 설정을 생성하고 CoreDNS 가 자동으로 읽습니다. 코드 링크 없음 → CoreDNS 버전 독립. 단일 컨테이너로도 운영 가능.

도메인별 Forward + 캐시

from 도메인마다 다른 upstream·정책(random/round_robin/sequential)·health_check·max_fails. 특정 도메인 전용 캐시(per-rule). 모든 forward 블록에 loop 감지(resolv.conf 순환 방지).

다중 노드 안전 복제

단일 writer · 다중 reader 구조. leader 장애 시 수동 promote 가능 · split-brain 방지 메커니즘 · 피어 상태 조회 · 동기화 이력.

감사 · 관측

모든 변경을 추가-전용 감사 로그로 (회전 + 보존 기간 + 기간 조회). 표준 메트릭 노출 · CoreDNS 반영 확인 · SBOM 제공.

보안 · 무DB 운영

웹 UI 로그인(세션 + 기본 비번 강제 변경) + REST/복제용 Bearer 토큰(상수시간 비교). HTTPS(TLS) 옵션. 설정 파일 하나가 진실의 원천(DB 없음) · 변경은 검증 통과 후에만 반영(all-or-nothing) · serial 단조 보장.

How it Works

정의 한 번, 4단계 자동화

서비스를 한 번 정의하면, 헬스 변화가 CoreDNS 설정으로 자동 반영되어 살아있는 백엔드만 응답합니다.

01 · Define

서비스 정의

웹 UI/REST 로 zone·서비스·백엔드·forward 등록

02 · Probe

헬스체크

TCP/HTTP/HTTPS 주기 점검 → 살아있는 백엔드 판정

03 · Render

설정 렌더

살아있는 것만 CoreDNS 설정에 안전하게 (원자적 갱신)

04 · Serve

CoreDNS 응답

reload 후 응답 · 변경은 follower 로 복제

Integration

CoreDNS · REST/UI · 단일 컨테이너

CoreDNS · File + Reload

stock CoreDNS 연동

  • • zone 마다 authoritative 블록(file + reload)
  • • catch-all/도메인별 forward + cache + loop
  • • per-rule 캐시 도메인은 전용 server 블록으로 분리
  • • 코드 링크 없음 → CoreDNS 버전 독립
  • • 반영 확인: 서빙 SOA serial 과 렌더 serial 대조

REST API + Web UI

한 콘솔에서 관리

내장 웹 UI(로그인 세션)와 REST API로 zone·서비스·레코드·forward·SOA·캐시·복제를 관리. 자동화는 Bearer 토큰. 모든 변경은 인증이 필요합니다.

Deploy · Host / Docker / k8s

단일 컨테이너 · k8s seam

  • • Go 단일 바이너리 + stock CoreDNS
  • • 한 컨테이너에서 dnsd(PID 1) 가 CoreDNS 기동·감독·재시작
  • • 운영 경로(상태/로그/SSL/설정)를 단일 config로 일원화
  • • 현재 파일 출력, Kubernetes ConfigMap 출력 지원 예정
  • • 멀티 zone ↔ k8s 커스텀 zone 1:1 매핑
Security & Operations

안전한 운영 요건

웹 UI 로그인

아이디/비밀번호 세션 인증(PBKDF2 해시). 초기 비밀번호는 최초 로그인 시 즉시 변경을 강제합니다.

변경 인증

모든 변경은 세션 또는 Bearer 토큰 필요. 토큰은 상수시간 비교(타이밍 공격 방지).

접근 로그

로그인·로그아웃·실패를 사용자 ID + 클라이언트 IP 와 함께 로그 기록.

감사 로그

모든 변경 append-only JSONL · 월별 회전 · 보존 개월수 · 기간 조회.

HTTPS(TLS)

공인 인증서로 admin/UI 를 HTTPS 제공. 토큰·세션은 응답에 노출 안 됨.

split-brain 방지

안전한 단일 writer 복제 메커니즘으로 옛 leader 격리.

일관성 보장

검증 통과 후에만 디스크 반영(all-or-nothing) · persist-before-broadcast · serial 단조.

resolv.conf 순환 차단

forward 에 catch-all 강제 + CoreDNS loop 플러그인으로 무한 순환 사전 차단.

Open Source 투명성

SBOM 제공 — 의존 모듈·라이선스 투명. 외부 의존 최소.

Use Cases

실제 도입 시나리오

Stateless LB

게이트웨이 · 코디네이터 분산

MinIO 게이트웨이 · Trino 코디네이터 같은 stateless 엔드포인트를 dns-rr 로 묶어, 살아있는 인스턴스만 다중 A 로 발행. 죽은 노드는 자동으로 응답에서 빠집니다.

Internal Resolver

내부 도메인 forward 분리

internal.corp. 같은 사내 도메인은 전용 upstream·정책으로, 나머지는 공용 resolver 로 forward. 도메인별 캐시 TTL 까지 분리해 적용.

High Availability

멀티 노드 DNS 이중화

leader 에서 편집한 설정이 follower 로 복제. leader 장애 시에도 follower 의 CoreDNS 가 계속 응답하고, 필요 시 수동 promote로 안전하게 승격.

PADION 통합

레이크하우스 서비스 디스커버리

PADION lakehouse 의 Trino·MinIO·메타스토어 등 내부 서비스에 일관된 이름과 health-aware 라우팅 제공. 인프라 계층에서 "이름 → 살아있는 곳"을 책임집니다.

Tech Spec

기술 사양

DNS 엔진stock CoreDNS (file + reload). 코드 비결합 → 버전 독립. 단일 컨테이너 시 dnsd 가 자식으로 기동·감독.
zone 모델멀티 zone(origin). zone = 동적 서비스(health) + 정적 레코드. k8s 커스텀 zone 1:1 매핑 고려.
레코드 타입A · AAAA · CNAME · TXT · MX · NS. (name,type,value) 식별로 다중 값 공존.
헬스체크tcp / http / https (health 경로 지정) · interval · timeout · rise / fall · debounce. all_dead: fail_open / fail_closed.
Forward도메인(from)별 upstream(to[]) · 정책(random/round_robin/sequential) · health_check · max_fails · per-rule cache. catch-all '.' 필수, loop 감지.
SOA / 캐시글로벌 기본값 + zone 별 override(필드 상속). serial 자동 monotonic. 글로벌/per-rule 캐시(TTL · success · denial).
복제단일 writer · 다중 reader · 안전한 동기화 메커니즘 · 수동 promote · 피어 상태 · 동기화 이력.
인증웹 UI 로그인 세션(PBKDF2, 기본 비번 강제 변경) + REST/복제 Bearer 토큰(상수시간 비교, config 파일/파일 경로). 로그인·로그아웃 IP·ID 로그.
TLSadmin/UI HTTPS(인증서+키). cert/key 둘 다 설정 시 활성.
감사append-only JSONL · 월별 회전(audit-YYYY-MM.log) · 보존 개월수 · 기간(from/to) 조회.
관측표준 메트릭 노출 · CoreDNS 반영 확인 · SBOM 제공.
아키텍처Go 단일 바이너리 · 무DB (설정 파일이 진실의 원천) · 외부 의존 최소 · 원자적 갱신.
배포host + docker(단일 컨테이너 dnsd+CoreDNS) 현재 · k8s ConfigMap sink 예정. 운영 경로 config 일원화.
PADION 연동data lakehouse 내부 서비스 디스커버리 · datakeeper · gatekeeper
In the PADION Flow

데이터 흐름의 인프라 베이스 — 02

인증·인가·ETL·저장·분석이 동작하려면, 먼저 서비스가 서로를 이름으로 찾고 살아있는 곳으로 연결돼야 합니다. dnsd 가 그 디스커버리 계층을 책임집니다.

죽은 곳으로 보내지 않는,
살아있는 DNS.

PoC · 내부망 도입 · 멀티 노드 이중화까지.