이 가이드에서는 Teleport Helm 차트를 사용하여 사용자 지정 teleport.yaml
구성 요소로 Kubernetes에서 Teleport 클러스터를 설정하는 방법을 설명합니다.
Teleport Enterprise Cloud가 이 설정을 자동으로 처리하므로, 귀하는 즉시 안전한 인프라 접근을 제공할 수 있습니다.
무료 체험으로 Teleport Enterprise Cloud를 시작하세요.
이 설정은 기존 Teleport 클러스터가 이미 있는 경우 Kubernetes에서 실행을 시작하거나 이전 버전의 Helm 차트에서 설정을 마이그레이션할 때 유용할 수 있습니다.
다른 플랫폼에서 Teleport를 이미 실행 중인 경우, 기존 Teleport 배포를 사용하여 Kubernetes 클러스터에 액세스할 수 있습니다. 가이드를 따르세요 하여 Kubernetes 클러스터를 Teleport에 연결하세요.
필수 조건
이 지침은 v12+ Teleport 및 v12+ teleport-cluster
차트 모두에 해당합니다.
구버전 Teleport를 실행 중인 경우, 이 페이지 상단의 버전 선택기를 사용하여 올바른 버전을 선택하세요.
- Kubernetes >= v1.17.0
- Helm >= v3.4.2
Teleport의 차트는 Helm 버전 3을 사용해야 합니다. 이 지침을 따라 Helm 3을 설치하세요.
이 가이드 전반에 걸쳐 helm
및 kubectl
바이너리가 PATH
에 있는 것으로 가정합니다:
helm versionversion.BuildInfo{Version:"v3.4.2"}
kubectl versionClient Version: version.Info{Major:"1", Minor:"17+"}
Server Version: version.Info{Major:"1", Minor:"17+"}
프로덕션에서 Teleport를 실행할 때 보안 사고를 피하기 위해 다음 모범 사례를 준수해야 합니다:
- 필요한 경우가 아니면 프로덕션 환경에서
sudo
사용을 피하세요. - 새로운 비루트 사용자 계정을 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하세요.
- 필요하지 않는 한 비루트 사용자로서 Teleport의 서비스를 실행하세요. SSH 서비스만 루트 접근을 필요로 합니다. Teleport가
1024
보다 작은 포트(예:443
)에서 수신 대기하도록 하려면 루트 권한(또는CAP_NET_BIND_SERVICE
권한)이 필요합니다. - 최소 권한 원칙을 따르세요. 더 제한적인 역할로도 충분할 때 사용자의 권한을 허용하는 역할을 부여하지 마세요.
예를 들어, 사용자가 모든 클러스터 리소스에 액세스하고 편집할 수 있는 내장된
access,editor
역할을 부여하지 마세요. 대신 각 사용자에게 필요한 최소 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 권한을 상승시켜주세요. - Teleport 리소스를 등록할 때(예: 새로운 데이터베이스나 응용 프로그램) 초대 토큰을 파일에 저장해야 합니다.
명령행에 토큰을 직접 입력하면 악의적인 사용자가 손상된 시스템에서
history
명령을 실행하여 이를 볼 수 있습니다.
이러한 관행이 문서에서 사용되는 예제에 반드시 반영되지 않는 점에 유의해야 합니다. 문서의 예제는 주로 시연 및 개발 환경을 위한 것입니다.
1단계/3. Teleport Helm 차트 리포지토리 추가
Teleport Helm 리포지토리를 설정하세요. Teleport Helm 리포지토리에 호스팅된 차트를 설치하도록 Helm을 허용하세요:
helm repo add teleport https://charts.releases.teleport.dev
원격 리포지토리의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리즈로 업그레이드할 수 있습니다:
helm repo update
2단계/3. 사용자 지정 구성으로 Helm을 사용하여 Teleport 클러스터 설정
teleport-cluster
는 두 개의 파드를 배포합니다: 하나는 Proxy 서비스용, 다른 하나는 Auth 서비스용입니다. 각 파드 유형에 대해 두 가지 구성을 제공할 수 있습니다.
- 차트 값의
proxy
섹션 아래에 설정된 값은 Proxy 서비스 파드에만 적용됩니다.proxy.teleportConfig
아래에 사용자 지정 YAML을 제공하여 기본 Teleport Proxy 서비스 구성을 사용자 정의할 수 있습니다. - 차트 값의
auth
섹션 아래에 설정된 값은 Auth 서비스 파드에만 적용됩니다.auth.teleportConfig
아래에 사용자 지정 YAML을 제공하여 기본 Teleport Auth 서비스 구성을 사용자 정의할 수 있습니다.
teleportConfig
섹션 아래에 제공하는 모든 YAML은 차트의 기본 YAML 구성과 병합되며, 사용자 정의가 우선 적용됩니다. 이는 필요한 정확한 동작만 재정의하면서 나머지에 대해 Teleport 권장 차트 기본값을 유지할 수 있게 해줍니다.
또한, 많은 유용한 Teleport 기능은 사용자 지정 YAML이 아닌 차트 값을 사용하여 이미 구성할 수 있습니다.
예를 들어, publicAddr
를 설정하는 것은 proxy.teleportConfig.proxy_service.public_addr
를 설정하는 것과 동일합니다.
scratch
또는 standalone
모드를 사용할 때는 다중 복제를 지원하려면 반드시 고가용성 스토리지(예: etcd, DynamoDB 또는 Firestore)를 사용해야 합니다.
NFS 기반 스토리지 또는 ReadWriteMany
볼륨 클레임을 수동으로 구성하는 것은 HA 배포에 대해 지원되지 않으며 오류를 초래합니다.
다음 my-values.yaml
파일을 작성하고 Teleport 구성을 필요에 맞게 조정하세요.
모든 가능한 구성 필드는 Teleport 구성 참조에서 찾을 수 있습니다.
chartMode: standalone
clusterName: teleport.example.com
auth:
teleportConfig:
# 텔레포트 구성 재정의를 여기에 입력합니다
teleport:
log:
output: stderr
severity: DEBUG
auth_service:
enabled: true
web_idle_timeout: 1h
authentication:
locking_mode: best_effort
proxy:
teleportConfig:
# 텔레포트 구성 재정의를 여기에 입력합니다
teleport:
log:
output: stderr
severity: DEBUG
proxy_service:
https_keypairs_reload_interval: 12h
# 클러스터의 공개 주소를 선택적으로 재정의합니다
# public_addr: custom.example.com:443
# tunnel_public_addr: custom.example.com:3024
# Kubernetes 1.23 이상을 실행하는 경우 PodSecurityPolicies를 비활성화합니다
podSecurityPolicy:
enabled: false
# OPTIONAL - 고가용성 스토리지를 백엔드와 세션 녹화 모두에 사용할 때
# 디스크 지속성을 비활성화하고 인증 파드를 복제할 수 있습니다.
#
# persistence:
# enabled: false
# highAvailability:
# replicaCount: 2
Helm 구성에서 publicAddr
값을 사용하거나 proxy.teleportConfig.proxy_service.public_addr
를 설정하여 클러스터의 외부 이름을 재정의할 수 있습니다. 그러나 이 예에서는 clusterName
에 따라 publicAddr
가 자동으로 teleport.example.com:443
으로 설정됩니다.
Teleport 관련 리소스를 포함하는 네임스페이스를 생성하고 PodSecurityAdmission
을 구성합니다:
kubectl create namespace teleportnamespace/teleport createdkubectl label namespace teleport 'pod-security.kubernetes.io/enforce=baseline'namespace/teleport labeled
자체 호스팅 Teleport Enterprise 클러스터를 실행하는 경우, Teleport를 설치하기 전에 Teleport 라이센스 정보가 포함된 비밀을 생성해야 합니다.
- Teleport 인증 서비스는 Teleport Enterprise 계정을 인증하기 위해 라이선스 파일을 읽습니다.
라이선스 파일을 얻으려면 Teleport 계정 대시보드로 이동하여 로그인하십시오.
teleport.sh에서 시작하고 Teleport 계정 이름(예: my-company)을 입력하세요.
로그인 후 "GENERATE LICENSE KEY" 버튼이 표시되며, 이 버튼을 클릭하면 새로운 라이선스 파일이 생성되고 이를 다운로드할 수 있습니다. - 라이센스 파일에서 비밀을 생성합니다. 파일 이름이
license.pem
인 한 Teleport는 이 비밀을 자동으로 감지합니다.
kubectl -n teleport create secret generic license --from-file=license.pem
proxy_service
가 파드 내에서 3080 포트에서 수신 대기하지만,
차트에 의해 구성된 기본 LoadBalancer
서비스는 항상 외부에서 443 포트에서 수신 대기합니다(내부적으로 3080 포트로 리디렉션됨).
따라서 proxy_service.public_addr
는 항상 :443
으로 끝나야 합니다:
proxy_service:
web_listen_addr: 0.0.0.0:3080
public_addr: custom.example.com:443
이제 다음 명령을 사용하여 클러스터에 Teleport를 배포할 수 있습니다:
helm install teleport teleport/teleport-cluster \ --namespace teleport \ --values my-values.yaml
helm install teleport teleport/teleport-cluster \ --namespace teleport \ --set enterprise=true \ --values my-values.yaml
차트가 설치된 후에는 kubectl
명령을 사용하여 배포 상태를 확인할 수 있습니다:
kubectl --namespace teleport get all
NAME READY STATUS RESTARTS AGEpod/teleport-auth-57989d4cbd-rtrzn 1/1 Running 0 22hpod/teleport-proxy-c6bf55cfc-w96d2 1/1 Running 0 22hpod/teleport-proxy-c6bf55cfc-z256w 1/1 Running 0 22h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/teleport LoadBalancer 10.40.11.180 34.138.177.11 443:30258/TCP,3023:31802/TCP,3026:32182/TCP,3024:30101/TCP,3036:30302/TCP 22hservice/teleport-auth ClusterIP 10.40.8.251 <none> 3025/TCP,3026/TCP 22hservice/teleport-auth-v11 ClusterIP None <none> <none> 22hservice/teleport-auth-v12 ClusterIP None <none> <none> 22h
NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/teleport-auth 1/1 1 1 22hdeployment.apps/teleport-proxy 2/2 2 2 22h
NAME DESIRED CURRENT READY AGEreplicaset.apps/teleport-auth-57989d4cbd 1 1 1 22hreplicaset.apps/teleport-proxy-c6bf55cfc 2 2 2 22h
3단계/3. Teleport 사용자 생성 (선택 사항)
기존 Teleport 클러스터를 마이그레이션하지 않는 경우, Teleport에 로그인할 수 있는 사용자를 생성해야 합니다. 이는 Teleport 인증 서버에서 수행되어야 하므로, 다음 명령을 kubectl
을 사용하여 실행할 수 있습니다:
kubectl --namespace teleport exec deployment/teleport-auth -- tctl users add test --roles=access,editor
User "test" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:https://teleport.example.com:443/web/invite/91cfbd08bc89122275006e48b516cc68
NOTE: Make sure teleport.example.com:443 points at a Teleport proxy that users can access.
kubectl --namespace teleport exec deployment/teleport-auth -- tctl users add test --roles=access,editor,reviewer
User "test" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:https://teleport.example.com:443/web/invite/91cfbd08bc89122275006e48b516cc68
NOTE: Make sure teleport.example.com:443 points at a Teleport proxy that users can access.
DNS를 설정하지 않은 경우, teleport.example.com
을 Kubernetes 로드 밸런서의 외부 IP 또는 호스트 이름으로 대체해야 합니다.
IP 주소 또는 호스트 이름이 로드 밸런서를 위한 외부 주소로 제공되는지는 공급자에 따라 다릅니다.
EKS는 호스트 이름을 사용합니다:
kubectl --namespace teleport-cluster get service/teleport -o jsonpath='{.status.loadBalancer.ingress[*].hostname}'a5f22a02798f541e58c6641c1b158ea3-1989279894.us-east-1.elb.amazonaws.com
GKE는 IP 주소를 사용합니다:
kubectl --namespace teleport-cluster get service/teleport -o jsonpath='{.status.loadBalancer.ingress[*].ip}'35.203.56.38
명령을 따라 적절히 수정하고, 사용할 수 있는 IP 또는 호스트 이름으로 teleport.example.com
을 대체하세요. 페이지를 성공적으로 보려면 브라우저에서 보안 경고를 수락해야 할 수도 있습니다.
Kubernetes가 발급한 로드 밸런서 IP 또는 호스트 이름을 사용하는 것은 테스트를 위한 것이지만, 생산 Teleport 클러스터를 운영에는 적합하지 않습니다. 공용 인증서의 주체 대체 이름은 클러스터의 구성된 공개 주소와 일치해야 합니다(public_addr
을 사용하여 구성된).
생산 환경 워크로드를 위해서는 위에서 설명한 방법으로 DNS를 적절하게 구성해야 합니다.
웹 UI를 통해 사용자 생성 링크를 로드하여 비밀번호를 생성하고 Teleport 사용자에 대한 다중 요소 인증을 설정합니다.
Helm 차트 제거
teleport-cluster
차트를 제거하려면 helm uninstall <release-name>
을 사용합니다. 예:
helm --namespace teleport uninstall teleport
chartMode
를 변경하려면 먼저 기존 차트를 제거한 다음 적절한 값으로 새 버전을 설치해야 합니다.
다음 단계
Teleport 클러스터를 배포했으므로, 액세스 관리 섹션을 읽고 사용자를 등록하고 RBAC를 설정하는 방법을 시작하세요.
teleport-cluster
Helm 차트에 대한 값 파일에서 설정할 수 있는 모든 옵션을 보려면 참조 가이드를 참조하세요.