Infograb logo
Kubernetes 클러스터 등록

이 가이드는 보호하고자 하는 Kubernetes 클러스터에 Teleport Kubernetes 서비스를 배포하여 Kubernetes 클러스터를 Teleport 자원으로 등록하는 방법을 시연합니다.

이 시나리오에서 Teleport Kubernetes 서비스 포드는 Kubernetes에서 실행되고 있음을 감지하고 Kubernetes 클러스터를 자동으로 등록합니다. 다음 다이어그램은 Kubernetes 클러스터에서 실행되는 Teleport Kubernetes 서비스와 함께 이 배포 시나리오의 간소화된 개요를 제공합니다:

Kubernetes 클러스터를 등록하고 발견하는 다른 방법에 대한 정보는 Teleport로 Kubernetes 클러스터 등록하기를 참조하세요.

전제 조건

  • 실행 중인 Teleport 클러스터, tctl 관리 도구 및 tsh 클라이언트 도구에 대한 접근이 필요합니다, 버전 >= 16.2.0.

    Teleport Enterprise 및 Teleport Enterprise Cloud의 경우, tctl의 Enterprise 버전을 사용해야 합니다. 설치된 도구를 확인하려면 다음 명령어를 실행하세요:

    tctl version

    Teleport Enterprise v16.2.0 go1.22


    tsh version

    Teleport v16.2.0 go1.22

    이러한 도구는 환경에 맞는 설치 지침을 따라 다운로드할 수 있습니다.

  • Kubernetes >= v1.17.0

  • Helm >= 3.4.2

    Helm과 Kubernetes가 설치되어 있고 최신 상태인지 확인하세요.

    helm version

    version.BuildInfo{Version:"v3.4.2"}


    kubectl version

    클라이언트 버전: version.Info{Major:"1", Minor:"17+"}

    서버 버전: version.Info{Major:"1", Minor:"17+"}

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

1단계/3. RBAC 자원 생성

Teleport를 사용하여 Kubernetes 클러스터에 인증하려면, 상호작용할 Kubernetes 클러스터에 대한 접근을 부여하는 Teleport 역할이 필요합니다.

이 단계에서는 사용자가 viewers 그룹의 일원으로 Teleport 보호 Kubernetes 클러스터에 요청을 보낼 수 있게 해주는 kube-access라는 Teleport 역할을 만드는 방법을 보여줍니다. Teleport Kubernetes 서비스는 사용자 요청을 프록시할 때 viewers 그룹을 가장합니다.

  1. 다음 내용을 포함하는 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: {}
    
  2. 변경 사항을 적용하세요:

    tctl create -f kube-access.yaml
  3. kube-access 역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:

    1. 로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:

      ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
    2. 로컬 사용자를 편집하여 새로운 역할을 추가합니다:

      tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},kube-access"
    3. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

    1. github 인증 커넥터를 가져옵니다:

      tctl get github/github --with-secrets > github.yaml

      --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 github.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 github.yaml 파일을 제거해야 합니다.

    2. github.yaml을 편집하고 teams_to_roles 섹션에 kube-access을 추가합니다.

      이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

      여기에 예시가 있습니다:

        teams_to_roles:
          - organization: octocats
            team: admins
            roles:
              - access
      +       - kube-access
      
    3. 변경 사항을 적용합니다:

      tctl create -f github.yaml
    4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

    1. saml 구성 리소스를 가져옵니다:

      tctl get --with-secrets saml/mysaml > saml.yaml

      --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 제거해야 합니다.

    2. saml.yaml을 편집하고 attributes_to_roles 섹션에 kube-access을 추가합니다.

      이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

      여기에 예시가 있습니다:

        attributes_to_roles:
          - name: "groups"
            value: "my-group"
            roles:
              - access
      +       - kube-access
      
    3. 변경 사항을 적용합니다:

      tctl create -f saml.yaml
    4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

    1. oidc 구성 리소스를 가져옵니다:

      tctl get oidc/myoidc --with-secrets > oidc.yaml

      --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 제거해야 합니다.

    2. oidc.yaml을 편집하고 claims_to_roles 섹션에 kube-access을 추가합니다.

      이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

      여기에 예시가 있습니다:

        claims_to_roles:
          - name: "groups"
            value: "my-group"
            roles:
              - access
      +       - kube-access
      
    3. 변경 사항을 적용합니다:

      tctl create -f oidc.yaml
    4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

kube-access 역할이 viewers 그룹의 일원으로서 Kubernetes 클러스터에 접근할 수 있도록 승인했지만, 이 그룹은 아직 Kubernetes 클러스터 내에서 권한을 가지고 있지 않습니다. 이러한 권한을 부여하려면 viewers 그룹에 권한을 부여하는 Kubernetes RoleBinding 또는 ClusterRoleBindings를 생성해야 합니다.

  1. 다음 내용을 포함하는 viewers-bind.yaml라는 파일을 생성하세요:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: viewers-crb
    subjects:
    - kind: Group
      # "viewers" 그룹을 "kube-access" 역할에서 할당된 kubernetes_groups에 바인딩
      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
    
  2. kubectl을 사용하여 ClusterRoleBinding을 적용합니다:

    kubectl apply -f viewers-bind.yaml

이제 Teleport 사용자는 Kubernetes 클러스터에 접근할 때 viewers 그룹의 일원이 될 수 있는 권한을 가지게 되었고, viewers 그룹도 클러스터 내의 자원을 볼 수 있는 권한을 가지게 되었습니다. 다음 단계는 사용자 요청을 프록시하기 위해 클러스터에 Teleport Kubernetes 서비스를 배포하는 것입니다.

2단계/3. 안내받은 등록 지침 따르기

이 단계에서는 Teleport 웹 UI에서 스크립트를 복사하고 터미널에서 실행하여 Kubernetes 클러스터에 Teleport Kubernetes 서비스를 배포합니다.

  1. Teleport 웹 UI를 열고 관리 계정으로 로그인하세요.

  2. Enroll New Resource를 클릭하세요.

  3. 리소스 유형을 필터링하기 위해 검색 필드에 Kubernetes의 전체 또는 일부를 입력한 다음 Kubernetes를 클릭하세요.

  4. teleport-agent 차트 리포지토리를 추가하는 명령을 복사하여 작업용 터미널에 붙여넣으세요.

  5. Teleport Kubernetes 서비스를 배포할 네임스페이스와 이 클러스터에 연결할 때 사용할 표시 이름으로 teleport-agent를 입력한 다음 Next를 클릭하세요.

    다음을 클릭한 후, Teleport는 Kubernetes 클러스터를 Teleport 클러스터의 자원으로 등록하고 구성하는 스크립트를 생성합니다.

  6. Teleport 웹 UI에 표시된 명령을 복사하여 터미널에서 실행하세요.

    Teleport 웹 UI는 "새 Kubernetes 클러스터를 성공적으로 감지했습니다"라는 메시지를 표시하며 클러스터가 등록되었음을 확인합니다. 이 메시지를 보면 Next를 클릭하여 계속 진행하세요.

3단계/3. Kubernetes 접근 테스트

이제 Teleport Kubernetes 서비스를 Kubernetes 클러스터에 배포하고 클러스터를 Teleport 자원으로 등록했으므로, viewers 그룹의 일원으로서 Kubernetes 클러스터에 접근할 수 있는지 확인하세요.

이 가이드의 이전 단계를 따르면, Set Up Access 보기에서 Kubernetes Groups 필드가 viewers로 채워집니다.

접근을 설정하고 테스트하려면:

  1. Next를 클릭하세요.

  2. teleport-agent 네임스페이스, 이전 단계의 Kubernetes viewers 그룹 및 Teleport 사용자 이름을 지정하세요.

  3. Teleport 웹 UI에 표시된 명령을 복사하여 Kubernetes 클러스터와 상호작용하고 Teleport를 통한 접근을 확인하세요. 또는 아래의 명령을 실행하세요:

    Teleport 클러스터에 인증합니다:

    tsh login --proxy=teleport.example.com:443 --auth=local --user=admin@example.com teleport.example.com

    접근 가능한 Kubernetes 클러스터 목록을 확인합니다:

    tsh kube ls

    Kubernetes 클러스터 접근을 위한 자격 증명을 가져옵니다:

    tsh kube login Kubernetes-cluster-name

    Teleport Kubernetes 서비스는 kubectl 명령을 프록시합니다:

    kubectl get pods -n teleport-agent

    이전에 배포한 Teleport Kubernetes 서비스 포드를 확인할 수 있어야 합니다:

    NAME               READY   STATUS    RESTARTS   AGE
    teleport-agent-0   1/1     Running   0          8m6s
    
  4. Finish를 클릭하세요.

다음 단계

이 가이드는 Kubernetes 클러스터에 Teleport Kubernetes 서비스를 실행하여 클러스터를 등록하는 방법을 시연했습니다.

Teleport 원문 보기