Infograb logo
텔레포트 클러스터 Helm 차트에서 Kubernetes Operator

이 가이드는 teleport-cluster Helm 차트를 통해 배포된 텔레포트 클러스터와 함께 텔레포트 Kubernetes 운영자를 실행하는 방법을 설명합니다.

Warning

귀하의 텔레포트 클러스터가 teleport-cluster Helm 차트를 사용하여 배포되지 않은 경우 (텔레포트 클라우드, 수동 배포, Terraform을 통한 배포 등), 대신 독립형 운영자 가이드를 따라야 합니다.

사전 요구 사항

  • Kubernetes 클러스터 (teleport-cluster Helm 차트가 이미 배포된 경우 또는 아닌 경우);
  • Helm
  • kubectl

다음 명령어를 실행하여 Kubernetes 연결성을 확인하세요:

kubectl cluster-info

Kubernetes 제어 평면은 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 클러스터를 시작할 수 있습니다:

minikube start

1단계/2단계. 운영자와 함께 teleport-cluster Helm 차트 설치

Teleport Helm 리포지토리를 설정하세요. Teleport Helm 리포지토리에 호스팅된 차트를 설치하도록 Helm을 허용하세요:

helm repo add teleport https://charts.releases.teleport.dev

원격 리포지토리의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리즈로 업그레이드할 수 있습니다:

helm repo update

operator.enabled=true로 텔레포트 클러스터의 Helm 차트를 teleport-cluster 네임스페이스에 설치합니다:

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 16.2.0

텔레포트 클러스터 리소스를 위한 네임스페이스를 생성합니다:

kubectl create namespace teleport-cluster

Teleport 인증 서비스는 Teleport Enterprise 계정을 인증하기 위해 라이선스 파일을 읽습니다.

라이선스 파일을 얻으려면 Teleport 계정 대시보드로 이동하여 로그인하십시오.
teleport.sh에서 시작하고 Teleport 계정 이름(예: my-company)을 입력하세요.
로그인 후 "GENERATE LICENSE KEY" 버튼이 표시되며, 이 버튼을 클릭하면 새로운 라이선스 파일이 생성되고 이를 다운로드할 수 있습니다.

생성한 네임스페이스에 "license"라는 비밀을 만듭니다:

kubectl -n teleport-cluster create secret generic license --from-file=license.pem

텔레포트 클러스터와 텔레포트 Kubernetes 운영자를 배포합니다:

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 16.2.0

이 명령어는 필요한 Kubernetes CRD를 설치하고 텔레포트 클러스터 옆에 텔레포트 Kubernetes 운영자를 배포합니다. 모든 리소스(클러스터 범위의 CRD 제외)는 teleport-cluster 네임스페이스에 생성됩니다.

2단계/2단계. 클러스터와 운영자가 실행 중인지 확인합니다

kubectl get deployments -n teleport-cluster


kubectl get pods -n teleport-cluster

다음 단계

사용자 및 역할 IaC 가이드를 따라 새로 배포된 텔레포트 Kubernetes 운영자를 사용하여 텔레포트 사용자를 생성하고 역할을 부여합니다.

Helm 차트 매개변수는 teleport-cluster Helm 차트 참조에 문서화되어 있습니다.

AWS 또는 GCP에서 텔레포트를 실행하는 것과 같은 특정 설정에 대한 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가 반환한 오류: 역할 my-non-existing-role이(가) 발견되지 않음'
    reason: TeleportError
    status: "False"
    type: SuccessfullyReconciled

여기서 SuccessfullyReconciledFalse이며, 오류는 role my-non-existing-role is not found입니다.

상태가 존재하지 않거나 문제를 해결할 충분한 정보를 제공하지 않는 경우,
운영자 로그를 확인하세요:

CR에 상태가 없음

  1. CR이 운영자와 동일한 네임스페이스에 있는지 확인하세요. 운영자는 자신의 네임스페이스의 리소스만 감시합니다.

  2. 운영자 포드가 실행되고 있는지 및 건강한지 확인하세요:

    kubectl get pods -n "$OPERATOR_NAMESPACE"
  3. 운영자 로그를 확인하세요:

    kubectl logs deploy/<OPERATOR_DEPLOYMENT_NAME> -n "$OPERATOR_NAMESPACE"
    Note

    다중 복제 배포의 경우, 하나의 운영자 인스턴스만이 조정 루프를 실행하고 있습니다. 이 운영자를 리더라고 하며 조정 로그를 생성하는 유일한 인스턴스입니다. 다른 운영자 인스턴스는 다음 로그와 함께 대기하고 있습니다:

    leaderelection.go:248] attempting to acquire leader lease teleport/431e83f4.teleport.dev...
    

    조정 문제를 진단하려면 모든 포드를 검사하여 리소스를 조정하는 포드를 찾아야 합니다.

Kubernetes CR을 삭제할 수 없습니다

운영자는 최종기로 인해 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
Teleport 원문 보기