ClickHouse 컨트롤 플레인과 BYOC VPC 간 연결
다음 섹션에서는 Tailscale 프라이빗 네트워크가 문제 해결과 선택적 관리 접근에 어떻게 사용되는지 설명합니다.
Tailscale 프라이빗 네트워크
개요
- 관리 작업: ClickHouse 관리 서비스가 BYOC 인프라와 연동하여 수행하는 작업
- 문제 해결 접근: ClickHouse 엔지니어가 진단을 위해 Kubernetes API 서버와 ClickHouse 시스템 테이블에 접근
- 메트릭 접근: ClickHouse의 중앙 집중식 모니터링 대시보드가 BYOC VPC 내에 배포된 Prometheus 스택의 메트릭에 접근하여, ClickHouse 엔지니어가 해당 환경의 관측성을 확보할 수 있도록 합니다.
BYOC에서 Tailscale이 작동하는 방식
-
Tailnet 주소 등록: 각 엔드포인트는 고유한 tailnet 주소를 등록합니다(예: Kubernetes API server의 경우
k8s.xxxx.us-east-1.aws.byoc.clickhouse-prd.com) -
Tailscale agent 컨테이너: EKS 클러스터에서 Tailscale agent 컨테이너가 실행되며, 다음을 담당합니다:
- Tailscale coordination server에 연결
- 서비스를 등록해 검색할 수 있도록 함
- Nginx 파드와 네트워크 설정을 조정
-
Nginx 파드: 다음을 수행하는 Nginx 파드:
- Tailscale에서 들어오는 TLS 트래픽을 종료 처리
- EKS 클러스터 내의 적절한 IP로 트래픽을 라우팅
네트워크 연결 프로세스
-
초기 연결:
- 양쪽 끝의 Tailscale 에이전트(ClickHouse 엔지니어의 환경과 BYOC EKS 클러스터)가 Tailscale coordination server에 연결합니다
- EKS 클러스터 에이전트가 Kubernetes 서비스를 등록해 검색 가능하도록 합니다
- ClickHouse 엔지니어가 해당 서비스를 볼 수 있도록 하려면 내부 에스컬레이션이 필요합니다
-
연결 모드:
- 직접 모드: 에이전트가 NAT 트래버설 터널을 통해 직접 연결을 설정하려고 시도합니다
- 릴레이 모드: 직접 모드가 실패하면 통신은 Tailscale DERP(Distributed Encrypted Relay Protocol) 서버를 통한 릴레이 모드로 전환됩니다
-
암호화:
- 모든 통신은 종단 간 암호화됩니다
- 각 Tailscale 에이전트는 자체 공개 키-개인 키 쌍(PKI와 유사함)을 생성합니다
- 직접 모드와 릴레이 모드 중 어느 것을 사용하든 트래픽은 암호화된 상태로 유지됩니다
보안 기능
- EKS 클러스터의 Tailscale 에이전트가 Tailscale coordination/relay server로 아웃바운드 연결을 시작합니다
- 인바운드 연결은 필요하지 않습니다 — security group 규칙에서 Tailscale 에이전트에 대한 인바운드 트래픽을 허용할 필요가 없습니다
- 따라서 공격 표면이 줄어들고 네트워크 보안 구성이 단순해집니다
- 엔지니어가 Tailscale을 통해 고객 엔드포인트로 라우팅되기 전에 내부 승인 워크플로를 통해 액세스를 요청해야 합니다
- 액세스는 일정 시간 동안만 유효하며 자동으로 만료됩니다
- 모든 액세스는 감사되며 로그에 기록됩니다
관리 서비스 액세스
- EKS API 서버가 Private Endpoint만 사용하도록 구성할 수 있습니다
- 이 경우 관리 서비스는 Tailscale을 통해 API 서버에 액세스합니다(사용자의 문제 해결 접근과 유사)
- 긴급 investigation 및 지원이 필요한 경우를 대비한 백업 메커니즘으로 공용 액세스가 유지됩니다
네트워크 트래픽 흐름
- EKS 클러스터의 Tailscale 에이전트 → Tailscale coordination server(아웃바운드)
- 엔지니어의 머신에 있는 Tailscale 에이전트 → Tailscale coordination server(아웃바운드)
- 에이전트 간에 직접 연결 또는 릴레이 연결이 설정됩니다
- 설정된 터널을 통해 암호화된 트래픽이 흐릅니다
- EKS의 Nginx 파드가 TLS 종료를 수행하고 내부 서비스로 라우팅합니다
- Tailscale 연결은 관리 및 문제 해결 목적으로만 사용됩니다
- 쿼리 트래픽과 고객 데이터는 Tailscale을 통해 전송되지 않습니다
- 모든 고객 데이터는 VPC 내부에 유지됩니다
네트워크 경계
- Inbound: 고객 BYOC VPC로 들어오는 트래픽입니다.
- Outbound: 고객 BYOC VPC에서 시작되어 외부 대상으로 전송되는 트래픽입니다.
- Public: 공용 인터넷에서 접근할 수 있는 네트워크 엔드포인트입니다.
- Private: VPC peering, VPC Private Link 또는 Tailscale과 같은 프라이빗 연결을 통해서만 접근할 수 있는 네트워크 엔드포인트입니다.