메인 콘텐츠로 건너뛰기
이 가이드에서는 ClickHouse 클러스터를 엔드 투 엔드로 암호화하는 방법을 안내합니다. cert-manager를 사용해 인증서를 발급하고, 클러스터에서 TLS를 활성화하며, 보안 포트를 통해 클라이언트를 연결하고, 암호화를 Keeper 조정 트래픽까지 확장하는 과정이 포함됩니다. 이 문서는 작업 중심으로 구성되어 있습니다. spec.settings.tls의 필드별 참고 정보는 구성 → TLS/SSL 구성API 참조를 확인하십시오.

사전 요구사항

  • 연산자가 관리하는 실행 중인 ClickHouse 클러스터(Introduction 참조)
  • 클러스터에 cert-manager가 설치되어 있어야 합니다.
  • 클러스터의 네임스페이스에 대한 kubectl 접근 권한.
연산자는 인증서를 직접 생성하지 않으며, 대신 사용자가 제공한 Kubernetes 시크릿을 사용합니다. cert-manager는 해당 시크릿을 생성하고 교체하는 데 권장되는 방법이지만, 필요한 포맷으로 시크릿을 작성할 수 있는 도구라면 무엇이든 사용할 수 있습니다.

연산자가 기대하는 인증서 형식

TLS는 spec.settings.tls.serverCertSecret이 서버 키 쌍을 포함한 시크릿을 가리키도록 설정해 활성화합니다: 이는 cert-manager가 Certificate 리소스에 기록하는 레이아웃과 정확히 같으므로 변환할 필요가 없습니다. 연산자는 키 쌍을 각 파드의 /etc/clickhouse-server/tls/에 마운트하고 ClickHouse의 openSSL 구성에 연결합니다.
serverCertSecrettls.enabled: true일 때 필수입니다. 검증 웹훅은 이 값 없이 TLS를 활성화한 cluster를 거부하며, enabled: true가 아니면 required: true도 거부합니다.

1단계 — cert-manager로 CA Bootstrap

가장 재현 가능한 구성은 자체 서명된 CA를 생성한 뒤, 해당 CA로 서버 인증서에 서명하는 방식입니다. 이렇게 하면 클라이언트가 신뢰할 수 있는 안정적인 ca.crt를 사용할 수 있습니다.
운영 환경에서는 자체 서명된 Bootstrap을 실제 issuer(사내 CA, Vault, ACME 등)로 대체하십시오. 변경되는 것은 Step 2뿐이며, 클러스터 구성은 동일합니다.

2단계 — 서버 인증서 발급

CA issuer에 리프 인증서를 요청합니다. dnsNames는 클라이언트가 파드에 접속할 때 사용하는 주소를 포함해야 합니다. 연산자는 <cluster-name>-clickhouse-headless라는 이름의 단일 헤드리스 Service를 생성하며, 각 레플리카 파드는 <cluster-name>-clickhouse-<shard>-<index>-0.<cluster-name>-clickhouse-headless.<namespace>.svc.cluster.local로 주소를 지정할 수 있습니다. 헤드리스 Service 도메인에 대한 와일드카드를 사용하면 모든 레플리카를 포괄할 수 있습니다:
연산자는 클러스터 전반에서 사용하는(로드 밸런싱된) Service를 생성하지 않습니다. 연결에 사용할 안정적인 단일 endpoint가 필요하면, 클러스터의 파드를 선택하는 클러스터 IP Service를 직접 생성하고 해당 DNS 이름을 위의 dnsNames에 추가하십시오.
cert-manager는 tls.crt, tls.key, ca.crt가 포함된 clickhouse-cert 시크릿을 생성하며, 만료 전에 이를 갱신합니다. 다음과 같이 존재 여부를 확인하십시오:

단계 3 — 클러스터에서 TLS를 활성화

클러스터가 시크릿을 참조하도록 설정합니다:

연산자의 동작

tls.enabled: true로 설정하면 연산자는 다음을 수행합니다.
  • 모든 파드와 헤드리스 Service에 보안 포트 9440 (네이티브 TLS) 및 8443 (HTTPS)를 엽니다. 이 포트는 기존 포트에 추가됩니다.
  • 시크릿을 /etc/clickhouse-server/tls/에 마운트하고, verificationMode: relaxed, disableProtocols: sslv2,sslv3, preferServerCiphers: true가 포함된 ClickHouse openSSL 블록을 생성합니다. 이는 기본값이므로, 재정의하려면 TLS 설정 사용자 지정을 참조하십시오.
추가로 required: true도 설정하면 연산자는 다음 작업도 수행합니다.
  • 비보안 포트 9000 (네이티브) 및 8123 (HTTP)를 제거합니다. 따라서 TLS 포트만 남으며, plaintext 클라이언트는 더 이상 연결할 수 없습니다.
  • 파드의 **활성 상태 프로브(liveness probe)**를 보안 네이티브 포트 9440으로 전환하므로, plaintext 리스너 없이도 상태 확인이 계속 작동합니다.
TLS 포트 84439440은 TLS가 비활성화된 경우에도 웹훅이 항상 예약하므로, 나중에 tls.enabled를 전환하더라도 spec.additionalPorts 항목과 충돌하지 않습니다. 자세한 내용은 구성 → additionalPorts를 참조하십시오.

4단계 — TLS를 통해 연결

required: true로 설정하면 클라이언트는 보안 포트를 사용하고 CA를 신뢰해야 합니다. 헤드리스 Service(또는 직접 만든 경우 자체 클러스터 IP Service)를 통해 특정 레플리카 파드에 연결하십시오. 네이티브 프로토콜 (clickhouse-client, port 9440):
HTTPS (포트 8443):
로컬 테스트용으로 시크릿에서 ca.crt를 직접 가져오세요:

Keeper 트래픽 암호화

ClickHouse 클러스터에서 TLS를 활성화해도 Keeper로 연결되는 구간은 암호화되지 않습니다. KeeperCluster에서는 별도로 TLS를 활성화해야 합니다 — Keeper 서비스용 인증서를 발급하고(Keeper 서비스 dnsNames를 사용하는 1–2단계) 이를 참조하십시오:
Keeper는 보안 클라이언트 포트를 2281에서 제공합니다. Keeper에서 TLS가 활성화되면 ClickHouse 클러스터는 별도 설정 없이 자동으로 TLS를 통해 Keeper에 연결됩니다 — ClickHouseCluster 측에 추가로 설정할 것은 없습니다. ClickHouse는 시스템 신뢰 저장소와 구성한 모든 caBundle을 기준으로 Keeper 인증서를 검증합니다.

사용자 지정 CA 번들

기본적으로 ClickHouse는 연결하는 피어(다른 레플리카, Keeper, HTTPS 딕셔너리 소스, S3, …)를 시스템 신뢰 저장소를 기준으로 검증합니다. 시스템 저장소에 루트 인증서가 없는 자체 서명 또는 내부 CA 같은 사설 CA도 추가로 신뢰하려면 caBundle을 지정하십시오:
연산자는 이 번들을 마운트하고 이를 openSSL 클라이언트 신뢰 저장소 (caConfig)에 추가합니다. 시스템 신뢰 저장소는 계속 유효하며 — 프라이빗 CA는 공개 루트에 추가로 신뢰되므로 공개 endpoint에 대한 연결도 계속 작동합니다. 자체 서명 설정의 경우, cert-manager가 생성한 동일한 시크릿의 ca.crt 키를 caBundle이 가리키도록 설정하십시오 (cluster_with_ssl 예시와 동일).

TLS 설정 사용자 지정

연산자가 생성하는 openSSL 블록은 기본값일 뿐, 상한선은 아닙니다. 이 설정은 기본 서버 구성에 기록되며, spec.settings.extraConfig 아래의 모든 항목은 config.d/99-extra-config.yaml에 렌더링됩니다. ClickHouse는 이를 마지막에 머지하므로 생성된 값을 재정의합니다. 기본값을 더 강화하려면 — 예를 들어 엄격한 피어 검증을 요구하고 최소 프로토콜을 TLS 1.2로 높이려면 — 변경할 openSSL.server 키를 설정하십시오:
머지는 키별로 수행됩니다. 설정한 값만 대체되며, 생략한 생성 키 (인증서 경로, CA 구성)는 유지됩니다. 사용 가능한 옵션은 openSSL server 설정 을 참조하고, extraConfig가 어떻게 머지되는지는 구성 → 내장 추가 구성 을 참조하십시오.

확인 및 문제 해결

헤드리스 Service에서 보안 포트가 열려 있는지 확인합니다:
파드에 인증서가 마운트되었는지 확인합니다:

관련 항목

마지막 수정일 2026년 7월 3일