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