인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
동적 Kubernetes 클러스터 등록
동적 Kubernetes 클러스터 등록을 통해 Kubernetes 클러스터에 연결된 클러스터를 개별 Kubernetes Service 인스턴스의 구성 파일을 수정할 필요 없이 관리할 수 있습니다.
동적 Kubernetes 클러스터 등록은 여러 Kubernetes Service 인스턴스를 배포했거나 인프라의 Kubernetes 클러스터에 대한 액세스를 정기적으로 재구성해야 하는 경우에 유용합니다.
이 가이드에서는 동적 Kubernetes 클러스터 등록을 설정하는 방법을 보여준 다음, tctl
을 통해 Kubernetes 클러스터를 생성, 목록, 업데이트 및 삭제하는 방법을 안내합니다.
필수 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
-
Teleport Kubernetes Service를 설치할 Linux 호스트.
우리의
teleport-kube-agent
Helm 차트는 동적 Kubernetes 클러스터 등록을 지원하지 않습니다. -
Teleport 클러스터에 조인할 Kubernetes 클러스터. 네임스페이스, 비밀, 서비스 계정, 클러스터 역할 및 클러스터 역할 바인딩을 클러스터에서 생성할 수 있는 권한이 있어야 합니다.
-
연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오.예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결할 수 있고
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1/3단계. Teleport Kubernetes Service 설정
Teleport Kubernetes Service는 Teleport 사용자로부터 Kubernetes API 서버로 트래픽을 프록시하여 비밀번호 없이 인증, 역할 기반 액세스 제어, 감사 로깅 및 기타 Teleport 기능을 활용하여 Kubernetes에 대한 액세스를 관리할 수 있도록 합니다.
이 단계에서는 Linux 호스트에 Teleport Kubernetes Service를 설치하고 Teleport 클러스터와 등록한 Kubernetes 클러스터에 접근하도록 구성합니다.
조인 토큰 받기
Teleport 클러스터와 새로운 Kubernetes Service 인스턴스 간의 신뢰를 구축하기 위해 조인 토큰을 생성합니다:
tctl tokens add --type=kube --ttl=1h --format=textabcd123-insecure-do-not-use-this
토큰을 복사하고 Teleport Kubernetes Service를 실행할 때 사용할 수 있도록 안전한 곳에 보관합니다.
Teleport Kubernetes Service 설치
Linux 호스트에 Teleport Kubernetes Service를 설치합니다:
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition를 다음 중 하나로 할당합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자가 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport 버전을 가져옵니다. 클러스터에서 자동 에이전트 업데이트가 활성화된 경우, 최신 Teleport 버전을 쿼리하여 업데이트된 내용과의 호환성을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 가져옵니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
Teleport Kubernetes Service 구성
Teleport Kubernetes Service를 실행할 호스트에서 다음 명령을 실행하여 Teleport 인스턴스의 기본 구성을 생성하고 PROXY_SERVICE
에 Teleport Proxy Service 또는 Teleport Cloud 테넌트의 호스트 및 포트를 할당하고 TOKEN
에 이전에 생성한 조인 토큰을 할당합니다:
e.g., teleport.example.com:443
PROXY_SERVICE=proxy-addre.g., abcd123-insecure-do-not-use-this;
TOKEN=join-token;sudo teleport configure \--proxy=${PROXY_SERVICE?} \--roles=kube \--token=${TOKEN?} \-o file
/etc/teleport.yaml
의 구성 파일을 다음과 같이 수정합니다:
kubernetes_service:
enabled: "yes"
resources:
- labels:
"*": "*"
이 구성은 Kubernetes Service 인스턴스가 Teleport 클러스터에 등록한 모든 Kubernetes 클러스터에 연결할 수 있도록 합니다. 이는 resources[0].labels
필드에 와일드카드 패턴 ("*": "*"
)이 포함되어 있기 때문에 이 Kubernetes Service 인스턴스가 모든 라벨 키 또는 값을 가진 Kubernetes 클러스터 리소스에 연결할 수 있게 됩니다.
특정 라벨 키와 값을 포함하여 와일드카드 문자를 사용하지 않고 Kubernetes Service 인스턴스가 특정 Kubernetes 클러스터의 하위 집합에 대해 감시하도록 구성할 수 있습니다:
resources:
- labels:
"env": "prod"
"region": "us-east-2"
- labels:
"env": "test"
"region": "us-west-1"
Kubernetes Service가 클러스터를 등록하려면 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 Service 인스턴스만 해당 리소스를 감시하도록 할 수 있습니다.
Teleport Kubernetes 서비스 실행하기
호스트가 부팅될 때 the Teleport Kubernetes Service가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 the Teleport Kubernetes Service를 설치한 방법에 따라 다릅니다.
the Teleport Kubernetes Service를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
the Teleport Kubernetes Service를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 the Teleport Kubernetes Service의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
2/3단계. 사용자 승인하기
Teleport에서 동적 Kubernetes 클러스터 등록을 활성화하려면 Teleport와 등록할 Kubernetes 클러스터에 접근할 수 있도록 사용자 승인이 필요합니다. 이번 단계에서는 Teleport와 Kubernetes 클러스터 모두에서 이 접근을 구성할 것입니다.
Kubernetes 클러스터 접근 허용하기
접근을 허용할 클러스터에 대한 올바른 Kubernetes 컨텍스트에 있는지 확인하세요.
모든 사용 가능한 컨텍스트를 가져옵니다:
kubectl config get-contexts
선택한 컨텍스트 이름인 CONTEXT_NAME
으로 교체하여 자신의 컨텍스트로 전환합니다:
kubectl config use-context CONTEXT_NAMESwitched to context CONTEXT_NAME
Kubernetes 클러스터에 Teleport를 통해 인증하기 위해, 여러분의 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 -
kube-access
역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
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
인증 커넥터를 엽니다:tctl edit github/github -
github
커넥터를 수정하여teams_to_roles
섹션에kube-access
을 추가합니다.이 역할에 매핑해야 하는 팀은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 팀은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 팀이어야 합니다.
예시는 다음과 같습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - kube-access
-
파일을 편집하고 저장하여 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
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
구성 리소스를 가져옵니다: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
그룹이 기본 제공view
ClusterRole을 갖도록 구성합니다. 여러분의 Teleport 사용자가kube-access
역할을 맡고 Kubernetes API 서버에 요청을 보낼 때, Teleport Kubernetes 서비스가viewers
그룹으로 가장하여 요청을 프록시합니다.viewers-bind.yaml
이라는 파일을 만들고 다음 내용을 추가합니다. 이는 여러분이 Teleport 사용자가 접근할 수 있도록 활성화한viewers
그룹과 기본 제공view
ClusterRole을 바인딩합니다:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: viewers-crb subjects: - kind: Group # "kube-access" 역할을 통해 위에서 할당한 kubernetes_groups에 해당하는 "viewers" 그룹을 바인딩 name: viewers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole # "view"는 리소스에 대한 읽기 전용 접근을 부여하는 기본 제공 ClusterRole입니다 # 참조: 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.yaml
kube-manager
역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
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
인증 커넥터를 엽니다:tctl edit github/github -
github
커넥터를 수정하여teams_to_roles
섹션에kube-manager
을 추가합니다.이 역할에 매핑해야 하는 팀은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 팀은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 팀이어야 합니다.
예시는 다음과 같습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - kube-manager
-
파일을 편집하고 저장하여 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
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
구성 리소스를 가져옵니다: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
가 Kubernetes 컨텍스트를 Teleport 클러스터 기반의 컨텍스트로 변경했을 수 있으므로,
연결할 Kubernetes 클러스터에 맞게 Kubernetes 컨텍스트를 업데이트하세요:
kubectl config get-contexts선택한 컨텍스트에 CONTEXT_NAME을 할당하세요
kubectl config use-context CONTEXT_NAME
작업 공간에서 Teleport의 get-kubeconfig.sh
스크립트를 다운로드하세요.
이 스크립트는 kubeconfig를 생성하는 데 사용됩니다:
curl -OL \https://raw.githubusercontent.com/gravitational/teleport/v17.0.0-dev/examples/k8s-auth/get-kubeconfig.sh
이 스크립트는 Kubernetes 포드를 가져오고 사용자, 그룹 및 기타 서비스 계정을 가장하는 서비스 계정을 생성합니다.
Teleport Kubernetes Service는 이 서비스 계정을 사용하여 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 Service에 복사하라는 스크립트의 지침은 무시하세요.
다음 섹션에서는 동적 kube_cluster
자원을 생성할 때 kubeconfig 파일을 사용하는 방법을 보여드리겠습니다.
Kubernetes 클러스터 리소스 생성
다음 내용을 포함하는 kube_cluster
리소스를 정의합니다. 파일 이름은 kube_cluster.yaml
입니다:
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.yaml
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 서비스 인스턴스가 실행하여 레이블을 생성하는 shell 명령을 정의합니다. 이를 위해 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.yamlkubernetes cluster "mycluster"가 생성되었습니다
새 Kubernetes 클러스터에 접근하기
Teleport Kubernetes 서비스의 인스턴스는 새로 생성되거나 업데이트된 kube_cluster
리소스를 감시합니다. kube_cluster
리소스를 생성하면 해당 클러스터의 레이블을 추적하도록 구성된 모든 Kubernetes 서비스 인스턴스가 해당 클러스터를 등록하고 Teleport를 통해 이에 접근할 수 있도록 합니다.
따라서 이제 tsh kube ls
를 실행할 때 위에서 등록한 클러스터를 볼 수 있습니다:
tsh kube lsKube Cluster Name Labels Selected ----------------- --------------------------- -------- mycluster teleport.dev/origin=dynamic
teleport.dev/origin=dynamic
레이블은 클러스터가 동적으로 등록되었음을 나타냅니다.
방금 등록한 클러스터에 로그인할 수도 있습니다:
tsh kube login myclusterkubernetes 클러스터 "mycluster"에 로그인했습니다. 연결을 테스트하려면 'kubectl version'을 시도하십시오.
Kubernetes 클러스터 리소스 목록
다음 명령어를 사용하여 kube_cluster
리소스를 목록화할 수 있습니다:
tctl get kube_clusters
Kubernetes 클러스터 리소스 업데이트
이전에 생성한 kube_cluster
리소스를 업데이트하려면, 다음 명령어를 실행하여 Auth Service의 백엔드에 존재하는 리소스를 텍스트 편집기에서 엽니다:
tctl edit kube_clusters/mycluster
리소스를 편집하여 kube_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 lsKube Cluster Name Labels Selected ----------------- ------------------------------------ -------- mycluster env=test teleport.dev/origin=dynamic *
업데이트된 kube_cluster
리소스의 레이블이 Teleport Kubernetes Service 인스턴스가 감시하도록 구성된 레이블과 더 이상 일치하지 않으면, 인스턴스는 등록 해제되고 Kubernetes 클러스터의 프록시가 중지됩니다.
Kubernetes 클러스터 리소스 삭제
이전에 생성한 kube_cluster
리소스를 삭제하려면 다음 명령어를 실행합니다:
tctl rm kube_clusters/myclusterkubernetes cluster "mycluster" has been deleted
이 명령은 Teleport에서 Kubernetes 클러스터를 등록 해제합니다:
tsh kube lsKube Cluster Name Labels Selected----------------- ------ --------
다음 단계
이 가이드에서는 tctl
을 사용하여 kube_cluster
리소스를 관리하는 방법을 보여주었습니다. Teleport를 통해 Kubernetes 클러스터에 대한 액세스를 관리하는 다른 방법에 관심이 있으시면 다음 가이드를 확인하십시오:
- Kubernetes 클러스터를 Teleport에 연결:
teleport-kube-agent
Helm 차트를 사용하여 Kubernetes 클러스터를 Teleport에 등록하는 방법. - Standalone Teleport 클러스터의 Kubernetes 접근: Teleport Kubernetes Service의 구성 파일을 사용하여 Kubernetes 클러스터를 Teleport에 등록하는 방법.