InfoGrab Docs

DigitalOcean Kubernetes에서 Teleport 시작하기

요약

이 가이드에서는 DigitalOcean Kubernetes에서 Teleport를 시작하는 방법을 보여줍니다. 이미 다른 플랫폼에서 Teleport를 실행 중인 경우, 기존 Teleport 배포를 사용하여 Kubernetes 클러스터에 접근할 수 있습니다.

이 가이드에서는 DigitalOcean Kubernetes에서 Teleport를 시작하는 방법을 보여줍니다.

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

작동 방식#

이 가이드에서 설명하는 설정에서 DigitalOcean Kubernetes 클러스터를 배포한 다음, Teleport Auth Service와 Teleport Proxy Service를 배포하는 teleport-cluster Helm 차트를 설치합니다. 그런 다음 Teleport 클러스터에 로컬 관리자 사용자를 생성하고 Teleport 에이전트를 배포하여 인프라 리소스를 등록할 수 있습니다.

사전 요구사항#

  • DigitalOcean 계정.
  • kubectl, Helm, doctl, 그리고 Teleport tsh 클라이언트가 구성된 워크스테이션.

1단계/4. DigitalOcean Kubernetes 클러스터 생성#

DigitalOcean Kubernetes 클러스터를 생성합니다.

DigitalOcean Kubernetes 클러스터 생성

Kubernetes 클러스터가 프로비저닝되는 동안 아래와 같이 "Getting Started" 가이드를 따릅니다:

DigitalOcean Kubernetes 클라이언트 설정

2단계/4. Teleport 설치#

teleport-cluster Helm 차트를 사용하여 Kubernetes 클러스터에 Teleport를 설치합니다:

Teleport Community Edition:

$ CLUSTERNAME=tele.example.com # replace with your preferred domain name
$ EMAIL_ADDR=dodemo@goteleport.com # replace with your email
$ helm install teleport-cluster teleport/teleport-cluster \
  --create-namespace \
  --namespace=teleport-cluster \
  --set clusterName=$CLUSTERNAME \
  --set acme=true \
  --set acmeEmail=$EMAIL_ADDR \
  --version (=teleport.version=)
NAME: teleport-cluster
LAST DEPLOYED: Tue Oct 26 17:01:21 2021
NAMESPACE: teleport-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None

Teleport Enterprise:

Teleport 클러스터 리소스에 대한 네임스페이스를 생성하고 PodSecurityAdmission을 구성합니다:

$ kubectl create namespace teleport-cluster
namespace/teleport-cluster created
$ kubectl label namespace teleport-cluster 'pod-security.kubernetes.io/enforce=baseline'
namespace/teleport-cluster labeled

라이선스 파일을 획득하고, 생성한 네임스페이스에 "license"라는 시크릿을 생성합니다:

$ kubectl -n teleport-cluster create secret generic license --from-file=license.pem

Teleport를 설치합니다:

$ CLUSTERNAME=tele.example.com # replace with your preferred domain name
$ EMAIL_ADDR=dodemo@goteleport.com # replace with your email
$ helm install teleport-cluster teleport/teleport-cluster \
  --namespace=teleport-cluster \
  --set clusterName=$CLUSTERNAME \
  --set acme=true \
  --set acmeEmail=$EMAIL_ADDR \
  --set enterprise=true \
  --version (=teleport.version=)
NAME: teleport-cluster
LAST DEPLOYED: Tue Oct 26 17:01:21 2021
NAMESPACE: teleport-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None

clusterName에 대한 DNS 업데이트#

먼저 Kubernetes 클러스터의 외부 IP(EXTERNAL-IP 필드에서)를 가져옵니다.


$ kubectl --namespace=teleport-cluster get services

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)          AGE
teleport-cluster        LoadBalancer   10.245.163.12   192.168.200.200   443:31959/TCP,3023:30525/TCP,3026:30079/TCP,3024:32437/TCP   19m
teleport-cluster-auth   ClusterIP      10.245.164.28   <none>            3025/TCP,3026/TCP                                            19m

외부 IP 값을 얻으면(이 필드가 채워지기까지 몇 분이 걸릴 수 있습니다), clusterName의 A 레코드가 이 IP 주소를 가리키도록 DNS 레코드를 업데이트합니다. 예를 들어 위의 경우 192.168.200.200이 외부 IP입니다.

DNS 구성

3단계/4. Teleport 사용자 생성 및 설정#

이제 kubectltctl 명령을 실행하여 Teleport 사용자를 생성합니다.

Teleport Community Edition:

$ kubectl --namespace teleport-cluster exec deployment/teleport-cluster-auth -- tctl users add tadmin --roles=access,editor --logins=ubuntu

User "tadmin" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:
https://tele.example.com:443/web/invite/<invite-token>

NOTE: Make sure tele.example.com:443 points at a Teleport proxy which users can access.

Commercial:

$ kubectl --namespace teleport-cluster exec deployment/teleport-cluster-auth -- tctl users add tadmin --roles=access,editor,reviewer --logins=ubuntu

User "tadmin" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:
https://tele.example.com:443/web/invite/<invite-token>

NOTE: Make sure tele.example.com:443 points at a Teleport proxy which users can access.

위 명령 실행 후 표시되는 링크를 복사하여 웹 브라우저에서 열어 사용자 등록 프로세스를 완료합니다(위 경우 링크는 https://tele.example.com:443/web/invite/<invite-token>입니다).

사용자 설정

비밀번호를 설정하고 다단계 인증에 등록하여 등록 프로세스를 완료하면 Teleport 웹 UI에 로그인됩니다.

이 단계에서 access, edit 역할을 가진 tadmin 사용자를 생성했습니다. 이들은 Teleport에서 사용할 수 있는 기본 역할입니다. 그러나 이 사용자가 Kubernetes 클러스터에 접근할 수 있도록 하려면 Kubernetes 클러스터에 접근할 수 있는 권한이 있는 역할을 tadmin에게 할당해야 합니다. 먼저 Kubernetes 권한 system:mastermember라는 역할을 생성해 보겠습니다.

"member"라는 새 Kubernetes 역할 생성#

다음 사양으로 member.yaml 파일을 생성합니다:

경고

system:masters는 Linux 시스템의 sudo 권한과 유사한 Kubernetes 내장 역할입니다. 여기서는 데모 목적으로 사용되며 필요한 경우에만 프로덕션에서 사용해야 합니다.

다음 명령으로 Kubernetes에 이 역할을 생성합니다:

$ kubectl --namespace=teleport-cluster exec -i deployment/teleport-cluster-auth -- tctl create -f < member.yaml

사용자 "tadmin"에게 "member" 역할 할당#

이제 Teleport 사용자 tadmin에게 이 역할을 할당합니다. 아래 예시는 Teleport 웹 UI를 사용하는 프로세스를 보여줍니다: 먼저 사용자 편집 메뉴를 선택합니다:

사용자 편집

다음으로 member 역할을 할당하도록 tadmin 사용자 역할을 업데이트합니다:

역할 업데이트

Kubernetes 클러스터에 system:master 권한으로 접근할 수 있는 member 역할을 가진 tadmin 사용자가 업데이트되었습니다.

4단계/4. Teleport를 사용하여 Kubernetes 클러스터에 접근#

다음 단계는 tsh를 사용하여 Kubernetes 클러스터에 접근하는 방법을 보여줍니다.

Teleport에 로그인#

먼저 세 번째 단계에서 생성한 tadmin 사용자로 tsh를 사용하여 Teleport에 인증합니다.

참고

다음 프로세스는 전역 kubectl 구성 파일을 덮어씁니다. 전역 kubectl 구성이 수정되는 대신 kubectl 구성을 별도의 파일에 쓰려면 다음 명령을 실행합니다:

$ export KUBECONFIG=${HOME?}/teleport-kubeconfig.yaml

Teleport Community Edition:

$ tsh login --proxy=tele.example.com:443 --auth=local --user=tadmin
Enter password for Teleport user tadmin:
Enter your OTP token:
540255
> Profile URL:        https://tele.example.com:443
  Logged in as:       tadmin
  Cluster:            tele.example.com
  Roles:              access, editor, member
  Logins:             ubuntu
  Kubernetes:         enabled
  Valid until:        2021-10-27 06:37:15 +0000 UTC [valid for 12h0m0s]
  Extensions:         permit-agent-forwarding, permit-port-forwarding, permit-pty

Commercial:

$ tsh login --proxy=tele.example.com:443 --auth=local --user=tadmin
Enter password for Teleport user tadmin:
Enter your OTP token:
540255
> Profile URL:        https://tele.example.com:443
  Logged in as:       tadmin
  Cluster:            tele.example.com
  Roles:              access, editor, reviewer, member
  Logins:             ubuntu
  Kubernetes:         enabled
  Valid until:        2021-10-27 06:37:15 +0000 UTC [valid for 12h0m0s]
  Extensions:         permit-agent-forwarding, permit-port-forwarding, permit-pty

Kubernetes 클러스터 선택#

$ tsh kube login tele.example.com
Logged into kubernetes cluster "tele.example.com". Try 'kubectl version' to test the connection.

Kubernetes 클러스터에 연결#

$ kubectl --namespace=teleport-cluster get pods
NAME                                READY   STATUS    RESTARTS   AGE
teleport-cluster-6cc679b6f6-7xr5h   1/1     Running   0          14h

사용자 tadmin이 DigitalOcean Kubernetes 클러스터의 파드를 나열할 수 있었습니다.

Teleport는 Kubernetes 클러스터에 대한 접근의 감사 로그를 보관합니다. 아래 스크린샷에서 Teleport 감사 로그는 사용자 tadmin이 클러스터에 로그인했음을 보여줍니다.

감사 로그 보기

다음 단계#

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

Teleport로 Kubernetes 클러스터를 보호하는 추가적인 방법에 대한 가이드를 읽어보세요:

DigitalOcean Kubernetes에서 Teleport 시작하기

원문 보기
요약

이 가이드에서는 DigitalOcean Kubernetes에서 Teleport를 시작하는 방법을 보여줍니다. 이미 다른 플랫폼에서 Teleport를 실행 중인 경우, 기존 Teleport 배포를 사용하여 Kubernetes 클러스터에 접근할 수 있습니다.

이 가이드에서는 DigitalOcean Kubernetes에서 Teleport를 시작하는 방법을 보여줍니다.

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

작동 방식#

이 가이드에서 설명하는 설정에서 DigitalOcean Kubernetes 클러스터를 배포한 다음, Teleport Auth Service와 Teleport Proxy Service를 배포하는 teleport-cluster Helm 차트를 설치합니다. 그런 다음 Teleport 클러스터에 로컬 관리자 사용자를 생성하고 Teleport 에이전트를 배포하여 인프라 리소스를 등록할 수 있습니다.

사전 요구사항#

  • DigitalOcean 계정.
  • kubectl, Helm, doctl, 그리고 Teleport tsh 클라이언트가 구성된 워크스테이션.

1단계/4. DigitalOcean Kubernetes 클러스터 생성#

DigitalOcean Kubernetes 클러스터를 생성합니다.

DigitalOcean Kubernetes 클러스터 생성

Kubernetes 클러스터가 프로비저닝되는 동안 아래와 같이 "Getting Started" 가이드를 따릅니다:

DigitalOcean Kubernetes 클라이언트 설정

2단계/4. Teleport 설치#

teleport-cluster Helm 차트를 사용하여 Kubernetes 클러스터에 Teleport를 설치합니다:

Teleport Community Edition:

$ CLUSTERNAME=tele.example.com # replace with your preferred domain name
$ EMAIL_ADDR=dodemo@goteleport.com # replace with your email
$ helm install teleport-cluster teleport/teleport-cluster \
  --create-namespace \
  --namespace=teleport-cluster \
  --set clusterName=$CLUSTERNAME \
  --set acme=true \
  --set acmeEmail=$EMAIL_ADDR \
  --version (=teleport.version=)
NAME: teleport-cluster
LAST DEPLOYED: Tue Oct 26 17:01:21 2021
NAMESPACE: teleport-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None

Teleport Enterprise:

Teleport 클러스터 리소스에 대한 네임스페이스를 생성하고 PodSecurityAdmission을 구성합니다:

$ kubectl create namespace teleport-cluster
namespace/teleport-cluster created
$ kubectl label namespace teleport-cluster 'pod-security.kubernetes.io/enforce=baseline'
namespace/teleport-cluster labeled

라이선스 파일을 획득하고, 생성한 네임스페이스에 "license"라는 시크릿을 생성합니다:

$ kubectl -n teleport-cluster create secret generic license --from-file=license.pem

Teleport를 설치합니다:

$ CLUSTERNAME=tele.example.com # replace with your preferred domain name
$ EMAIL_ADDR=dodemo@goteleport.com # replace with your email
$ helm install teleport-cluster teleport/teleport-cluster \
  --namespace=teleport-cluster \
  --set clusterName=$CLUSTERNAME \
  --set acme=true \
  --set acmeEmail=$EMAIL_ADDR \
  --set enterprise=true \
  --version (=teleport.version=)
NAME: teleport-cluster
LAST DEPLOYED: Tue Oct 26 17:01:21 2021
NAMESPACE: teleport-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None

clusterName에 대한 DNS 업데이트#

먼저 Kubernetes 클러스터의 외부 IP(EXTERNAL-IP 필드에서)를 가져옵니다.


$ kubectl --namespace=teleport-cluster get services

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)          AGE
teleport-cluster        LoadBalancer   10.245.163.12   192.168.200.200   443:31959/TCP,3023:30525/TCP,3026:30079/TCP,3024:32437/TCP   19m
teleport-cluster-auth   ClusterIP      10.245.164.28   <none>            3025/TCP,3026/TCP                                            19m

외부 IP 값을 얻으면(이 필드가 채워지기까지 몇 분이 걸릴 수 있습니다), clusterName의 A 레코드가 이 IP 주소를 가리키도록 DNS 레코드를 업데이트합니다. 예를 들어 위의 경우 192.168.200.200이 외부 IP입니다.

DNS 구성

3단계/4. Teleport 사용자 생성 및 설정#

이제 kubectltctl 명령을 실행하여 Teleport 사용자를 생성합니다.

Teleport Community Edition:

$ kubectl --namespace teleport-cluster exec deployment/teleport-cluster-auth -- tctl users add tadmin --roles=access,editor --logins=ubuntu

User "tadmin" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:
https://tele.example.com:443/web/invite/<invite-token>

NOTE: Make sure tele.example.com:443 points at a Teleport proxy which users can access.

Commercial:

$ kubectl --namespace teleport-cluster exec deployment/teleport-cluster-auth -- tctl users add tadmin --roles=access,editor,reviewer --logins=ubuntu

User "tadmin" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:
https://tele.example.com:443/web/invite/<invite-token>

NOTE: Make sure tele.example.com:443 points at a Teleport proxy which users can access.

위 명령 실행 후 표시되는 링크를 복사하여 웹 브라우저에서 열어 사용자 등록 프로세스를 완료합니다(위 경우 링크는 https://tele.example.com:443/web/invite/<invite-token>입니다).

사용자 설정

비밀번호를 설정하고 다단계 인증에 등록하여 등록 프로세스를 완료하면 Teleport 웹 UI에 로그인됩니다.

이 단계에서 access, edit 역할을 가진 tadmin 사용자를 생성했습니다. 이들은 Teleport에서 사용할 수 있는 기본 역할입니다. 그러나 이 사용자가 Kubernetes 클러스터에 접근할 수 있도록 하려면 Kubernetes 클러스터에 접근할 수 있는 권한이 있는 역할을 tadmin에게 할당해야 합니다. 먼저 Kubernetes 권한 system:mastermember라는 역할을 생성해 보겠습니다.

"member"라는 새 Kubernetes 역할 생성#

다음 사양으로 member.yaml 파일을 생성합니다:

경고

system:masters는 Linux 시스템의 sudo 권한과 유사한 Kubernetes 내장 역할입니다. 여기서는 데모 목적으로 사용되며 필요한 경우에만 프로덕션에서 사용해야 합니다.

다음 명령으로 Kubernetes에 이 역할을 생성합니다:

$ kubectl --namespace=teleport-cluster exec -i deployment/teleport-cluster-auth -- tctl create -f < member.yaml

사용자 "tadmin"에게 "member" 역할 할당#

이제 Teleport 사용자 tadmin에게 이 역할을 할당합니다. 아래 예시는 Teleport 웹 UI를 사용하는 프로세스를 보여줍니다: 먼저 사용자 편집 메뉴를 선택합니다:

사용자 편집

다음으로 member 역할을 할당하도록 tadmin 사용자 역할을 업데이트합니다:

역할 업데이트

Kubernetes 클러스터에 system:master 권한으로 접근할 수 있는 member 역할을 가진 tadmin 사용자가 업데이트되었습니다.

4단계/4. Teleport를 사용하여 Kubernetes 클러스터에 접근#

다음 단계는 tsh를 사용하여 Kubernetes 클러스터에 접근하는 방법을 보여줍니다.

Teleport에 로그인#

먼저 세 번째 단계에서 생성한 tadmin 사용자로 tsh를 사용하여 Teleport에 인증합니다.

참고

다음 프로세스는 전역 kubectl 구성 파일을 덮어씁니다. 전역 kubectl 구성이 수정되는 대신 kubectl 구성을 별도의 파일에 쓰려면 다음 명령을 실행합니다:

$ export KUBECONFIG=${HOME?}/teleport-kubeconfig.yaml

Teleport Community Edition:

$ tsh login --proxy=tele.example.com:443 --auth=local --user=tadmin
Enter password for Teleport user tadmin:
Enter your OTP token:
540255
> Profile URL:        https://tele.example.com:443
  Logged in as:       tadmin
  Cluster:            tele.example.com
  Roles:              access, editor, member
  Logins:             ubuntu
  Kubernetes:         enabled
  Valid until:        2021-10-27 06:37:15 +0000 UTC [valid for 12h0m0s]
  Extensions:         permit-agent-forwarding, permit-port-forwarding, permit-pty

Commercial:

$ tsh login --proxy=tele.example.com:443 --auth=local --user=tadmin
Enter password for Teleport user tadmin:
Enter your OTP token:
540255
> Profile URL:        https://tele.example.com:443
  Logged in as:       tadmin
  Cluster:            tele.example.com
  Roles:              access, editor, reviewer, member
  Logins:             ubuntu
  Kubernetes:         enabled
  Valid until:        2021-10-27 06:37:15 +0000 UTC [valid for 12h0m0s]
  Extensions:         permit-agent-forwarding, permit-port-forwarding, permit-pty

Kubernetes 클러스터 선택#

$ tsh kube login tele.example.com
Logged into kubernetes cluster "tele.example.com". Try 'kubectl version' to test the connection.

Kubernetes 클러스터에 연결#

$ kubectl --namespace=teleport-cluster get pods
NAME                                READY   STATUS    RESTARTS   AGE
teleport-cluster-6cc679b6f6-7xr5h   1/1     Running   0          14h

사용자 tadmin이 DigitalOcean Kubernetes 클러스터의 파드를 나열할 수 있었습니다.

Teleport는 Kubernetes 클러스터에 대한 접근의 감사 로그를 보관합니다. 아래 스크린샷에서 Teleport 감사 로그는 사용자 tadmin이 클러스터에 로그인했음을 보여줍니다.

감사 로그 보기

다음 단계#

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

Teleport로 Kubernetes 클러스터를 보호하는 추가적인 방법에 대한 가이드를 읽어보세요: