Infograb logo
Helm을 사용하여 사용자 지정 구성으로 Teleport 실행

이 가이드에서는 Teleport Helm 차트를 사용하여 사용자 지정 teleport.yaml 구성 요소로 Kubernetes에서 Teleport 클러스터를 설정하는 방법을 설명합니다.

Teleport Enterprise Cloud가 이 설정을 자동으로 처리하므로, 귀하는 즉시 안전한 인프라 접근을 제공할 수 있습니다.

무료 체험으로 Teleport Enterprise Cloud를 시작하세요.

이 설정은 기존 Teleport 클러스터가 이미 있는 경우 Kubernetes에서 실행을 시작하거나 이전 버전의 Helm 차트에서 설정을 마이그레이션할 때 유용할 수 있습니다.

다른 플랫폼에서 Teleport를 이미 실행 중인 경우, 기존 Teleport 배포를 사용하여 Kubernetes 클러스터에 액세스할 수 있습니다. 가이드를 따르세요 하여 Kubernetes 클러스터를 Teleport에 연결하세요.

필수 조건

Warning

이 지침은 v12+ Teleport 및 v12+ teleport-cluster 차트 모두에 해당합니다. 구버전 Teleport를 실행 중인 경우, 이 페이지 상단의 버전 선택기를 사용하여 올바른 버전을 선택하세요.

Teleport의 차트는 Helm 버전 3을 사용해야 합니다. 이 지침을 따라 Helm 3을 설치하세요.

이 가이드 전반에 걸쳐 helmkubectl 바이너리가 PATH에 있는 것으로 가정합니다:

helm version

version.BuildInfo{Version:"v3.4.2"}


kubectl version

Client 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를 설정하는 것과 동일합니다.

Warning

scratch 또는 standalone 모드를 사용할 때는 다중 복제를 지원하려면 반드시 고가용성 스토리지(예: etcd, DynamoDB 또는 Firestore)를 사용해야 합니다.

지원되는 Teleport 저장소 백엔드 정보

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 teleport
namespace/teleport created
kubectl label namespace teleport 'pod-security.kubernetes.io/enforce=baseline'
namespace/teleport labeled

자체 호스팅 Teleport Enterprise 클러스터를 실행하는 경우, Teleport를 설치하기 전에 Teleport 라이센스 정보가 포함된 비밀을 생성해야 합니다.

  1. Teleport 인증 서비스는 Teleport Enterprise 계정을 인증하기 위해 라이선스 파일을 읽습니다. 라이선스 파일을 얻으려면 Teleport 계정 대시보드로 이동하여 로그인하십시오.
    teleport.sh에서 시작하고 Teleport 계정 이름(예: my-company)을 입력하세요.
    로그인 후 "GENERATE LICENSE KEY" 버튼이 표시되며, 이 버튼을 클릭하면 새로운 라이선스 파일이 생성되고 이를 다운로드할 수 있습니다.
  2. 라이센스 파일에서 비밀을 생성합니다. 파일 이름이 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.
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

명령을 따라 적절히 수정하고, 사용할 수 있는 IP 또는 호스트 이름으로 teleport.example.com을 대체하세요. 페이지를 성공적으로 보려면 브라우저에서 보안 경고를 수락해야 할 수도 있습니다.

Warning

Kubernetes가 발급한 로드 밸런서 IP 또는 호스트 이름을 사용하는 것은 테스트를 위한 것이지만, 생산 Teleport 클러스터를 운영에는 적합하지 않습니다. 공용 인증서의 주체 대체 이름은 클러스터의 구성된 공개 주소와 일치해야 합니다(public_addr을 사용하여 구성된).

생산 환경 워크로드를 위해서는 위에서 설명한 방법으로 DNS를 적절하게 구성해야 합니다.

웹 UI를 통해 사용자 생성 링크를 로드하여 비밀번호를 생성하고 Teleport 사용자에 대한 다중 요소 인증을 설정합니다.

Helm 차트 제거

teleport-cluster 차트를 제거하려면 helm uninstall <release-name>을 사용합니다. 예:

helm --namespace teleport uninstall teleport
Note

chartMode를 변경하려면 먼저 기존 차트를 제거한 다음 적절한 값으로 새 버전을 설치해야 합니다.

다음 단계

Teleport 클러스터를 배포했으므로, 액세스 관리 섹션을 읽고 사용자를 등록하고 RBAC를 설정하는 방법을 시작하세요.

teleport-cluster Helm 차트에 대한 값 파일에서 설정할 수 있는 모든 옵션을 보려면 참조 가이드를 참조하세요.

Teleport 원문 보기