ArgoCD를 통한 Helm을 사용하여 Teleport 에이전트 실행
Teleport는 Kubernetes 클러스터에 대한 안전하고 통합된 접근을 제공할 수 있습니다. Argo CD는 Kubernetes를 위한 선언형 GitOps 지속적 전달 도구입니다. Teleport에는 Kubernetes 클러스터에 Teleport 에이전트를 배포하는 공식 Helm 차트(teleport-kube-agent)가 있습니다.
Teleport는 Kubernetes 클러스터에 대한 안전하고 통합된 접근을 제공할 수 있습니다. 이 가이드는 Helm과 ArgoCD를 사용하여 Kubernetes 클러스터에 Teleport Kubernetes 에이전트를 배포하는 방법을 보여줍니다.
작동 방식#
Argo CD는 Kubernetes를 위한 선언형 GitOps 지속적 전달 도구입니다. 이는 대규모 배포를 조율하고, Kubernetes 리소스가 원하는 배포 상태에서 벗어나는 것을 방지하는 데 사용됩니다.
Teleport에는 Kubernetes 클러스터에 Teleport 에이전트를 배포하는 공식 Helm 차트(teleport-kube-agent)가 있습니다. 에이전트는 여러 서비스를 실행하도록 구성할 수 있지만, 기본적으로 kubernetes_service를 실행하여 Teleport를 통해 Kubernetes API에 대한 접근을 제공합니다.
이 가이드는 ArgoCD의 기본 Helm 지원을 활용하여 teleport-kube-agent Helm 차트를 사용해 Teleport 에이전트를 배포합니다.
사전 요구 사항#
- Teleport를 통해 접근을 제공하려는 기존 Kubernetes 클러스터.
To check that you can connect to your Teleport cluster, sign in with tsh login, then
verify that you can run tctl commands using your current credentials.
For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:
$ tsh login --proxy= --user=
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
If you can connect to the cluster and run the tctl status command, you can use your
current credentials to run subsequent tctl commands from your workstation.
If you host your own Teleport cluster, you can also run tctl commands on the computer that
hosts the Teleport Auth Service for full permissions.
- 위의 Kubernetes 클러스터에 배포할 수 있는 기존 ArgoCD 인스턴스(버전 2.10 이상).
- 워크스테이션에 설치된
tsh클라이언트 도구 v[teleport.version]+. 설치 페이지에서 다운로드할 수 있습니다.
1/3단계. 조인 토큰 생성#
Teleport 에이전트는 조인 토큰을 사용하여 인증서를 획득하고 Teleport에 연결합니다. 자세한 내용은 조인 문서를 참조하세요. 토큰은 초기 조인 시에만 사용되며, Teleport Kube 에이전트는 Kubernetes에 인증서를 저장하고 이후 조인 시에는 토큰이 필요하지 않습니다. 이 섹션에서는 에이전트가 Teleport 클러스터에 조인할 수 있는 토큰을 생성합니다.
$ tctl tokens add --type=kube,app --ttl=5m
다음 토큰 유형을 지정할 수 있습니다:
| Role | Teleport Service |
|---|---|
app |
Application Service |
auth |
Auth Service |
bot |
Machine & Workload Identity Bot |
db |
Database Service |
discovery |
Discovery Service |
kube |
Kubernetes Service |
node |
SSH Service |
proxy |
Proxy Service |
windowsdesktop |
Windows Desktop Service |
차트가 지원하는 역할 및 토큰 유형은 teleport-kube-agent 차트
레퍼런스를 참조하세요.
2/3단계. ArgoCD를 통해 teleport-kube-agent Helm 차트 구성 및 배포#
-
Teleport를 위한 네임스페이스를 생성하고 Pod Security Admission을 구성합니다. 이는 네임스페이스의 파드에 보안 표준을 적용합니다:
$ kubectl create namespace teleport namespace/teleport created $ kubectl label namespace teleport 'pod-security.kubernetes.io/enforce=baseline' namespace/teleport labeled -
다음을 템플릿으로 사용하여 새 ArgoCD 애플리케이션을 생성합니다.
project: default
source:
repoURL: 'https://charts.releases.teleport.dev'
targetRevision: (=teleport.version=)
helm:
values: |-
roles: kube,app
authToken: $YOUR_AUTH_TOKEN
proxyAddr: $YOUR_PROXY_ADDRESS
kubeClusterName: $YOUR_KUBE_CLUSTER_NAME
highAvailability:
replicaCount: 2
podDisruptionBudget:
enabled: true
minAvailable: 1
chart: teleport-kube-agent
destination:
server: 'https://kubernetes.default.svc'
namespace: teleport
# 이 섹션은 teleport-kube-agent-updater가 ArgoCD가 업데이트를 되돌리지 않고
# 에이전트를 업데이트할 수 있도록 허용하는 데 사용됩니다.
ignoreDifferences:
- group: apps
kind: StatefulSet
name: $YOUR_APPLICATION_NAME
namespace: teleport
jqPathExpressions:
- '.spec.template.spec.containers[] | select(.name == "teleport").image'
- 다음 명령을 사용하여 변경 사항을 동기화하고 구성을 적용합니다:
$ argocd app sync $YOUR_APPLICATION_NAME
- 설정을 확인하려면 Teleport 클러스터의 '리소스' 페이지로 이동하여 Kubernetes 클러스터가 등록되었는지 확인합니다.
3/3단계. 새 리소스에 대한 접근 관리#
이 단계에서는 viewers 그룹의 구성원으로서 Teleport로 보호된 모든 Kubernetes
클러스터에 요청을 보낼 수 있도록 사용자를 허용하는 kube-access라는 Teleport 역할을
생성합니다. Teleport Kubernetes 서비스는 해당 사용자의 요청을 프록시할 때
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
Assign the kube-access role to your Teleport user by running the appropriate
commands for your authentication provider:
kube-access 역할이 viewers 그룹의 구성원으로서 Kubernetes 클러스터에 접근할 수 있도록
승인되었지만, 이 그룹은 아직 Kubernetes 클러스터 내에서 권한이 없습니다. 이러한 권한을
부여하려면 viewers 그룹에 권한을 부여하는 Kubernetes RoleBinding 또는
ClusterRoleBindings를 생성합니다.
-
다음 내용으로
viewers-bind.yaml파일을 생성합니다: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
이제 Teleport 사용자는 Kubernetes 클러스터에 접근할 때 viewers 그룹의 구성원 자격을
가정할 수 있는 권한을 갖게 되었으며, viewers 그룹은 클러스터의 리소스를 조회할 수 있는
권한을 갖게 되었습니다.
