동적 Kubernetes 클러스터 등록
Teleport v18.9동적 Kubernetes 클러스터 등록을 사용하면 개별 Kubernetes 서비스 인스턴스의 구성 파일을 수정하지 않고도 Teleport 클러스터에 연결된 Kubernetes 클러스터를 관리할 수 있습니다. 동적 Kubernetes 클러스터 등록은 여러 Kubernetes 서비스 인스턴스를 배포했거나 인프라의 Kubernetes 클러스터에 대한 접근을 정기적으로 재구성해야 할 때 유용합니다.
동적 Kubernetes 클러스터 등록을 사용하면 개별 Kubernetes 서비스 인스턴스의 구성 파일을 수정하지 않고도 Teleport 클러스터에 연결된 Kubernetes 클러스터를 관리할 수 있습니다.
동적 Kubernetes 클러스터 등록은 여러 Kubernetes 서비스 인스턴스를 배포했거나 인프라의 Kubernetes 클러스터에 대한 접근을 정기적으로 재구성해야 할 때 유용합니다.
이 가이드에서는 동적 Kubernetes 클러스터 등록을 설정하는 방법을 보여주고, tctl을 통해 Kubernetes 클러스터를 생성, 나열, 업데이트, 삭제하는 방법을 안내합니다.
작동 방식#
Teleport Kubernetes 서비스는 Teleport 사용자의 트래픽을 Kubernetes API 서버로 프록시하여 Kubernetes에 대한 접근을 관리하기 위해 패스워드 없는 인증, 역할 기반 접근 제어, 감사 로깅 및 기타 Teleport 기능을 활용할 수 있게 합니다.
이 단계에서는 Linux 호스트에 Teleport Kubernetes 서비스를 설치하고 Teleport 클러스터에 등록한 Kubernetes 클러스터에 접근하도록 구성합니다.
사전 요구사항#
-
실행 중인 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
```
-
Teleport Kubernetes 서비스를 설치할 Linux 호스트.
Tipteleport-kube-agentHelm 차트는 동적 Kubernetes 클러스터 등록을 지원하지 않습니다.- Teleport 클러스터에 조인할 Kubernetes 클러스터. 클러스터에 네임스페이스, 시크릿, 서비스 계정, 클러스터 역할 및 클러스터 역할 바인딩을 생성할 수 있는 권한이 있어야 합니다.
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단계. Teleport Kubernetes 서비스 설정#
이 단계에서는 Linux 서버에 Teleport Kubernetes 서비스를 설치하는 방법을 보여줍니다.
조인 토큰 얻기#
조인 토큰을 생성하여 Teleport 클러스터와 새 Kubernetes 서비스 인스턴스 간의 신뢰를 설정합니다:
$ tctl tokens add --type=kube --ttl=1h --format=text (=presets.tokens.first=)토큰을 복사하여 Teleport Kubernetes 서비스를 실행할 때 사용할 수 있도록 안전한 곳에 보관합니다.
Teleport Kubernetes 서비스 설치#
Linux 호스트에 Teleport Kubernetes 서비스를 설치합니다:
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
Teleport Kubernetes 서비스 구성#
Teleport Kubernetes 서비스를 실행할 호스트에서 다음 명령을 실행하여 Teleport 인스턴스의 기본 구성을 생성합니다.
example.teleport.sh:443에 Teleport Proxy 서비스 또는 Teleport Cloud 테넌트의 호스트와 포트를 할당하고join-token에 앞에서 생성한 조인 토큰을 할당합니다:$ sudo teleport configure \ --proxy=example.teleport.sh:443 \ --roles=kube \ --token=join-token \ -o file/etc/teleport.yaml의 구성 파일을 편집하여 다음을 포함합니다:kubernetes_service: enabled: true resources: - labels: "*": "*"이 구성은 Teleport 클러스터에 등록한 모든 Kubernetes 클러스터에 연결하도록 Kubernetes 서비스 인스턴스를 활성화합니다.
resources[0].labels필드에 와일드카드 패턴("*": "*")이 포함되어 있어 이 Kubernetes 서비스 인스턴스가 레이블 키나 값에 관계없이 모든 Kubernetes 클러스터 리소스에 연결할 수 있기 때문입니다.Kubernetes 클러스터를 선택적으로 감시하기
와일드카드 문자 대신 특정 레이블 키와 값을 포함하여 특정 Kubernetes 클러스터 하위 집합을 감시하도록 Kubernetes 서비스 인스턴스를 구성할 수 있습니다:
resources: - labels: "env": "prod" "region": "us-east-2" - labels: "env": "test" "region": "us-west-1"Kubernetes 서비스가 클러스터를 등록하려면
resources의 항목 중 어느 하나라도 클러스터의 레이블과 일치해야 합니다.resources의 항목이 일치하려면 해당 항목 내의 모든labels항목이 클러스터의 레이블과 일치해야 합니다.예를 들어,
env:prod및region:us-west-1레이블을 가진 클러스터는 첫 번째resources항목의env:prod레이블만 일치하고 두 번째resources항목의region:us-west-1레이블만 일치하기 때문에 위 구성과 일치하지 않습니다.그러나
env:test및region:us-west-1을 가진 클러스터는 두 번째resources항목에 주어진 두 레이블 모두 일치하기 때문에 일치합니다.이 가이드의 뒷부분에서 동적 Kubernetes 클러스터 리소스를 생성할 때, 특정 Kubernetes 서비스 인스턴스만이 이를 감시하도록 레이블을 할당할 수 있습니다.
Teleport Kubernetes 서비스 실행#
systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport Kubernetes Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport Kubernetes Service을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
the Teleport Kubernetes Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport $ sudo systemctl start teleportTAR Archive
the Teleport Kubernetes Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
$ sudo teleport install systemd -o /etc/systemd/system/teleport.service $ sudo systemctl enable teleport $ sudo systemctl start teleportsystemctl status teleport로 the Teleport Kubernetes Service의 상태를 확인하고journalctl -fu teleport로 로그를 볼 수 있습니다.2/3단계. 사용자 권한 부여#
Teleport에서 동적 Kubernetes 클러스터 등록을 활성화하려면 Teleport에 등록하려는 Kubernetes 클러스터에 접근할 수 있도록 사용자를 권한 부여해야 합니다. 이 단계에서 Teleport와 Kubernetes 클러스터 모두에서 이 접근을 구성합니다.
Kubernetes 클러스터에 대한 접근 허용#
접근을 활성화하려는 클러스터에 대한 올바른 Kubernetes 컨텍스트에 있는지 확인합니다.
사용 가능한 모든 컨텍스트를 검색합니다:
$ kubectl config get-contextsCONTEXT_NAME을 선택한 컨텍스트 이름으로 바꿔 컨텍스트를 전환합니다:$ kubectl config use-context CONTEXT_NAME Switched to context CONTEXT_NAMETeleport를 통해 Kubernetes 클러스터에 인증하려면, Teleport 사용자의 역할이 최소한 하나의 Kubernetes 사용자 또는 그룹으로 접근할 수 있도록 허용해야 합니다.
-
현재 사용자의 Teleport 역할 목록을 조회합니다. 아래 예제는 JSON 파싱을 위해
jq유틸리티가 필요합니다.$ CURRENT_ROLES=$(tsh status -f json | jq -r '.active.roles | join ("\n")') -
역할이 접근을 허용하는 Kubernetes 그룹을 조회합니다.
$ echo "$CURRENT_ROLES" | xargs -I{} tctl get roles/{} --format json | \ jq '.[0].spec.allow.kubernetes_groups[]?' -
역할이 접근을 허용하는 Kubernetes 사용자를 조회합니다.
$ echo "$CURRENT_ROLES" | xargs -I{} tctl get roles/{} --format json | \ jq '.[0].spec.allow.kubernetes_users[]?' -
앞의 두 명령 중 하나의 출력이 비어 있지 않다면, 사용자가 최소한 하나의 Kubernetes 사용자 또는 그룹에 접근할 수 있으므로 다음 단계로 진행할 수 있습니다.
-
두 목록이 모두 비어 있다면, 이 가이드를 위한 목적으로 클러스터의 Kubernetes 리소스를 볼 수 있는 Teleport 역할을 생성합니다.
다음 내용으로
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
TipWeb 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 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
-
Kubernetes 클러스터에서
viewers그룹이 내장viewClusterRole을 갖도록 구성합니다. Teleport 사용자가kube-access역할을 맡아 Kubernetes API 서버로 요청을 보내면, Teleport Kubernetes Service가viewers그룹을 가장(impersonate)하여 요청을 프록시합니다.다음 내용으로
viewers-bind.yaml파일을 생성하여, 내장viewClusterRole을 Teleport 사용자가 접근할 수 있도록 활성화한viewers그룹에 바인딩합니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: viewers-crb subjects: - kind: Group # Bind the group "viewers", corresponding to the kubernetes_groups we assigned our "kube-access" role above 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
Kubernetes 클러스터 관리 권한 부여#
Teleport는 동적
kube_cluster리소스를 통해 인프라의 Kubernetes 클러스터를 추적합니다. Teleport로 Kubernetes 클러스터에 대한 접근을 관리하려면 사용자에게 이러한 리소스를 관리할 수 있는 권한이 필요합니다.이전 섹션에서 Teleport 클러스터에 등록된 모든 Kubernetes 클러스터에 접근할 수 있도록 사용자를 권한 부여했습니다. 이제 이 클러스터에 접근할 수 있으므로 관리할 수 있는 역할을 생성합니다.
다음 내용으로
kube-manager.yaml이라는 역할 정의를 생성합니다:kind: role metadata: name: kube-manager spec: allow: rules: - resources: - kube_cluster verbs: - list - create - read - update - delete version: v5역할을 생성합니다:
$ tctl create -f kube-manager.yamlTipWeb UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
인증 공급자에 맞는 적절한 명령을 실행하여
kube-manager역할을 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-manager" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에kube-manager을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - kube-manager -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
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-manager을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - kube-manager -
변경 사항을 적용합니다:
$ 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-manager을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - kube-manager -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
3/3단계. 동적 Kubernetes 클러스터 리소스 관리#
이제 Teleport 사용자에게 Kubernetes 클러스터 리소스를 관리할 권한이 있으므로, 리소스를 생성, 나열, 업데이트, 삭제하는 방법을 보여드립니다.
kubeconfig 생성#
이 섹션에서는 Teleport 클러스터가 Kubernetes 클러스터에 인증하는 데 사용할 Kubernetes
Config리소스(kubeconfig)를 생성합니다.이 가이드의 앞부분에서 Teleport에 로그인했을 때,
tsh가 Teleport 클러스터를 기반으로 한 Kubernetes 컨텍스트로 변경했을 수 있으므로, Teleport에 연결하려는 클러스터와 일치하도록 Kubernetes 컨텍스트를 업데이트해야 합니다:$ kubectl config get-contexts # CONTEXT_NAME을 선택한 컨텍스트에 할당합니다 $ kubectl config use-context CONTEXT_NAME워크스테이션에서 kubeconfig를 생성하는 데 사용할 Teleport의
get-kubeconfig.sh스크립트를 다운로드합니다:$ curl -OL \ https://raw.githubusercontent.com/gravitational/teleport/v(=teleport.version=)/examples/k8s-auth/get-kubeconfig.sh이 스크립트는 Kubernetes 파드를 가져오고 사용자, 그룹 및 기타 서비스 계정을 가장(impersonate)할 수 있는 Teleport Kubernetes 서비스용 서비스 계정을 생성합니다. Teleport Kubernetes 서비스는 이 서비스 계정을 사용하여 Kubernetes 클러스터의 리소스에 대한 접근을 관리합니다. 또한 스크립트는 서비스 계정 자격 증명을 저장하기 위해 클러스터에 Kubernetes
Secret이 있는지 확인합니다.get-kubeconfig.sh는 배포하는 리소스를 위해teleport라는 네임스페이스를 생성하지만, 스크립트를 실행하는 셸에서TELEPORT_NAMESPACE환경 변수를 할당하여 다른 이름을 선택할 수 있습니다.리소스를 생성한 후
get-kubeconfig.sh는 스크립트를 실행한 디렉터리의kubeconfig라는 파일에 새 kubeconfig를 작성합니다.get-kubeconfig.sh스크립트를 실행합니다:$ bash get-kubeconfig.sh스크립트가 성공적이면 이 메시지가 표시됩니다:
Done!생성된 kubeconfig 파일을 Teleport Proxy 서비스에 복사하라는 스크립트의 지시를 무시하세요. 다음 섹션에서 동적
kube_cluster리소스를 생성할 때 kubeconfig 파일을 사용하는 방법을 보여드립니다.Kubernetes 클러스터 리소스 생성#
kube_cluster.yaml이라는 파일에 다음 내용으로kube_cluster리소스를 정의합니다:kind: kube_cluster version: v3 metadata: name: mycluster spec: kubeconfig: |위 스니펫의
spec.kubeconfig필드는 여러 줄 문자열을 시작합니다. 아래에 kubeconfig 파일의 내용을 그 값으로 포함합니다.spec.kubeconfig는 base64로 인코딩된 문자열이어야 하므로, kubeconfig 파일을 base64로 변환한 다음 들여쓰기하고 다음 명령을 사용하여kube_cluster.yaml리소스 정의에 추가합니다:$ printf " %s" $(cat kubeconfig | base64) >> kube_cluster.yamlkube_cluster에 레이블 추가하기
kube_cluster리소스에 레이블을 추가하여 Teleport 역할이나 Kubernetes 서비스 인스턴스에서 특정 클러스터에 대한 접근을 관리할 수 있습니다.레이블은 정적이거나 동적일 수 있습니다. 정적 레이블은 키/값 쌍입니다. 이 예제는
env=prod및team=dev레이블을 정의합니다:kind: kube_cluster version: v3 metadata: name: mycluster labels: env: prod team: dev spec: kubeconfig: KUBECONFIG동적 레이블을 추가할 수도 있는데, 이는 Kubernetes 서비스 인스턴스가 레이블을 생성하기 위해 실행할 셸 명령을 정의합니다. 이렇게 하려면
kube_cluster리소스의spec.dynamic_labels필드를 편집합니다.이 예제는
python3 get_region.py명령을 실행하여 Kubernetes 서비스가 배포된 지역을 가져오고 결과를region키에 할당합니다:kind: kube_cluster version: v3 metadata: name: mycluster spec: kubeconfig: KUBECONFIG dynamic_labels: region: period: "24h" command: ["python3", "get_region.py"]동적 레이블을 정의할 때
spec.dynamic_labels필드 내의 키는metadata.labels필드 내의 키와 동일하게 동작하여 레이블의 키를 나타냅니다.Kubernetes 서비스는
command에 주어진 명령을period마다 실행하여 해당 키의 값을 얻습니다.command는 문자열 배열로 첫 번째 요소는 실행할 명령을, 이후 각 요소는 인수를 나타냅니다.period는 숫자와 시간 단위를 포함하는 Go 지속 시간 문자열입니다. 지원되는 단위는ns,us(또는µs),ms,s,m,h입니다. 위 예제는 매일 명령을 실행하도록 Kubernetes 서비스를 구성합니다.kube_cluster리소스를 생성하려면 다음 명령을 실행합니다:$ tctl create kube_cluster.yaml kubernetes cluster "mycluster" has been created새 Kubernetes 클러스터 접근#
Teleport Kubernetes 서비스 인스턴스는 새로 생성되거나 업데이트된
kube_cluster리소스를 감시합니다.kube_cluster리소스를 생성하면 해당 클러스터의 레이블을 추적하도록 구성된 Kubernetes 서비스 인스턴스가 해당 클러스터를 등록하고 Teleport를 통해 접근할 수 있게 합니다.결과적으로
tsh kube ls를 실행하면 위에서 등록한 클러스터가 표시되어야 합니다:$ tsh kube ls Kube Cluster Name Labels Selected ----------------- --------------------------- -------- mycluster teleport.dev/origin=dynamicteleport.dev/origin=dynamic레이블은 클러스터가 동적으로 등록되었음을 나타냅니다.방금 등록한 클러스터에 로그인할 수도 있습니다:
$ tsh kube login mycluster Logged into kubernetes cluster "mycluster". Try 'kubectl version' to test the connection.Kubernetes 클러스터 리소스 나열#
다음 명령으로
kube_cluster리소스를 나열할 수 있습니다:$ tctl get kube_clustersKubernetes 클러스터 리소스 업데이트#
앞에서 생성한
kube_cluster리소스를 업데이트하려면 다음 명령을 실행하여 Auth 서비스의 백엔드에 존재하는 리소스를 텍스트 편집기에서 엽니다:$ tctl edit kube_clusters/myclusterkube_cluster에 레이블을 추가하도록 리소스를 편집합니다:kind: kube_cluster metadata: id: 9999999999999999999 labels: teleport.dev/origin: dynamic + env: test name: mycluster spec: aws: {} azure: {} kubeconfig: KUBECONFIG version: v3편집기에서 파일을 저장하고 닫아 변경사항을 적용합니다.
업데이트된 레이블이 표시되어야 합니다:
$ tsh kube ls Kube Cluster Name Labels Selected ----------------- ------------------------------------ -------- mycluster env=test teleport.dev/origin=dynamic *Warning업데이트된
kube_cluster리소스의 레이블이 더 이상 Teleport Kubernetes 서비스 인스턴스가 감시하도록 구성된 레이블과 일치하지 않으면, 해당 인스턴스가 등록을 해제하고 Kubernetes 클러스터 프록시를 중지합니다.Kubernetes 클러스터 리소스 삭제#
앞에서 생성한
kube_cluster리소스를 삭제하려면 다음 명령을 실행합니다:$ tctl rm kube_clusters/mycluster kubernetes cluster "mycluster" has been deleted이렇게 하면 Teleport에서 Kubernetes 클러스터 등록이 해제됩니다:
$ tsh kube ls Kube Cluster Name Labels Selected ----------------- ------ --------다음 단계#
이 가이드에서는
tctl을 사용하여kube_cluster리소스를 관리하는 방법을 보여드렸습니다. Teleport를 통해 Kubernetes 클러스터에 대한 접근을 관리하는 다른 방법에 관심이 있다면 다음 가이드를 확인하세요:- Teleport에 Kubernetes 클러스터 연결:
teleport-kube-agentHelm 차트를 사용하여 Teleport에 Kubernetes 클러스터를 등록하는 방법. - 정적 kubeconfig로 Kubernetes 클러스터 등록: Teleport Kubernetes 서비스의 구성 파일을 사용하여 Teleport에 Kubernetes 클러스터를 등록하는 방법.