소개
이 페이지에서는 여러 지역에서 Teleport 클러스터를 배포하여 복원력을 향상하고 지역적 장애에 대응하는 방법을 설명합니다. 이것은 단계별 가이드가 아니라 다중 지역 Teleport 클러스터를 구축하는 방법에 대한 블루프린트입니다. 이 블루프린트는 특정 인프라 및 네트워크 제약을 고려하여 조정해야 합니다.
중요한 기술 고려사항
계속 진행하기 전에 다음 경고 사항을 인지해야 합니다:
- 이 설정은 대부분의 Teleport 사용자 및 고객에게 필요하지 않습니다. 단일 지역 다중 존 배포는 최고의 가용성/비용 비율을 제공합니다. 예를 들어, Amazon SLAs는 DynamoDB와 EC2 모두에 대해 99.99%입니다.
- 이 블루프린트는 많은 복잡한 구성 요소에 의존합니다. 그러한 구성 요소를 배포하고 운영할 팀의 용량과 전문성이 없다면 단일 지역 다중 존 설정보다 낮은 가용성을 경험하게 될 것입니다.
- 데이터베이스, 객체 저장소, 컨테이너 런타임, 네트워크 플러그인 및 필요한 기타 모든 것을 포함하여 Teleport 종속성을 배포하고 유지 관리할 책임이 있습니다.
밴드폭이 제한된 팀을 위해 다중 지역 클러스터가 필요한 경우, Teleport는 크로스 지역 클러스터를 호스팅할 수 있습니다. 이 문서에 설명된 설정을 운영 비용과 복잡성 없이 활용할 수 있습니다. 자세한 내용은 Teleport Enterprise (Cloud) 시작 가이드를 참조하세요.
아키텍처 개요
다중 지역 Teleport 배포는 여러 지역의 Teleport 배포로 구성됩니다. Teleport는 상태를 다중 지역 백엔드에 저장하고 프록시 피어링을 사용하여 다른 지역에 호스팅된 리소스에 사용자를 연결합니다.
추천하는 다중 지역 백엔드는 CockroachDB 백엔드로, 자가 호스팅된 Teleport Enterprise에서 사용 가능합니다.
다중 지역 Teleport 배포를 실행하려면 다음이 필요합니다:
- 3개의 지역. Teleport는 2개만 필요하지만 CockroachDB는 쿼럼 메커니즘을 위해 3개 지역이 필요합니다.
- IP 주소로 서로에게 접속할 수 있는 Teleport 프록시 서비스 인스턴스. 이는 크로스 지역 Pod/Instance 연결성이 있어야 함을 의미합니다. 이는 일반적으로 VPC 피어링 및/또는 서비스 메쉬로 이루어집니다.
- 세션 녹화를 위한 다중 지역 객체 저장소.
- 사용자와 Teleport 에이전트를 가장 가까운 Teleport 클러스터로 라우팅하기 위한 GeoDNS.
- 다중 지역 CockroachDB 클러스터. 테스트 목적으로 CockroachDB 코어를 사용할 수 있지만 다중 지역 기능으로 인해 생산 환경에서는 CockroachDB Enterprise만 권장됩니다.
Kubernetes에서 다중 지역 Teleport 구현하기
Kubernetes 인프라를 가진 팀은 Kubernetes에서 Teleport를 호스팅하려고 할 것입니다. 이 섹션에서는 이 설정에 대해 좀 더 자세히 설명합니다.
Teleport 종속성
- 3개의 피어링된 지역 VPC 생성 (예: AWS에서) 또는 1개의 글로벌 VPC 생성 (예: GKE에서).
- 각 지역에 Kubernetes 클러스터 1개 생성, Pod CIDR가 겹쳐서는 안 됨.
- Pod 메쉬 연결성 보장. 프록시 Pod는 서로를 포트 3021에서 호출할 수 있어야 합니다. 설정은 네트워크 및 CNI 플러그인 구성에 따라 달라질 것입니다:
- Pod가 기본 네트워크 레이어를 사용하고 있는 경우 (예: GKE, AWS의 vpc-cni 애드온) 순수 VPC 피어링, 라우팅 및 방화벽 기능을 사용하여 각 Kubernetes 클러스터의 Pod를 연결할 수 있습니다.
- Non-native IP 주소가 주어진 경우, Cilium 클러스터 메쉬 기능을 사용하여 Pod를 연결할 수 있습니다. 그들은 클러스터 메쉬를 만드는 방법에 대한 단계별 가이드를 제공합니다.
- 다중 지역 객체 저장소 설정:
- GCP에서 GCS는 다중 지역 위치를 지원합니다.
- 온프레미스에서 MinIO는 다중 사이트 버킷 복제를 지원합니다.
- AWS에서 S3 버킷 간의 양방향 복제를 설정할 수 있습니다.
- CockroachDB 다중 지역 클러스터 설정
Teleport 백엔드 구성
CockroachDB에서 Teleport 데이터베이스와 사용자 생성:
CREATE DATABASE teleport_backend;
CREATE DATABASE teleport_audit;
CREATE USER teleport;
GRANT CREATE ON DATABASE teleport_backend TO teleport;
GRANT CREATE ON DATABASE teleport_audit TO teleport;
SET CLUSTER SETTING kv.rangefeed.enabled = true;
그런 다음 ‘cockroach certs’ 명령로 teleport
사용자에 대한 인증서를 서명해야 합니다.
3개의 파일이 생성되어야 합니다:
client.teleport.crt
client.teleport.key
ca.crt
CockroachDB Enterprise의 경우 CockroachDB에 대한 영역과 지역을 모두 선언하고 데이터베이스에서 지역 장애 허용을 구성해야 합니다.
ALTER DATABASE teleport_backend SET PRIMARY REGION <region1>;
ALTER DATABASE teleport_backend ADD REGION IF NOT EXISTS <region2>;
ALTER DATABASE teleport_backend SET SECONDARY REGION <region2>;
ALTER DATABASE teleport_backend SURVIVE REGION FAILURE;
ALTER DATABASE teleport_audit SET PRIMARY REGION <region1>;
ALTER DATABASE teleport_audit ADD REGION IF NOT EXISTS <region2>;
ALTER DATABASE teleport_audit SET SECONDARY REGION <region2>;
ALTER DATABASE teleport_audit SURVIVE REGION FAILURE;
CockroachDB는 Teleport 데이터를 두 지역에 저장합니다. 두 개의 지역 Teleport 클러스터만 배포하는 경우, 동일한 지역을 선택하세요. 3개의 Teleport 클러스터를 배포하는 경우, 기본 및 보조 지역의 클러스터는 낮은 데이터베이스 대기 시간을 경험할 것입니다.
기본 및 보조 지역이 서로 멀리 떨어져 있는 경우 (예를 들어, 서로 다른 대륙에 있는 경우) 이로 인해 CockroachDB의 쓰기 작업이 느려질 수 있습니다.
CockroachDB 코어에서는 물리적 지역을 CockroachDB 존으로 선언하고 Teleport 데이터베이스에서 존 장애 허용을 구성해야 합니다.
ALTER DATABASE teleport_backend SURVIVE ZONE FAILURE;
ALTER DATABASE teleport_audit SURVIVE ZONE FAILURE;
CockroachDB 코어는 CockroachDB Enterprise가 제공하는 지역 기능을 제공하지 않습니다. 성능이 영향을 받을 수 있습니다. CockroachDB 코어는 다중 지역 설정에서 생산 환경에 권장되지 않습니다.
Teleport 배포하기
모든 Teleport 종속성이 설정되면, teleport-cluster
Helm 차트를 통해 Teleport를 배포할 수 있습니다. 각 Kubernetes 클러스터에 대해 하나의 릴리스를 생성해야 합니다. 특정 지역에 대한 값의 예는 다음과 같습니다:
chartMode: standalone
clusterName: teleport-multi-region.example.org
persistence:
enabled: false
enterprise: true
auth:
teleportConfig:
# CockroachDB 구성
teleport:
storage:
type: cockroachdb
# 지역 CockroachDB URL, Cockroach 문서를 따랐다면 다음과 같습니다.
# cockroachdb-public.<region>.svc.cluster.local
conn_string: postgres://teleport@cockroachdb-public.<region>.svc.cluster.local:26257/teleport_backend?sslmode=verify-full&pool_max_conns=20
audit_events_uri:
- "postgres://teleport@cockroachdb-public.<region>.svc.cluster.local:26257/teleport_audit?sslmode=verify-full"
# 지역 객체 저장소의 URI로 교체
audit_sessions_uri: "uri://to-your-regional-bucket"
ttl_job_cron: '*/20 * * * *'
# 프록시 피어링 구성
auth_service:
tunnel_strategy:
type: proxy_peering
agent_connection_count: 2
# CockroachDB 인증서 마운트 및 Teleport가 이를 사용하도록 설정
extraVolumes:
- name: db-certs
secret:
secretName: cockroach-certs
extraVolumeMounts:
- name: db-certs
mountPath: /var/lib/db-certs
readOnly: true
extraEnv:
- name: PGSSLROOTCERT
value: /var/lib/db-certs/ca.crt
- name: PGSSLCERT
value: /var/lib/db-certs/client.teleport.crt
- name: PGSSLKEY
value: /var/lib/db-certs/client.teleport.key
# 프록시에서 사용할 TLS 인증서를 전달
# cert-manager를 사용하고 `highAvailability.certManager`를 설정하는 경우 생략 가능
tls:
existingSecretName: proxy-cert
highAvailability:
replicaCount: 2
GeoDNS 설정
사용자를 가장 가까운 Teleport 배포로 라우팅하기 위해 GeoDNS를 설정하여 배포를 마무리합니다. 설정은 DNS 공급자마다 다를 수 있습니다. 가능한 경우, /v1/webapi/ping
에서 헬스체크를 구성하여
오류가 있는 Teleport 지역이 DNS 기록에서 자동으로 제거되고 사용자가 가장 가까운 작동하는 Teleport 배포로 라우팅될 수 있도록 합니다.
업데이트 전략
다중 지역 설정에서 Teleport를 업데이트하는 것은 몇 가지 도전 과제를 제공합니다. Teleport 호환성 보장을 엄격히 따르려면 업데이트 전에 단일 인증으로 축소해야 합니다. 다중 지역 설정에서는 다음이 필요합니다:
- 업데이트 중 인증을 위해 단일 지역에 의존
- 두 개 지역을 중단하거나 프록시가 다른 지역의 인증에 연결할 수 있도록 허용 ( 이는 기본적으로 그렇지 않으며 Cilium 크로스 클러스터 서비스와 프록시 서비스의 사용자 정의 조인 토큰을 요구합니다).
Auth 롤링 업데이트가 가능합니다. 이 경우 여러 인증 버전이 동시에 실행될 수 있습니다. 새로 도입된 리소스 필드는 모든 인증이 롤아웃될 때까지 제대로 설정되지 않을 수 있습니다.
이 일관성/사용 용이성의 거래는 롤아웃 기간이 짧고 버전 차이가 최소화되는 경우에는 수용 가능할 수 있습니다.
CockroachDB 크기 조정
3x3 CockroachDB 클러스터(각 존마다 1개 노드, 3개 존, 3개 지역)에서 각 노드는 2 CPU와 8GiB의 메모리를 가지며, 10,000 개 SSH 노드를 지원하는 Teleport 클러스터를 유지할 수 있습니다.
CockroachDB 성능은 저장소 유형에 따라 다릅니다. CockroachDB의 상태를 SSD에 저장하는지 확인하세요. Kubernetes에서 실행할 경우 기본 저장소 클래스가 최상의 대기 시간과 처리 능력을 제공하는 것이 아닐 수 있습니다.
자세한 내용은 Teleport 크기 조정 페이지를 참조하세요.
Teleport 부하는 사용 유형(연결된 노드 수, 보호되는 리소스 수, 역할 수, 동시 연결 수 및 사용자 활동)에 따라 달라지므로 특정 요구 사항에 따라 크기를 테스트하고 조정해야 합니다.
Kubernetes에서 실행할 경우, 정적 CPU 정책을 사용하지 않는 한 Teleport 또는 CockroachDB 포드에 CPU 한도를 설정할 것을 권장하지 않습니다.
CPU 스로틀링이 구현되는 방식으로 인해, Teleport와 CockroachDB와 같은 다중 스레드 I/O 집약적인 애플리케이션은 CPU 한도에 도달하자마자 성능이 저하됩니다. 이로 인해 서비스 중단이 발생하고 완전한 장애가 발생할 가능성이 높습니다.
일반적인 규칙은 대부분의 중요한 포드의 resources
섹션이 다음과 같아야 합니다:
resources:
requests:
# cpu 및 메모리 요청이 설정됨
cpu: "2"
memory: "8Gi"
limits:
# 메모리 제한은 메모리 요청과 동일한 값으로 설정
memory: "8Gi"
# cpu 한도는 설정되지 않음
다중 지역 AWS S3 복제 설정
이 섹션에서는 다중 지역 객체 저장소를 생성하는 방법을 설명하며, 여러 개의 지역 S3 버킷과 복제 규칙을 포함합니다.
- 버전 관리가 활성화된 3개의 버킷을 각 지역에 생성합니다.
- 3개의 버킷으로 구성된 다중 지역 액세스 포인트를 생성합니다.
- 생성 후 "복제 및 장애 조치" 탭에서 "복제 규칙 생성"을 선택하고 "모든 지정된 버킷 간에 개체 복제" 템플릿을 선택합니다.
대신 Terraform과 같은 도구로 개별 복제 규칙을 생성할 수 있습니다. 버킷 bucketA
, bucketB
, bucketC
가 있는 경우 6개의 규칙이 필요합니다:
bucketA
에서bucketB
로bucketA
에서bucketC
로bucketB
에서bucketA
로bucketB
에서bucketC
로bucketC
에서bucketA
로bucketC
에서bucketB
로
Teleport가 세션 녹화를 자동으로 정리하도록 하려면, 복제 규칙에서 "삭제 마커 복제"를 활성화해야 합니다.