인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Helm을 사용하여 사용자 정의 구성으로 Teleport 실행
이 가이드에서는 Helm 차트를 사용하여 사용자 정의 teleport.yaml
구성 요소로 Kubernetes에서 Teleport 클러스터를 설정하는 방법을 설명합니다.
Tip
Teleport Enterprise Cloud는 이 설정을 자동으로 처리하므로 즉시 인프라에 대한 안전한 액세스를 제공할 수 있습니다.
Teleport Enterprise Cloud의 무료 평가판으로 시작하세요.
이 설정은 기존의 Teleport 클러스터가 이미 있는 경우 Kubernetes에서 실행하기 시작하거나 헬름 차트의 이전 버전에서 설정을 마이그레이션할 때 유용할 수 있습니다.
다른 플랫폼에서 Teleport를 이미 실행 중인 경우 기존 Teleport 배포를 사용하여 Kubernetes 클러스터에 접근할 수 있습니다. 가이드를 따르세요 Teleport에 Kubernetes 클러스터를 연결하세요.
사전 요구 사항
Warning
이 지침은 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 저장소를 설정합니다.
Helm이 Teleport Helm 저장소에서 호스팅되는 차트를 설치할 수 있도록 허용합니다:
helm repo add teleport https://charts.releases.teleport.dev
원격 저장소의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리스로 업그레이드할 수 있습니다:
helm repo update
2/3단계. 사용자 정의 구성으로 Helm을 사용하여 Teleport 클러스터 설정
teleport-cluster
는 프록시 서비스와 인증 서비스 각각에 대해 두 개의 파드 세트를 배포합니다. 각 파드 유형에 대해 두 개의 구성을 제공할 수 있습니다.
- 차트 값의
proxy
섹션 아래에서 설정한 모든 값은 프록시 서비스 파드에만 적용됩니다. 사용자 정의 YAML을proxy.teleportConfig
아래에 제공하여 기본 Teleport 프록시 서비스 구성을 오버라이드할 수 있습니다. - 차트 값의
auth
섹션 아래에서 설정한 모든 값은 인증 서비스 파드에만 적용됩니다. 사용자 정의 YAML을auth.teleportConfig
아래에 제공하여 기본 Teleport 인증 서비스 구성을 오버라이드할 수 있습니다.
teleportConfig
섹션 아래에 제공하는 모든 YAML은 차트의 기본 YAML 구성과 병합되며, 귀하의 오버라이드가 우선합니다. 이는 Teleport에서 추천하는 차트 기본 설정을 유지하면서 필요한 정확한 동작만 오버라이드할 수 있게 해줍니다.
또한 많은 유용한 Teleport 기능은 사용자 정의 YAML 대신 차트 값을 사용하여 이미 구성할 수 있다는 점에 유의하십시오.
예를 들어, publicAddr
를 설정하는 것은 proxy.teleportConfig.proxy_service.public_addr
를 설정하는 것과 동일합니다.
Warning
scratch
또는 standalone
모드를 사용할 때는 여러 복제를 지원하기 위해 반드시 고가용성 저장소(예: etcd, DynamoDB 또는 Firestore)를 사용해야 합니다.
NFS 기반 스토리지를 수동으로 구성하거나 ReadWriteMany
볼륨 청구를 사용하는 것은 고가용성 배포에 지원되지 않으며 오류가 발생합니다.
다음 my-values.yaml
파일을 작성하고 필요한 대로 teleport 구성을 조정하십시오.
모든 가능한 구성 필드는 Teleport 구성 참조에서 찾을 수 있습니다.
chartMode: standalone
clusterName: teleport.example.com
auth:
teleportConfig:
# 여기 teleport.yaml 인증 구성 오버라이드를 입력하십시오.
teleport:
log:
output: stderr
severity: DEBUG
auth_service:
enabled: true
web_idle_timeout: 1h
authentication:
locking_mode: best_effort
proxy:
teleportConfig:
# 여기 teleport.yaml 프록시 구성 오버라이드를 입력하십시오.
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
# 선택 사항 - 백엔드 및 세션 기록을 위해 고가용성 스토리지를 사용하는 경우
# 디스크 영속성을 비활성화하고 인증 파드를 복제할 수 있습니다.
#
# 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 Auth 서비스는 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
사용자 "test"가 생성되었지만 비밀번호가 필요합니다. 사용자와 이 URL을 공유하여 사용자 설정을 완료하십시오. 링크는 1시간 동안 유효합니다:https://teleport.example.com:443/web/invite/91cfbd08bc89122275006e48b516cc68
참고: teleport.example.com:443이 사용자가 접근할 수 있는 Teleport 프록시를 가리키고 있는지 확인하십시오.
kubectl --namespace teleport exec deployment/teleport-auth -- tctl users add test --roles=access,editor,reviewer
사용자 "test"가 생성되었지만 비밀번호가 필요합니다. 사용자와 이 URL을 공유하여 사용자 설정을 완료하십시오. 링크는 1시간 동안 유효합니다:https://teleport.example.com:443/web/invite/91cfbd08bc89122275006e48b516cc68
참고: teleport.example.com:443이 사용자가 접근할 수 있는 Teleport 프록시를 가리키고 있는지 확인하십시오.
Note
이전에 호스트 이름에 대한 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
명령을 적절히 수정하고 teleport.example.com
을 사용 가능한 IP 또는 호스트 이름으로 교체해야 합니다. 페이지를 성공적으로 보기 위해 브라우저에서 불안정 경고를 수락해야 할 수도 있습니다.
Warning
Kubernetes에서 발급된 로드 발란서 IP 또는 호스트 이름을 사용하는 것은 테스트에는 괜찮지만, 운영중인 Teleport 클러스터에서는 적합하지 않습니다. 공개적으로 노출된 인증서의 Subject Alternative Name은 클러스터의 구성된 공개 주소와 일치해야 합니다 (public_addr
을 사용해 구성).
운영 환경에서는 위에서 설명한 방법으로 DNS를 올바르게 구성해야 합니다.
사용자 생성 링크를 로드하여 비밀번호를 생성하고 웹 UI를 통해 Teleport 사용자의 다중 요소 인증을 설정하십시오.
Helm 차트 제거
teleport-cluster
차트를 제거하려면 helm uninstall <release-name>
을 사용하십시오. 예를 들어:
helm --namespace teleport uninstall teleport
Note
chartMode
를 변경하려면 먼저 기존 차트를 제거하고 적절한 값으로 새로운
버전을 설치해야 합니다.
다음 단계
Teleport 클러스터를 배포했으므로 액세스 관리 섹션을 읽어 사용자 등록 및 RBAC 설정을 시작하십시오.
teleport-cluster
Helm 차트의 값 파일에 설정할 수 있는 모든 옵션을 보려면 참조 가이드를 참조하십시오.