쿠버네티스 클러스터 등록 시작하기
Teleport v18.9이 가이드는 보호하려는 쿠버네티스 클러스터에 Teleport 쿠버네티스 서비스를 배포하여 쿠버네티스 클러스터를 Teleport 리소스로 등록하는 방법을 설명합니다. 이 시나리오에서 Teleport 쿠버네티스 서비스 파드는 쿠버네티스에서 실행 중임을 감지하고 자동으로 쿠버네티스 클러스터를 등록합니다.
이 가이드는 보호하려는 쿠버네티스 클러스터에 Teleport 쿠버네티스 서비스를 배포하여 쿠버네티스 클러스터를 Teleport 리소스로 등록하는 방법을 설명합니다.
작동 방식#
이 시나리오에서 Teleport 쿠버네티스 서비스 파드는 쿠버네티스에서 실행 중임을 감지하고 자동으로 쿠버네티스 클러스터를 등록합니다. 다음 다이어그램은 쿠버네티스 클러스터에서 Teleport 쿠버네티스 서비스가 실행되는 이 배포 시나리오의 간략한 개요를 제공합니다:

쿠버네티스 클러스터를 등록하고 탐색하는 다른 방법에 대한 자세한 내용은 Teleport로 쿠버네티스 클러스터 등록을 참조하세요.
사전 조건#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
-
Kubernetes >= v(=kubernetes.major_version=).(=kubernetes.minor_version=).0
-
Helm >= (=helm.version=)
Helm과 Kubernetes가 설치되어 있고 최신 상태인지 확인합니다.
$ helm version # version.BuildInfo{Version:"v(=helm.version=)"} $ kubectl version # Client Version: version.Info{Major:"(=kubernetes.major_version=)", Minor:"(=kubernetes.minor_version=)+"} # Server Version: version.Info{Major:"(=kubernetes.major_version=)", Minor:"(=kubernetes.minor_version=)+"}
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
1/3단계. RBAC 리소스 생성#
Teleport를 사용하여 쿠버네티스 클러스터에 인증하려면, 상호작용할 쿠버네티스 클러스터에 대한 접근 권한을 부여하는 Teleport 역할이 있어야 합니다.
이 단계에서는 viewers 그룹의 구성원으로서 Teleport로 보호된 모든 쿠버네티스 클러스터에 요청을 보낼 수 있는 kube-access라는 Teleport 역할을 생성하는 방법을 안내합니다. Teleport 쿠버네티스 서비스는 사용자의 요청을 프록시할 때 viewers 그룹을 가장합니다.
-
다음 내용으로
kube-access.yaml파일을 생성합니다:kind: role metadata: name: kube-access version: v7 spec: allow: kubernetes_labels: '*': '*' kubernetes_resources: - kind: '*' namespace: '*' name: '*' verbs: ['*'] kubernetes_groups: - viewers deny: {} -
변경 사항을 적용합니다:
$ tctl create -f kube-access.yaml
Web UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
인증 공급자에 맞는 적절한 명령을 실행하여 kube-access 역할을
your Teleport user에게 할당하십시오:
Local User
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
$ ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
로컬 사용자를 편집하여 새 역할을 추가합니다:
$ tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},kube-access" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에kube-access을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - kube-access -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
SAML
-
saml구성 리소스를 가져옵니다:$ tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을saml.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 saml.yaml 파일을 삭제해야 합니다. -
saml.yaml을 편집하여attributes_to_roles섹션에kube-access을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - kube-access -
변경 사항을 적용합니다:
$ tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
OIDC
-
oidc구성 리소스를 가져옵니다:$ tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을oidc.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 oidc.yaml 파일을 삭제해야 합니다. -
oidc.yaml을 편집하여claims_to_roles섹션에kube-access을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - kube-access -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
kube-access 역할에 viewers 그룹의 구성원으로 쿠버네티스 클러스터에 접근할 수 있는 권한을 부여했지만, 이 그룹은 아직 해당 쿠버네티스 클러스터 내에서 권한이 없습니다. 이 권한을 할당하려면 viewers 그룹에 권한을 부여하는 쿠버네티스 RoleBinding 또는 ClusterRoleBindings를 생성합니다.
-
다음 내용으로
viewers-bind.yaml파일을 생성합니다:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: viewers-crb subjects: - kind: Group # Bind the group "viewers" to the kubernetes_groups assigned in the "kube-access" role name: viewers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole # "view" is a default ClusterRole that grants read-only access to resources # See: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles name: view apiGroup: rbac.authorization.k8s.io -
kubectl로ClusterRoleBinding을 적용합니다:$ kubectl apply -f viewers-bind.yaml
이제 Teleport 사용자는 쿠버네티스 클러스터에 접근할 때 viewers 그룹의 구성원 자격을 가정할 수 있는 권한이 있으며, viewers 그룹은 클러스터의 리소스를 조회할 수 있는 권한을 가집니다. 다음 단계는 사용자 요청을 프록시하기 위해 클러스터에 Teleport 쿠버네티스 서비스를 배포하는 것입니다.
2/3단계. 안내형 등록 지침 따르기#
이 단계에서는 Teleport Web UI에서 스크립트를 복사하고 터미널에서 실행하여 쿠버네티스 클러스터에 Teleport 쿠버네티스 서비스를 배포합니다.
-
Teleport Web UI를 열고 관리자 계정으로 로그인합니다.
-
**새 리소스 등록(Enroll New Resource)**을 클릭합니다.
-
검색 필드에 Kubernetes의 전체 또는 일부를 입력하여 표시되는 리소스 유형을 필터링한 다음 Kubernetes를 클릭합니다.
-
teleport-agent차트 리포지터리를 추가하는 명령을 복사하여 워크스테이션의 터미널에 붙여넣습니다. -
Teleport 쿠버네티스 서비스를 배포할 네임스페이스와 이 클러스터에 연결할 때 사용할 표시 이름으로
teleport-agent를 입력한 다음 **다음(Next)**을 클릭합니다.다음을 클릭하면 Teleport가 쿠버네티스 클러스터를 Teleport 클러스터의 리소스로 구성하고 등록하는 스크립트를 생성합니다.
-
Teleport Web UI에 표시된 명령을 복사하여 터미널에서 실행합니다.
Teleport Web UI에 "새 쿠버네티스 클러스터가 성공적으로 감지되었습니다(Successfully detected your new Kubernetes cluster)"라는 메시지가 클러스터 등록 확인으로 표시됩니다. 이 메시지가 표시되면 **다음(Next)**을 클릭하여 계속합니다.
3/3단계. 쿠버네티스 접근 테스트#
쿠버네티스 클러스터에 Teleport 쿠버네티스 서비스를 배포하고 클러스터를 Teleport 리소스로 등록했으므로, viewers 그룹의 구성원으로 쿠버네티스 클러스터에 접근할 수 있는지 확인합니다.
이 가이드의 이전 단계를 따랐다면, 접근 설정(Set Up Access) 보기에서 쿠버네티스 그룹(Kubernetes Groups) 필드가 viewers로 채워집니다.
접근을 설정하고 테스트하려면:
-
**다음(Next)**을 클릭합니다.
-
teleport-agent네임스페이스, 이전 단계의 쿠버네티스viewers그룹, 그리고 Teleport 사용자 이름을 지정합니다. -
Teleport Web UI에 표시된 명령을 복사하여 실행하면 쿠버네티스 클러스터와 상호작용하고 Teleport를 통한 접근을 검증할 수 있습니다. 또는 아래에 표시된 명령을 실행합니다:
Teleport 클러스터에 인증합니다.
teleport.example.com에는 클러스터 도메인을,admin@example.com에는 Teleport 사용자 이름을 할당합니다:$ tsh login --proxy=teleport.example.com:443 --auth=local --user=admin@example.com접근 가능한 쿠버네티스 클러스터를 나열합니다:
$ tsh kube ls쿠버네티스 클러스터에 접근하기 위한 자격 증명을 가져옵니다.
Kubernetes-cluster-name을 쿠버네티스 클러스터 이름으로 교체합니다:$ tsh kube login Kubernetes-cluster-nameTeleport 쿠버네티스 서비스가
kubectl명령을 프록시합니다:$ kubectl get pods -n teleport-agent이전에 배포한 Teleport 쿠버네티스 서비스 파드가 표시됩니다:
NAME READY STATUS RESTARTS AGE teleport-agent-0 1/1 Running 0 8m6s -
**완료(Finish)**를 클릭합니다.
다음 단계#
이 가이드는 쿠버네티스 클러스터 내에서 Teleport 쿠버네티스 서비스를 실행하여 쿠버네티스 클러스터를 등록하는 방법을 설명했습니다.
- 클라우드 제공업체에서 호스팅되는 쿠버네티스 클러스터 탐색에 대한 자세한 내용은 쿠버네티스 클러스터 탐색을 참조하세요.
- Teleport로 쿠버네티스 클러스터를 등록하는 다른 방법에 대해 알아보려면 Teleport로 쿠버네티스 클러스터 등록을 참조하세요.
teleport-kube-agentHelm 차트에서 구성할 수 있는 파라미터의 전체 목록은 차트 참조를 참조하세요.