인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
teleport-cluster Helm 차트에서 Kubernetes Operator
이 가이드는 teleport-cluster
Helm 차트를 통해 배포된 Teleport 클러스터 옆에 Teleport Kubernetes Operator를 실행하는 방법을 설명합니다.
Warning
귀하의 Teleport 클러스터가 teleport-cluster
Helm 차트를 사용하여 배포되지
않은 경우 (Teleport Cloud, 수동 배포, Terraform을 통한 배포 등), 대신 독립형
운영자 가이드를 따라야 합니다.
전제 조건
다음 명령어를 실행하여 Kubernetes 연결을 확인하세요:
kubectl cluster-infoKubernetes 제어 플레인이 https://127.0.0.1:6443 에서 실행 중입니다.
CoreDNS는 https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy 에서 실행 중입니다.
Metrics-server는 https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy 에서 실행 중입니다.
Tip
운영자를 로컬에서 실험하고자 하는 사용자는
minikube를 사용하여 로컬
Kubernetes 클러스터를 시작할 수 있습니다: code $ minikube start
1/2단계. 운영자와 함께 teleport-cluster Helm 차트 설치
Teleport Helm 저장소를 설정합니다.
Helm이 Teleport Helm 저장소에서 호스팅되는 차트를 설치할 수 있도록 허용합니다:
helm repo add teleport https://charts.releases.teleport.dev
원격 저장소의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리스로 업그레이드할 수 있습니다:
helm repo update
teleport-cluster 네임스페이스에 operator.enabled=true
로 Teleport
클러스터의 Helm 차트를 설치합니다:
helm install teleport-cluster teleport/teleport-cluster \ --create-namespace --namespace teleport-cluster \ --set clusterName=teleport-cluster.teleport-cluster.svc.cluster.local \ --set operator.enabled=true \ --version 17.0.0-dev
귀하의 Teleport 클러스터 리소스를 위한 네임스페이스를 만듭니다:
kubectl create namespace teleport-cluster
Teleport Auth 서비스는 Teleport Enterprise 계정을 인증하기 위해 라이센스 파일을 읽습니다.
라이센스 파일을 얻으려면 Teleport 계정 대시보드로 이동하여 로그인하십시오. teleport.sh에서 시작하여 Teleport 계정 이름(예: my-company)을 입력합니다. 로그인 후 "GENERATE LICENSE KEY" 버튼이 표시되며, 이를 클릭하면 새 라이센스 파일이 생성되고 다운로드할 수 있습니다.
생성한 네임스페이스에 "license"라는 이름의 비밀을 만듭니다:
kubectl -n teleport-cluster create secret generic license --from-file=license.pem
귀하의 Teleport 클러스터와 Teleport Kubernetes Operator를 배포합니다:
helm install teleport-cluster teleport/teleport-cluster \ --namespace teleport-cluster \ --set enterprise=true \ --set clusterName=teleport-cluster.teleport-cluster.svc.cluster.local \ --set operator.enabled=true \ --version 17.0.0-dev
이 명령은 필요한 Kubernetes CRD를 설치하고 Teleport 클러스터 옆에 Teleport Kubernetes Operator를 배포합니다. 모든 리소스(클러스터 범위의 CRD는 제외)는 teleport-cluster
네임스페이스에 생성됩니다.
2/2단계. 클러스터와 운영자가 실행 중이고 건강한지 확인
kubectl get deployments -n teleport-clusterkubectl get pods -n teleport-cluster
다음 단계
새로 배포된 Teleport Kubernetes 운영자를 사용하여 Teleport 사용자 생성 및 역할 부여를 위해 사용자 및 역할 IaC 가이드를 따르세요.
Helm 차트 매개변수는 teleport-cluster
Helm 차트 참조에서 문서화되어 있습니다.
AWS 또는 GCP에서 Teleport 실행과 같은 특정 설정에 대한 자세한 내용은 Helm 배포 가이드를 참조하세요.
문제 해결
CustomResources (CRs)는 조화되지 않습니다
Teleport Operator는 Kubernetes에서 새로운 리소스 또는 변경 사항을 감시합니다.
변경이 발생하면 조화 루프가 트리거됩니다. 이 루프는 리소스를 검증하고,
Teleport에 이미 존재하는지 확인하며, 리소스를 생성/업데이트/삭제하기 위해 Teleport API를 호출하는 작업을 담당합니다.
조화 루프는 또한 Kubernetes 리소스에 status
필드를 추가합니다.
오류가 발생하고 조화 루프가 성공하지 못하면, status.conditions
의 항목이
무엇이 잘못되었는지를 설명합니다. 이는 사용자가 kubectl
로 Kubernetes 리소스를 검사하여
오류를 진단할 수 있게 해줍니다:
kubectl describe teleportusers myuser
예를 들어, 사용자가 존재하지 않는 역할이 부여된 경우 상태는 다음과 같습니다:
apiVersion: resources.teleport.dev/v2
kind: TeleportUser
# [...]
status:
conditions:
- lastTransitionTime: "2022-07-25T16:15:52Z"
message: Teleport 리소스는 Kubernetes 출처 레이블을 가지고 있습니다.
reason: OriginLabelMatching
status: "True"
type: TeleportResourceOwned
- lastTransitionTime: "2022-07-25T17:08:58Z"
message: "Teleport가 오류를 반환했습니다: role my-non-existing-role이(가) 발견되지 않음"
reason: TeleportError
status: "False"
type: SuccessfullyReconciled
여기서 SuccessfullyReconciled
는 False
이며, 오류는 role my-non-existing-role이(가) 발견되지 않d
입니다.
상태가 존재하지 않거나 문제를 해결하기에 충분한 정보를 제공하지 않으면,
운영자 로그를 확인하십시오:
CR에 상태가 없습니다
-
CR이 운영자와 동일한 네임스페이스에 있는지 확인하십시오. 운영자는
자신의 네임스페이스 내의 리소스만 감시합니다. -
운영자 포드가 실행 중이고 정상인지 확인하십시오:
kubectl get pods -n "$OPERATOR_NAMESPACE"` -
운영자 로그를 확인하십시오:
kubectl logs deploy/<OPERATOR_DEPLOYMENT_NAME> -n "$OPERATOR_NAMESPACE"
Note
다중 복제 배포의 경우, 오직 하나의 운영자 인스턴스가 조화 루프를 실행하고 있습니다. 이 운영자는 리더라고 불리며, 유일하게 조화 로그를 생성합니다. 다른 운영자 인스턴스는 다음과 같은 로그로 대기하고 있습니다:
leaderelection.go:248] attempting to acquire leader lease teleport/431e83f4.teleport.dev...
조화 문제를 진단하려면 리소스를 조화하는 포드를 찾기 위해 모든 포드를 검사해야 합니다.
Kubernetes CR을 삭제할 수 없습니다
운영자는 최종자(finalizer)를 통해 Kubernetes CR의 삭제를 방지합니다.
Teleport 리소스가 삭제될 때까지 CR이 삭제되는 것을 허용하지 않으며,
이는 떨러진 리소스를 남기거나 의도하지 않은 접근을 부여하지 않기 위한 안전 장치입니다.
Teleport가 리소스 삭제를 거부하는 몇 가지 이유가 있을 수 있으며,
가장 흔한 이유는 다른 리소스가 그것에 의존하고 있는 경우입니다.
예를 들어: 사용자가 여전히 할당된 역할을 삭제할 수 없습니다.
이 경우 운영자는 로그에서 Teleport가 보낸 오류를 보고합니다.
이 잠금을 해결하려면 다음 중 하나를 선택할 수 있습니다:
-
리소스가 Teleport에서 성공적으로 삭제되도록 의존성 문제를 해결하십시오.
역할 예시의 경우, 이는 해당 역할을 가진 여러 사용자에서 역할 언급을 제거해야 함을 의미합니다. -
Kubernetes CR을 패치하여 최종자를 제거하십시오. 이는 Kubernetes에 운영자 삭제를 기다리지 않도록
지시하고 CR을 제거합니다. 이 작업을 수행하면 CR은 제거되지만 Teleport 리소스는 남게 됩니다.
운영자는 다시는 이를 제거하려고 시도하지 않습니다.예를 들어, 역할 이름이
my-role
인 경우:kubectl patch TeleportRole my-role -p '{"metadata":{"finalizers":null}}' --type=merge