Teleport
Teleport는 Lumie의 운영자 접근 평면입니다. 저장소는 이를 같은 네임스페이스의 두 ArgoCD 애플리케이션으로 관리합니다. teleport 클러스터 자체와 브라우저 앱을 Teleport 프록시 뒤에 등록하는 teleport-agent입니다.
책임
lumie-infra.com과 동일한 인증서가 적용되는 와일드카드 서브도메인에서 운영자 접근을 종단- 로컬 디스크 대신 PostgreSQL에 Teleport 클러스터 상태 저장
teleport-agent에 등록된 브라우저 앱 entry를 게시합니다. 일부 entry는 소유 App-of-Apps 슬라이스에서 체크인되어 있지만 비활성화된 서비스를 가리킬 수 있습니다.- Teleport 커스텀 리소스를 통해 Kubernetes 및 앱 접근 역할 노출
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/security/teleport/argocd.yaml | teleport와 teleport-agent 두 ArgoCD Application 오브젝트 |
lumie-infra/security/teleport/helm-values.yaml | Teleport 클러스터 설정, auth 스토리지, TLS, HA 프록시 설정 |
lumie-infra/security/teleport/kustomization.yaml | Helm 차트 진입점 + NodePort 패치 |
lumie-infra/security/teleport/agent/helm-values.yaml | 앱 등록과 rewrite 규칙 |
lumie-infra/security/teleport/agent/kustomization.yaml | 시크릿 기반 rewrite 헤더를 치환하는 init-container 패치 |
lumie-infra/security/teleport/manifests/certificate.yaml | lumie-infra.com용 와일드카드 인증서 요청 |
lumie-infra/security/teleport/manifests/provision-token.yaml | 앱 에이전트용 Kubernetes join 토큰 |
lumie-infra/security/teleport/manifests/role-admin.yaml | 전체 Kubernetes 및 앱 라벨 접근을 가진 Teleport 역할 kube-admin |
lumie-infra/security/teleport/manifests/vault-static-secret.yaml | Teleport의 PostgreSQL 자격 증명을 위한 Vault 시크릿 |
lumie-infra/security/teleport/manifests/teleport-agent-credentials-vss.yaml | Zot basic auth rewrite용 Vault 시크릿 |
소유권 경계
security/teleport/**는 Teleport 클러스터와 앱 에이전트만 소유합니다.- audit-event export는
applications/teleport-event-handler/**아래 별도 애플리케이션이며, 같은teleport네임스페이스를 공유하더라도 Teleport 클러스터 overlay의 일부가 아닙니다. - 앱 워크로드는 일반적으로 자체 퍼블릭 운영자 ingress를 정의하지 않으며, 이 보안 슬라이스에서 Teleport가 접근 계약을 소유합니다.
퍼블릭 표면과 계약
| 표면 | 계약 |
|---|---|
| 클러스터 이름 | lumie-infra.com |
| 퍼블릭 주소 | lumie-infra.com:443 및 teleport.teleport.svc.cluster.local:443 |
| 서비스 유형 | 포트 443에 대해 30443으로 패치된 NodePort |
| TLS | apex와 와일드카드 이름을 모두 커버하는 cert-manager 발급 teleport-tls Secret |
| 스토리지 백엔드 | 공유 infra-db의 PostgreSQL 데이터베이스 teleport |
| Join 방식 | provision 토큰 teleport-agent를 사용한 Kubernetes in_cluster |
kube agent는 public 인증서 이름이 아니라 내부 서비스를 통해 조인하므로 insecureSkipProxyTLSVerify: true를 사용해 teleport.teleport.svc.cluster.local:443에 연결합니다.
런타임 흐름
앱 접근 계약
앱 에이전트는 lumie-infra/security/teleport/agent/helm-values.yaml에서 내부 서비스를 Teleport 앱으로 등록합니다. 등록 자체가 대상 서비스 배포를 증명하지는 않습니다. 예를 들어 Tekton 앱 entry는 등록되어 있지만 Tekton Argo CD 애플리케이션은 applications/kustomization.yaml에서 비활성입니다.
vaultgrafanaargocdheadlampgoldilockstektonprometheusalertmanagerkarmaminiozotthanosrabbitmqlumie-documentgiteatiltcodecoder
일부 앱은 요청 rewrite가 필요합니다. 체크인된 중요한 예시는 다음과 같습니다.
vault는 OIDC redirect URI가 외부 Teleport 주소를 사용하도록Host헤더를 다시 씁니다.zot는 시크릿 기반 rewrite 헤더로 basic auth를 주입합니다.rabbitmq와minio는 브라우저 콘솔을 위해Host를 다시 씁니다.
Teleport는 rewrite.headers 안에서 환경 변수를 확장하지 않으므로, agent overlay는 시작 전에 구성을 전처리하는 init container를 StatefulSet에 패치합니다.
장애 동작과 운영 리스크
- 와일드카드 인증서 장애는 단일 앱이 아니라 전체 접근 평면을 망가뜨립니다.
- 잘못된
infra-db-credentials시크릿은 auth 상태 읽기/쓰기를 막아 로그인과 인증서 기반 세션 흐름에 영향을 줍니다. - 에이전트의 init-container 치환이 실패하면 Zot은 등록되더라도 필요한 인증 헤더가 렌더링되지 않아 사용할 수 없을 수 있습니다.
- 저장소는
kube-admin역할을 정의하지만, 사용자에 대한 역할 할당은 여기서 체크인된 계약 밖입니다. - NodePort
30443은 선언된 상태의 일부이며, 그 앞단의 로드 밸런서나 DNS 계층은 이 패치 와 계속 정렬되어야 합니다.
관측성
- Teleport 클러스터와 에이전트 워크로드에 대한
kubectl logs가 주요 운영 신호입니다. - 별도
teleport-event-handler애플리케이션이 audit 이벤트를 내보내므로, audit-event 전달이 깨졌다면 이 overlay가 아니라 այնտեղ에서 디버깅해야 합니다. - 서비스 readiness, 인증서 상태, ArgoCD 앱 헬스가 상시 제어 평면 계약을 커버합니다.
검증
kubectl get applications.argoproj.io -n argocd teleport teleport-agent
kubectl get deploy -n teleport -l app.kubernetes.io/instance=teleport
kubectl get statefulset teleport-agent -n teleport
kubectl get svc teleport -n teleport
kubectl get secret,certificate teleport-tls -n teleport
kubectl get teleportprovisiontokens.resources.teleport.dev teleport-agent -n teleport
kubectl get teleportrolev7.resources.teleport.dev kube-admin -n teleport
kubectl logs -n teleport -l app.kubernetes.io/instance=teleport --all-containers --tail=200
kubectl logs -n teleport statefulset/teleport-agent --all-containers --tail=200
성공 신호:
teleport와teleport-agent두 Argo CD 애플리케이션이 모두Healthy및Synced상태입니다.teleport서비스가 Kustomize 패치와 Terraform NLB 계약에 맞는 node port30443의NodePort입니다.teleport-tls인증서가 준비 상태이고, backing secret이 존재합니다.teleport네임스페이스에 TeleportProvisionTokenteleport-agent와 TeleportRoleV7kube-admin이 존재합니다.- Teleport 클러스터 로그에 PostgreSQL 스토리지 연결 실패가 없고,
teleport-agentStatefulSet 로그에 config substitution 또는 앱 등록 오류가 없습니다.